Понадобилась мне еепромина на пару мегабайт для даталоггера. Ну и выбор пал на атмеловскую AT45DB161D. До настоящего момента флешки использовал только для хранения неизменяемых данных большого размера. А тут надо как-то еепром эмулировать чтобы бросать в память записи по 26 байт через несколько минут.
У меня созрело 2 алгоритма:
Первый алгоритм:
page_adr - байтовый адрес записываемой страницы
rec_cnt - номер записи внутри страницы(0...19), записи по 26 байт.
1. если rec_cnt==0 (самая первая запись на странице) - стереть страницу
2. заполнить SRAM буфер 1 значениями 0xFF;
3. записать в буфер1 по адресу (rec_cnt*26) новую запись;
4. передать данные из буфера 1 в flash-память(без встроенного стирания)
5. если (++rec_cnt == 20) - это последняя запись на странице, то rec_cnt=0;
page_adr = page_adr + 528; - перейти на следующую страницу.
Моя идея заключается в том что после стирания страницы флеш, она содержит во всех байтах 0хFF. Записываются в биты только нули, поэтому я предварительно заполняю SRAM буфер значениями 0хFF, что по идее не влияет на остальные данные во флешке. Но так ли это на самом деле?
Второй алгоритм.
1. Считать страницу flash в буфер1;
2. записать в буфер1 по адресу (rec_cnt*26) изменяемые данные.
3. стереть страницу флеш;
4. записать страницу из буфера1 в флеш.
Алгоритм вроде хорош, но мне не очень нравится что каждую страницу надо будет стирать по 20 раз.
Еще вот непонятно зачем нужна операция Auto page rewrite(0x5
.
Подскажите пожалуйста как это все лучше сделать.