-
- Друзья, спасибо за помощь! Я поправил свои процедурки записи памяти и все заработало :) Век живи - век учись. - vesago(12.02.2024 22:37)
- Дык выравнивать данные нужно кратно длине буфера (128 байт). Первый
блок 254 байта: 128 байт - запись - 126 байт - запись; второй блок
254 байта: 2(!) байта - запись - 128 байт - запись - 124 байт -
запись и т.д. - reZident(11.02.2024 15:27)
- Спасибо!!! Вот те раз. Я то думал, что с любого адреса влупил 128
байт и не жужжишь. Сейчас испробую этот вариант. - vesago(11.02.2024 15:41)
- Если вас это утешит, то могу сообщить, что за ~25 лет работы с
разными EEPROM я наблюдаю, что не вы первый (и не последний) на эти
грабли наступаете :-) - reZident(11.02.2024 16:54)
- Большое спасибо!!! Переделываю работу с этой памятью. Я не сильно
силен в английском - не узрел подвоха в даташите. Правильно ли я
думаю, что лучше завести буфер в оперативной памяти и если,
допустим, нужно 1 байт записать странично, то сначала скопировать
страницу в буфер, изменить байт и затем записать всю страницу
обратно? - vesago(12.02.2024 08:26)
- Нет, буфер не обязательно. За раз можно писать любое количество байт в пределах размера и границ страницы (1-128 в вашем случае). Это же EEPROM, а не обычная Flash. - reZident(12.02.2024 10:45)
- с одним байтом совсем необязательно. :-) - Лaгyнoв(12.02.2024 08:28)
- Ну я гипотетически :) Лучше 2 байта. Для понимания сути. Мне
показалось, что если пишем количество байт, меньше чем страница,
остаток превращается в FF. Т.е. затирается. Или вру? Не могу сейчас
натурально проверить. - vesago(12.02.2024 08:32)
- Нет, если нет превышения границы буфера, то ничего не затирается. Т.е. писать можно столько байт, сколько остается от текущего адреса, до адреса, который кратен размеру буфера. Потому, что при последовательной записи в буфер младшие биты автоматически инкрементируются, но только в пределах размера буфера. reZident(521 знак., 12.02.2024 11:07)
- по ДШ там адрес внутри страницы крутится по младшим битам. Т.е. если 16 байт, то адрес хххх0000....хххх1111. Как только больше xxxx1111, то младшие 4 бита сбрасываются в нуль. То же самое и для страницы в 32, 64, 256 байт. Младшие биты сбрасываются в нуль. Поэтому я всегда изначально все массивы внутри ЕЕПРОМ привязывал к размеру страницы. Что 8 байт, что 16, что 64. Чтоб не влететь. :-) А так внутри страницы записывал и 1, и 2 и 6 байт. Главное, чтоб младшие биты Лaгyнoв(22 знак., 12.02.2024 09:38)
- Ну я гипотетически :) Лучше 2 байта. Для понимания сути. Мне
показалось, что если пишем количество байт, меньше чем страница,
остаток превращается в FF. Т.е. затирается. Или вру? Не могу сейчас
натурально проверить. - vesago(12.02.2024 08:32)
- :-) - Лaгyнoв(11.02.2024 17:47)
- Большое спасибо!!! Переделываю работу с этой памятью. Я не сильно
силен в английском - не узрел подвоха в даташите. Правильно ли я
думаю, что лучше завести буфер в оперативной памяти и если,
допустим, нужно 1 байт записать странично, то сначала скопировать
страницу в буфер, изменить байт и затем записать всю страницу
обратно? - vesago(12.02.2024 08:26)
- Если вас это утешит, то могу сообщить, что за ~25 лет работы с
разными EEPROM я наблюдаю, что не вы первый (и не последний) на эти
грабли наступаете :-) - reZident(11.02.2024 16:54)
- Спасибо!!! Вот те раз. Я то думал, что с любого адреса влупил 128
байт и не жужжишь. Сейчас испробую этот вариант. - vesago(11.02.2024 15:41)