Страница 1 из 1

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

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

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

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

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

Добавлено: Пн апр 02, 2018 12:03:53
Alex-Elektron
Проглядел этот момент, исправил - не решило ситуацию.

Добавлено 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;
}