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

Обсуждаем цифровые устройства...
Ответить
Встал на лапы
Сообщения: 113
Зарегистрирован: Сб янв 11, 2014 21:25:55

Сообщение Alex-Elektron »

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

Сообщение uldemir »

После первого чтения надо ACK делать, а не NAK, imho. NAK только при приёме последнего байта, чтобы сказать, что больше не нужно.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Реклама
Встал на лапы
Сообщения: 113
Зарегистрирован: Сб янв 11, 2014 21:25:55

Сообщение 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;
}
Ответить

Вернуться в «Цифровая техника»