реклама на сайте
подробности

 
 
> LPC2103 - сохранение данных во флэш (IAP), Запись во флэш в процессе работы
SanvaldYV
сообщение May 7 2007, 12:48
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



Уже несколько дней пытаюсь разобраться с сохранением данных во флэш памяти (ибо EEPROMа то уже нет sad.gif ). Написал в соответствии с документацией необходимые функции для работы с флэш (In Application Programming). Запись происходит успешно, но есть 2 больших"НО":

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

Если кто нибудь использовал флэш в этом или других МК для энергонезависимого хранения данных (ну как епром раньше), буду очень признателен если поможете разобраться с этим.
Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 12)
Сергей Борщ
сообщение May 7 2007, 14:20
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Юрий Санвальд @ 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(). Конечно, этот код все еще несколько кривоват, но для начала вполне сойдет.
Прикрепленные файлы
Прикрепленный файл  config.zip ( 2.4 килобайт ) Кол-во скачиваний: 98
 


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 7 2007, 15:17
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Юрий Санвальд @ May 7 2007, 15:48) *
Уже несколько дней пытаюсь разобраться с сохранением данных во флэш памяти (ибо EEPROMа то уже
1. ....
2. ....

Совершенно невероятные вещи рассказываете sad.gif
Нюансы использования IAP, конечно есть. Обсуждались на этом форуме достаточно подробно.
Поиском воспользуйтесь:
http://electronix.ru/forum/index.php?act=S...mp;highlite=iap


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
iit
сообщение May 8 2007, 05:16
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 8-11-04
Из: Томск
Пользователь №: 1 070



Немного не в тему.
Сколько времени занимает перезапись минимально возможной области (256 байт). Не нашел в пдф, может кто замерял?
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 8 2007, 06:10
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(iit @ May 8 2007, 08:16) *
Сколько времени занимает перезапись минимально возможной области (256 байт). Не нашел в пдф, может кто замерял?

Не нормируют sad.gif, правда для LPC28xx - поминается стирание 400ms. А конкретные замеры ничего не дадут. Время плавать может изрядно и закладываться на измеренные значения нельзя. А если еще добавить к этому, что NXP официально обеспечивает работу только через IAP, что позволяет ему легко и просто при желании FLASH память принципиально менять....
По результатам давних экспериментов - стирание всей FLASH или одного сектора для LPC2124 укладывалось в 100ms. Запись 512байт (512 это минимальное значение для 21(1/2)x) в 250us.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение May 8 2007, 06:21
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



Сергей Борщ, огромное спасибо!
Go to the top of the page
 
+Quote Post
iit
сообщение May 8 2007, 10:10
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 8-11-04
Из: Томск
Пользователь №: 1 070



Цитата(zltigo @ May 8 2007, 09:10) *
Не нормируют sad.gif, правда для LPC28xx - поминается стирание 400ms. А конкретные замеры ничего не дадут. Время плавать может изрядно и закладываться на измеренные значения нельзя. А если еще добавить к этому, что NXP официально обеспечивает работу только через IAP, что позволяет ему легко и просто при желании FLASH память принципиально менять....


Н-да, несколько печально. Особенно в свете того, что в момент обращения к IAP необходимо запретить прерывания.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 8 2007, 11:04
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

Ну насчет прерываний, если посмотрите по ранее приведенной ссылке, то там есть радостный отчет о работе в определенных условиях с разрешенными прерываниями. Ну а вообще - I2C EEPROM стоит копейки, имеет больший ресурс и обслуживается без напряга контроллера - поставить и забыть.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
VslavX
сообщение May 8 2007, 11:22
Сообщение #9


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



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

Судя по дизассемблированным листингам IAP запись производится блочками по 16 байт и время там должно быть существенно меньше чем для 256/512 страницы. Никто не пробовал без IAP обходиться -программировать "напрямую"?
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 8 2007, 11:37
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

Все это сущие мелочи по сравнению со временем стирания, кроме того есть проблемы с дозаписью, даже в случае работы через IAP.
http://electronix.ru/forum/index.php?showt...5593&hl=iap


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
VslavX
сообщение May 8 2007, 12:30
Сообщение #11


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



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

Время стирания не волнует - будет производиться несколько раз в жизни устройства и, вероятно, даже в условиях сервисного центра (журналирующий девайс типа "черного ящика"). А проблемы с дозаписью в упомянутом топике вроде решены. Буду пробовать - поскольку желателен реал-тайм.
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение May 10 2007, 07:57
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



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

П.С. в поиске нашел темы, где обсуждалось подобное( http://electronix.ru/forum/index.php?showt...5593&hl=IAP ) - но решения вопроса там не предлагалось, может кто то сталкивался и решал эту проблему?

Сообщение отредактировал Юрий Санвальд - May 10 2007, 07:59
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 10 2007, 08:34
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Юрий Санвальд @ May 10 2007, 10:57) *
Хм, возможно я уже надоел, но всплыла еще одна неприятность

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

Черным по белому там изложены ограниченияя при которых дозапись работоспособна. Проверял. Либо пользуйте, как можно, либо не используйте вообще.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 14:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01476 секунд с 7
ELECTRONIX ©2004-2016