Страница 1 из 1
EEPROM AT24C256C не читается несколько байт подряд, почему?
Добавлено: Сб янв 19, 2019 01:03:20
DENIS451
EEPROM AT24C256C не читается несколько байт подряд:
записываю в подряд 12 байт и пробую их прочесть, тоже в подряд,
читается только самый первый байт - остальные 11 байт нули!
Если задавать другие адреса чтения, и читать по одному байту, видно что записалось всё правильно,
проблема только с потоковым чтением!
Что может быть не так?
Прилагаю датаграмму с логического анализатора для KingstVIS 3.1.2
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 06:24:42
Core-X
У вас скорее всего не правильно происходить считывания массива. Считывания одно байта и массива байт, это разные вещи. В даташите есть пример считывания данных по I2C.
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 06:48:35
Аlex
DENIS451 писал(а):Прилагаю датаграмму с логического анализатора для KingstVIS 3.1.2
Лучше бы код показали, чем файл какого-то неизвестного половине пользователям формата.
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 07:04:34
ARV
После чтения каждого байта STOP передаёте, небось?
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 07:26:58
musor
уже не помню на вскидку но кажется 24с02 и 24с256 читают пишут иначе
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 09:50:23
Albert_V
DENIS451, Выложите Printscreen экрана ЛА. Скорее всего, ошибка в Restart-е после записи адреса стартового адреса чтения.
P.S.
На всякий случай, напомню: У 24C256 страница записи 64 байта. Т.е., если вы, к примеру, захотите записать несколько байт подряд с адреса 63h - будет ошибка (данные, ожидаемые по записи по адресу 64h, окажутся по адресу 0h).
Т.ч, при записи, если вы переходите на следующую страницу, нужно дать Stop, подождать пока она запишет (можно проверять по ACK-у на её адрес), и продолжить запись с начала следующей страницы (Start, Device Adress и т.д.).
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 11:10:14
DENIS451
Выложил скрины ЛА1.png и ЛА2.png
На всякий случай прога:
https://yadi.sk/d/DV2zN0L6A3v0hA (она бесплатная, скачал с оф сайта производителя ЛА Kingst LA1010)
Код под STM32F105 нет смысла выкладывать - там софтовый I2C я могу нарисовать любую датаграмму, логический анализатор не самый плохой,
на двух каналах выборка 100мГц заметит любую иголку на которую способна среагировать EEPROM.
Писать и читать пытаюсь с нулевого адреса.
Покупал тут:
https://www.chipdip.ru/product/at24c256c-sshl-t
Ещё вопрос, что означает параметр из датащита "Write Cycle Time" равный 5 миллисекунд?
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 11:42:04
Albert_V
DENIS451 писал(а):...что означает параметр из датащита "Write Cycle Time" равный 5 миллисекунд?
Это время записи страницы из буфера AT24C256C в физическую Flash (стартует после команды Stop). В течении этого времени (это максимальное время), AT24C256C не будет выдавать ACK на свой адрес.
Что касается основного вопроса - посмотрите в файле. Я отметил два "скользких момента" (первое, на что обратил внимание):
1. Обозначил как Err. Здесь "игра на фронтах" может быть воспринята как команда Stop.
2. Обозначил как t=?. Не понял реальное время, но как мне показалось, времена команды Start не соблюдены.
В общем, более тщательно проверьте/исправьте все времена и всё заработает.
/картинка кликабельна/
P.S.
По 'Err': Рекомендуется выдерживать время не менее 300nS после спада по SCL.
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 12:09:09
DENIS451
Спасибо, но я сейчас ухожу, проверить смогу только после 16:00.
Может нарисуете от руки в паинте, как по вашему мнению, должен правильно выглядеть этот участок датаграммы?
Сделал более подробный скрин с этим подозрительным участком: ЛА3.png
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 13:32:17
Albert_V
На этом "переходе", время "единички" у SCL должно быть не менее 2-ух времён "единички" при обмене данными.
Если делаете "нечто", у чего должна быть высокая повторяемость - лучше выжидайте время не менее 1/Fclk_max/2 (для 400kHz это 1.25µS). Не думаю что это время сильно "затормозит" работу вашего изделия...
Вот пример с моего ЛА (SLA5032):
/у меня частота по SCL чуть выше 260kHz/

Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 16:30:29
DENIS451
Сделал тайминги побольше(см. ЛА4.png), ничего не изменилось.
Навсякий случай функция чтения блока (выполняется с задержкой не менее 5мс. после записи,
(закомментированные задержки не помогли)):
Спойлер
Код: Выделить всё
void m_I2C_ReadBlok(char* bf) //чтение тестового блока
{
////////////////////////////////////////////////////////////////////////////////////////
m_I2C_StartCondition ();
m_I2C_SendByte(0b10100000); //адрес микросхемы + бит режима записи
m_I2C_SendByte(0b00000000); //старший байт адреса EEPROM
m_I2C_SendByte(0b00000000); //младший байт адреса EEPROM
_delay_us(2);
m_I2C_StartCondition ();
m_I2C_SendByte(0b10100001); //адрес микросхемы + бит режима чтения
for(unsigned char i=0; i<11; i++)
{
//_delay_ms(5);
bf[i] = m_I2C_RecvByte(1);//чтение байта EEPROM с ACK от мастера
}
//_delay_ms(5);
bf[11] = m_I2C_RecvByte(0);//чтение последнего байта EEPROM с NACK от мастера
m_I2C_StopCondition();
///////////////////////////////////////////////////////////////////////////////////////
}
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 16:59:02
Albert_V
У AT24C256C "керамика" по питанию поставлена?
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 17:39:15
DENIS451
Да.
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 18:09:44
Albert_V
Разделите проверку на две части.
Запишите AT24C256C на внешнем программаторе и прочтите данные или запишите своей программой и прочтите программатором.
На данный момент, вы не можете быть уверенным что данные реально записываются в EEPROM.
Дело в том что декодеры протокола ПО логических анализаторов не "ругнутся" если где-то есть "игра на фронтах" или некое время по I2C не соответствует стандарту.
Добавлено after 10 minutes 32 seconds:
Re: EEPROM AT24C256C не читается несколько байт подряд, почему?
P.S.
Извиняюсь, предположение из серии "дурдома": После чтения первого байта вы точно сами не "роняете" линию SDA в "ноль"?
Смущает то, что у стёртой/новой AT24C256C по всем адресам должны быть 0FFh...
Re: EEPROM AT24C256C не читается несколько байт подряд, поче
Добавлено: Сб янв 19, 2019 18:25:43
DENIS451
Извиняюсь, предположение из серии "дурдома": После чтения первого байта вы точно сами не "роняете" линию SDA в "ноль"?
Да, это так, спасибо!
Совсем забыл что надо отпустить линию после формирования ACK со стороны мастера, всё заработало!