Всем привет, нужна помощь.
Память АТ24С512 и часы D1340 подключены к ADuC848 по I2C.
Проблемма: при чтении из памяти по байтно при единичном чтении из любой ячейки чтение корректно, но как только начинаю читать этой же функцией несколько байт подряд значения зависят от прдидущего прочитанного байта. Т.е. если предидущий прочитанный байт содержит чотное число следующее читается верно, если не четное то прочитанное число на 128 больше.
Пример:
Ячейка Записываю Считываю
----0-----------0------------0
----1-----------1------------1
----2-----------2----------130
----3-----------3------------3
----4-----------4----------132
Такое ощущение что младший бит предидущего байта попадает в старший последующего.
Пробовал читать страницами эфект тотже. С часов висящих на том же порту читаю все значения корректны.
функции для чтения записи:
#define EEPROM_BUS_ADDRESS 0xA0
void write_byte_eeprom (unsigned int address, unsigned char datas)
{
i2c_start();
i2c_tx(EEPROM_BUS_ADDRESS);
i2c_tx((unsigned char)address>>8);
i2c_tx((unsigned char)address);
i2c_tx(datas);
i2c_stop();
}
unsigned char read_byte_eeprom (unsigned int address)
{
unsigned char datas;
i2c_start();
i2c_tx(EEPROM_BUS_ADDRESS);
i2c_tx((unsigned char)address>>8);
i2c_tx((unsigned char)address);
i2c_start();
i2c_tx(EEPROM_BUS_ADDRESS | 1);
datas = i2c_rx(0);
i2c_stop();
return datas;
}
Буду благодарен за любую помощь.