ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
632650
evilbald (20.11.2015 19:24, просмотров: 1063)
XC167 I2C не могу считать байт из памяти M24128-BWMN6P, подскажите что не так? Сделал кусок проекта DaVe-ом, соответственно для чтения делаю следующее: unsigned short rd_i2c_eeprom(unsigned char addr_low, unsigned char addr_high) { int d; unsigned short val; I2C_vGenStartCond(); I2C_vWriteData(0xA0);//запись ReadACK(); I2C_vWriteData(addr_high);//адрес ReadACK(); I2C_vWriteData(addr_low);//адрес ReadACK(); I2C_vGenStartCond(); I2C_vWriteData(0xA1);//чтение ReadACK(); DP90 = 0; I2C_vDisableACK(); val = I2C_uwReadData(); I2C_vGenStopCond(); DP90 = 1; return val; } Но по осциллограмме я вижу, что после отсылки первого сообщения формируется сразу же стоп, не пойму - это что ли бит ACK не приходит или что-то еще? Его пытаюсь считать так: void ReadACK(void) { char E_ACK; // прием от eeprom ACK //SDA = 0; SDA = 0; DP90 = 0; _nop_( ); SCL = 1; _nop_( ); _nop_( ); _nop_( ); E_ACK = SDA; //while(SDA) _srvwdt_( ); SCL = 0; _nop_( ); DP90 = 1; } Я думал, что Keil берет на себя всю лабуду по формированию тактов, но вот с этим ACK-ом ничего не могу понять. Если кто знает в чем ошибка - подскажите пожалуйста!