Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC2103 - сохранение данных во флэш (IAP)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
SanvaldYV
Уже несколько дней пытаюсь разобраться с сохранением данных во флэш памяти (ибо EEPROMа то уже нет sad.gif ). Написал в соответствии с документацией необходимые функции для работы с флэш (In Application Programming). Запись происходит успешно, но есть 2 больших"НО":

1. Запись осуществляется в момент запуска приложения, даже не доходя до места вызова соответствующих функций (смотрел в отладчике - указатель еще стоит на main, а во флэш уже данные которые я планировал записать через несколько десятков команд).
2. Если есть переменная типа "const", лежащая по некому адресу внутри сектора флэш куда ведется запись, то это место не перезаписывается.

Если кто нибудь использовал флэш в этом или других МК для энергонезависимого хранения данных (ну как епром раньше), буду очень признателен если поможете разобраться с этим.
Заранее спасибо.
Сергей Борщ
Цитата(Юрий Санвальд @ May 7 2007, 15:48) *
1. Запись осуществляется в момент запуска приложения, даже не доходя до места вызова соответствующих функций
"Само" ничего не происходит. Скорее всего эти данные у вас объявлены как инициализированные константы и они записываются на свои места как и положено одновременно с программой.
Цитата(Юрий Санвальд @ May 7 2007, 15:48) *
2. Если есть переменная типа "const", лежащая по некому адресу внутри сектора флэш куда ведется запись, то это место не перезаписывается.
Естественно. Стирается ведь весь сектор целиком. Вот тут есть статья на эту тему. Я писал кусок кода для 2214 (но они должны быть очень похожи) на основе чьего-то ответа на аналогичный вопрос. Выделил отдельный сектор под изменяемые данные, это позволяет на время перезаписи использовать буфер ОЗУ минимального (а не на весь сектор) размера и не заботится, что затрется что-то лишнее.
Использую две структуры - Config_flash и Config_ram. Перед началом работы вызываю ReadConfig(), который копирует из Config_flash в Config_ram. Далее все действия с Config_ram и когда необходимо сохранить изменения - UpdateConfig(). Конечно, этот код все еще несколько кривоват, но для начала вполне сойдет.
zltigo
Цитата(Юрий Санвальд @ May 7 2007, 15:48) *
Уже несколько дней пытаюсь разобраться с сохранением данных во флэш памяти (ибо EEPROMа то уже
1. ....
2. ....

Совершенно невероятные вещи рассказываете sad.gif
Нюансы использования IAP, конечно есть. Обсуждались на этом форуме достаточно подробно.
Поиском воспользуйтесь:
http://electronix.ru/forum/index.php?act=S...mp;highlite=iap
iit
Немного не в тему.
Сколько времени занимает перезапись минимально возможной области (256 байт). Не нашел в пдф, может кто замерял?
zltigo
Цитата(iit @ May 8 2007, 08:16) *
Сколько времени занимает перезапись минимально возможной области (256 байт). Не нашел в пдф, может кто замерял?

Не нормируют sad.gif, правда для LPC28xx - поминается стирание 400ms. А конкретные замеры ничего не дадут. Время плавать может изрядно и закладываться на измеренные значения нельзя. А если еще добавить к этому, что NXP официально обеспечивает работу только через IAP, что позволяет ему легко и просто при желании FLASH память принципиально менять....
По результатам давних экспериментов - стирание всей FLASH или одного сектора для LPC2124 укладывалось в 100ms. Запись 512байт (512 это минимальное значение для 21(1/2)x) в 250us.
SanvaldYV
Сергей Борщ, огромное спасибо!
iit
Цитата(zltigo @ May 8 2007, 09:10) *
Не нормируют sad.gif, правда для LPC28xx - поминается стирание 400ms. А конкретные замеры ничего не дадут. Время плавать может изрядно и закладываться на измеренные значения нельзя. А если еще добавить к этому, что NXP официально обеспечивает работу только через IAP, что позволяет ему легко и просто при желании FLASH память принципиально менять....


Н-да, несколько печально. Особенно в свете того, что в момент обращения к IAP необходимо запретить прерывания.
zltigo
Цитата(iit @ May 8 2007, 13:10) *
Н-да, несколько печально. Особенно в свете того, что в момент обращения к IAP необходимо запретить прерывания.

Ну насчет прерываний, если посмотрите по ранее приведенной ссылке, то там есть радостный отчет о работе в определенных условиях с разрешенными прерываниями. Ну а вообще - I2C EEPROM стоит копейки, имеет больший ресурс и обслуживается без напряга контроллера - поставить и забыть.
VslavX
Цитата(zltigo @ May 8 2007, 14:04) *
Ну насчет прерываний, если посмотрите по ранее приведенной ссылке, то там есть радостный отчет о работе в определенных условиях с разрешенными прерываниями. Ну а вообще - I2C EEPROM стоит копейки, имеет больший ресурс и обслуживается без напряга контроллера - поставить и забыть.

Судя по дизассемблированным листингам IAP запись производится блочками по 16 байт и время там должно быть существенно меньше чем для 256/512 страницы. Никто не пробовал без IAP обходиться -программировать "напрямую"?
zltigo
Цитата(VslavX @ May 8 2007, 14:22) *
и время там должно быть существенно меньше чем для 256/512 страницы. Никто не пробовал без IAP обходиться -программировать "напрямую"?

Все это сущие мелочи по сравнению со временем стирания, кроме того есть проблемы с дозаписью, даже в случае работы через IAP.
http://electronix.ru/forum/index.php?showt...5593&hl=iap
VslavX
Цитата(zltigo @ May 8 2007, 14:37) *
Все это сущие мелочи по сравнению со временем стирания, кроме того есть проблемы с дозаписью, даже в случае работы через IAP.
http://electronix.ru/forum/index.php?showt...5593&hl=iap

Время стирания не волнует - будет производиться несколько раз в жизни устройства и, вероятно, даже в условиях сервисного центра (журналирующий девайс типа "черного ящика"). А проблемы с дозаписью в упомянутом топике вроде решены. Буду пробовать - поскольку желателен реал-тайм.
SanvaldYV
Хм, возможно я уже надоел, но всплыла еще одна неприятность - первая команда по записи сектора через ИАП выполняется успешно (что нужно было записать, то во флэше и лежит), но если потом снова записать в этот сектор, то некоторые биты просто обнуляются sad.gif

П.С. в поиске нашел темы, где обсуждалось подобное( http://electronix.ru/forum/index.php?showt...5593&hl=IAP ) - но решения вопроса там не предлагалось, может кто то сталкивался и решал эту проблему?
zltigo
Цитата(Юрий Санвальд @ May 10 2007, 10:57) *
Хм, возможно я уже надоел, но всплыла еще одна неприятность

Ну ссылка на "неприятность" давалась и наступать на грабли вовсе было не обязательно.
Цитата
но решения вопроса там не предлагалось, может кто то сталкивался и решал эту проблему?

Черным по белому там изложены ограниченияя при которых дозапись работоспособна. Проверял. Либо пользуйте, как можно, либо не используйте вообще.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.