Добавить в корзинуПозвонить
Найти в Дзене
За_тех_кто_в_коде();

EEPROM ver 2.0 Постраничная запись/чтение массивов.

При подключении микросхемы внешнего EEPROM (интерфейс I2C), значительно более оптимальным является постраничное чтение. По 32 или 64 байта (слова). В этом случае мы указываем адрес, функция проверяет сколько есть байт до конца страницы (eeprom_adr % 64) и далее читаем до конца страницы. Затем повторный старт. В случае побайтной записи, сперва отправляем адрес устройства (микросхемы EEPROM), затем адрес ячейки памяти, затем условие повторного старта, так как до этого мы писали, а теперь уже можно и нужно читать. Разница по объему передаваемых данных очевидна. Поэтому пришлось сменить концепцию, и многое переписать под работу с массивами. В классе EEPROM со стороны пользователя ничего не поменялось, ни имена методов, ни их количество, имена аргументов всё те же, только внутри методов и функций работают циклы по обработке массивов. При чтении одного байта создается массив размерностью 1. Существует разница, EEPROM на 32Кб работает с 64 байтами на странице, те что поменьше с 32. Так как

При подключении микросхемы внешнего EEPROM (интерфейс I2C), значительно более оптимальным является постраничное чтение. По 32 или 64 байта (слова).

В этом случае мы указываем адрес, функция проверяет сколько есть байт до конца страницы (eeprom_adr % 64) и далее читаем до конца страницы. Затем повторный старт.

В случае побайтной записи, сперва отправляем адрес устройства (микросхемы EEPROM), затем адрес ячейки памяти, затем условие повторного старта, так как до этого мы писали, а теперь уже можно и нужно читать.

Разница по объему передаваемых данных очевидна. Поэтому пришлось сменить концепцию, и многое переписать под работу с массивами. В классе EEPROM со стороны пользователя ничего не поменялось, ни имена методов, ни их количество, имена аргументов всё те же, только внутри методов и функций работают циклы по обработке массивов. При чтении одного байта создается массив размерностью 1.

Существует разница, EEPROM на 32Кб работает с 64 байтами на странице, те что поменьше с 32. Так как у меня нет тех что поменьше, да и на 32Кб у меня всё так же одна, понятно что я их работу не тестил. Но в заголовочнике есть #define для работы с 32 байтами на странице. По умолчанию стоит 64. Возможно микрух менее 32Кб и нет уже в продаже, поэтому пока выбор количества слов на странице в условной компиляции, в заголовочнике System Tools.

Очень глубоких тестов пока не делал. Стык между внутренним и внешним EEPROM, при работе с массивом работает. А вот стык между остальными микрухами, в случае массива, я практически уверен что не заработает. . Могут либо потеряться, либо сдвинуться 1-2 байта на стыке адресов. Это уже допилю чуть позже, когда будет возможность протестить в железе, проще по факту подкрутить А пока и 32Кб не плохой размер.

Из особенностей записи данных, выяснилось что после окончании записи страницы, необходимо немного обождать, вот где бы об этом еще в datasheet'е прочесть... Возможно данные сперва в буфер кидаются.

Для побайтной записи этого не требуется. Реализовано тупо через delay на 3ms. По замерам получалось что требуется 1-2ms. Возможно переделаю на запрос-ожидание... но навряд ли.

Описание доступно на странице и в примере, в архиве ниже.

EEPROM

EEPROM_Lib.zip — Яндекс Диск