Флэш-память в микроконтроллере 8051F340 стирается - PullRequest
3 голосов
/ 20 ноября 2011

Ну, я надеюсь, что этот вопрос подходит для Stackoverflow (если в противном случае я уже хочу извиниться)

У меня может микроконтроллер C8051F340 от Silabs. Я написал небольшой интерфейс, который хранит информацию в энергонезависимой флэш-памяти от ОК. Теперь, как в описанном листе данных, я сохраняю все данные между адресами 0x0200 - 0x0300. Для копирования моих данных я просто использую memcpy.

char xdata *ptr_selection       = 0x0210;
// Some other code here
memcpy (ptr_selection, writeBuffer, sizeof (writeBuffer));

Ну, само копирование работает хорошо (я посмотрел на флэш-память, и она сохранила мои данные правильно) - Если я теперь отключу свой uC и подключу его снова через 5 секунд, данные все еще там. Но если я оставлю его отключенным, мои данные будут более или менее «сброшены» - это означает, что они каждый раз получают почти одинаковые «значения сброса». так что я делаю не так? Я имею в виду, что данные флэш-памяти не энергонезависимы или я что-то не так понял?

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

Исходя из кода, отображаемого в вашем вопросе, вы пытаетесь записать данные во внешние данные (xdata), которые представляют собой ОЗУ, а не энергонезависимую флэш-память.Причина, по которой данные исчезают через несколько секунд, заключается в том, что конденсатор блока питания продолжает питать чип достаточно долго, чтобы поддерживать внутреннюю память ОЗУ.

Для записи во флэш-память необходимо соблюдать определенный протокол, чтобы разблокироватьпрограммирование флэш-памяти, затем сотрите область, в которую вы будете записывать, и затем запишите байты, используя инструкции MOVX, как описано в Разделе 12 таблицы.

Это примечание к приложению Silicon Labs "Запись во Flash изПрошивка " подробно описывает процесс.

1 голос
/ 20 ноября 2011

Флэш-память не похожа на обычную SRAM, память SDRAM.

Вы не можете просто писать в нее.Максимум, что вы можете - читать из него как из обычной памяти (только если у вас есть NOR flash).

Но если вы хотите записать в него, вы должны прежде всего стереть его (установите все биты в1).Только тогда вы можете написать в него.Как правило, стирание осуществляется по секторам.Они назвали стирание секторов.См. Таблицу данных вашего микроконтроллера об их размере.

PS

В соответствии с таблицей данных вашего ЦП, для записи необходимо использовать специальные инструкции.Убедитесь, что memcpy использует его для внутреннего использования.

...