Обсуждаем цифровые устройства...
Ответить

EEPROM 24C01A Трабл с чтением нескольких байт

Пн апр 02, 2018 10:37:34

Доброго времени суток! Разбираюсь с EERPOMкой 24C01A. Запись происходит нормально как по одному байту, так и целой страницей (8 байт). А вот с чтением какая-то ерунда: считываю с конкретного адреса один байт - всё работает, как и должно. Начинаю читать несколько байт - считывается только первый байт по заданному адресу, остальные 0xFF или 0x00. Следом проверяю одиночным чтением со всех этих адресов - данные на месте и нет там никаких 0xFF и 0x00. Пробовал читать пакеты длиной кратно странице - эффект тот же: считывается только первый байт по заданному адресу, остальные 0xFF или 0x00. Где я свернул не туда?
Логи прикладываю:
Изображение
Вложения
2018-04-02_13-32-09.png
(77.08 KiB) Скачиваний: 152

Re: EEPROM 24C01A Трабл с чтением нескольких байт

Пн апр 02, 2018 11:38:11

После первого чтения надо ACK делать, а не NAK, imho. NAK только при приёме последнего байта, чтобы сказать, что больше не нужно.

Re: EEPROM 24C01A Трабл с чтением нескольких байт

Пн апр 02, 2018 12:03:53

Проглядел этот момент, исправил - не решило ситуацию.

Добавлено after 19 minutes 47 seconds:
uldemir, спасибо за правильное направление! Пересмотрел логи, выправил функцию Аска, заработало.
Было:
Код:
void I2C_Ack(){
   SDA_LOW;
   uDelay(2);
   SCL_HI;
   uDelay(4);
   SCL_LOW;
   uDelay(2);
}


Стало:
Код:
void I2C_Ack(){
   SDA_LOW;
   uDelay(2);
   SCL_HI;
   uDelay(4);
   SCL_LOW;
   uDelay(2);
   SDA_HI;
}
Ответить