11 #define MEMTEST_MAX 512
13 static uint8_t rand(uint16_t *x)
28 for(uint16_t i = 0; i < MEMTEST_MAX; i++) {
29 if(!(i%512)) printf("|");
30 mem_write(i, rand(&seed));
36 for(uint16_t i = 0; i < MEMTEST_MAX; i++) {
37 if(!(i%512)) printf("-");
38 uint8_t v1 = mem_read(i);
39 uint8_t v2 = rand(&seed);
41 if((v1 & 0xFF) != (v2 & 0xFF)) {
42 if(!s) printf("<0x%x-", i);
45 if(s) printf("0x%x>", i-1);
54 bus_lock(); /* get bus access */
55 MEMPORT |= (1 << MREQ) | (1 << RD) | (1 << WR); /* turn on pullups */
56 MEMDDR |= (1 << MREQ) | (1 << RD) | (1 << WR); /* pins as outputs */
61 MEMDDR &= ~((1 << MREQ) | (1 << RD) | (1 << WR)); /* pins as inputs */
62 i2c_write(I2C_ALOW, 0xFF); /* tristate PCF8574s */
63 i2c_write(I2C_AHIGH, 0xFF);
64 i2c_write(I2C_DATA, 0xFF);
67 uint8_t mem_read(uint16_t addr)
71 /* do a read request */
72 i2c_write(I2C_ALOW, (addr & 0x00FF));
73 i2c_write(I2C_AHIGH, (addr & 0xFF00) >> 8);
74 i2c_write(I2C_DATA, 0xFF);
75 MEMPORT &= ~((1 << MREQ) | (1 << RD));
76 data = i2c_read(I2C_DATA);
77 MEMPORT |= (1 << MREQ) | (1 << RD);
82 void mem_write(uint16_t addr, uint8_t data)
84 /* do a write request */
85 i2c_write(I2C_ALOW, (addr & 0x00FF));
86 i2c_write(I2C_AHIGH, (addr & 0xFF00) >> 8);
87 i2c_write(I2C_DATA, data);
88 MEMPORT &= ~((1 << MREQ) | (1 << WR));
89 MEMPORT |= (1 << MREQ) | (1 << WR);