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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Запись во внутренюю Flash lpc1768
ruslannd
сообщение Jan 13 2011, 12:08
Сообщение #1


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

Группа: Участник
Сообщений: 106
Регистрация: 4-04-06
Пользователь №: 15 783



Всем привет

Пишу во внутренюю флеш lpc1768 следующую последовательность:
0 0 0 0 FE FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

Там оказывается:
Dump memory from 0x48000 to 0x4801F (HEX):
48000: 0 0 0 0 FE FD FF FF FF FF FF FF FF FF FF FF 48010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

Если писать
0 0 0 0 FС FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

то там все хорошо (как и с многими другими комбинациями):
Dump memory from 0x48000 to 0x4801F (HEX):
48000: 0 0 0 0 FС FF FF FF FF FF FF FF FF FF FF FF 48010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

Процедура записи:
#define ADR_COUNTS 0x00048000
U8 buffer[1024] = {..........};
tsk_lock();
InitIAP(ADR_COUNTS,100000,1);
EraseSector(ADR_COUNTS);
InitIAP(ADR_COUNTS,100000,1);
InitIAP(ADR_COUNTS,100000,2);
tmp = ProgramPage(ADR_COUNTS,1024,(U8*)&buffer);
tsk_unlock();

Все функции работы с флешкой от Keil, операционка тоже кейловская
ЧТО Я ДЕЛАЮ НЕ ПРАВИЛЬНО???????
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Jan 14 2011, 11:32
Сообщение #2


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

Группа: Участник
Сообщений: 106
Регистрация: 4-04-06
Пользователь №: 15 783



Никто не может помочь?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jan 14 2011, 12:52
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Цитата
Все функции работы с флешкой от Keil, операционка тоже кейловская

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

Аналогичный вопрос по степени неправильности: выполняю printf команду, а она не выполняется...

--
Вот если вообще не разбираться
1) Руками запретите все прерывания (после tsk_lock к примеру)
И посмотрите что поменяется. К примеру.



--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Jan 14 2011, 14:04
Сообщение #4


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

Группа: Участник
Сообщений: 106
Регистрация: 4-04-06
Пользователь №: 15 783



Цитата(DpInRock @ Jan 14 2011, 18:52) *
Ошибка в этом.
Требуется таки если уж использовать, то понимать что происходит (запись во флэш имеет некоторое количество ограничений, которые следует проверять, что они выполняются).
А ваш вопрос звучит в переводе на русский язык так: у меня чего-то не работает. А чего - не знаю.
Ибо приведенный текст программы ни о чем не говорит. Ибо сие не есть текст.

Аналогичный вопрос по степени неправильности: выполняю printf команду, а она не выполняется...

--
Вот если вообще не разбираться
1) Руками запретите все прерывания (после tsk_lock к примеру)
И посмотрите что поменяется. К примеру.


tsk_lock и запрещает все прерывания (если верить документации от Кейл). Тем не менее попробовал - тоже самое.
Смотрел исходники от кейл и сравнивал с документацией от NXP - все ОК. Может это сам кристал?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jan 14 2011, 14:08
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Случаем не через UART работаете?

Кстати, там где-то должна быть команда (иап) сравнения флэша и буфера.
Интересно бы глянуть что скажет она.

Сообщение отредактировал DpInRock - Jan 14 2011, 14:10


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Jan 17 2011, 06:19
Сообщение #6


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

Группа: Участник
Сообщений: 106
Регистрация: 4-04-06
Пользователь №: 15 783



Цитата(DpInRock @ Jan 14 2011, 17:08) *
Случаем не через UART работаете?

Кстати, там где-то должна быть команда (иап) сравнения флэша и буфера.
Интересно бы глянуть что скажет она.


Да, дамп памяти получаю через UART

Сравнение ругается. Что делать не знаю. С прерываниями пробовал и без. С PLL и без. Смотрел как сделано у Keil и как надо по даташиту - все правильно. Баба Яга в отчаянии. =(

Если никто советом помочь не может - дайте, плиз, примерчик.

Сообщение отредактировал ruslannd - Jan 17 2011, 06:47
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Jan 17 2011, 15:20
Сообщение #7


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(ruslannd @ Jan 17 2011, 01:19) *
..

Скорее всего временные требования по записи во Флеш не выполняете. Проверку что стирание прошло хорошо добавьте, и данные которые в буфер пишите поменяйте на что-то более содержательное, например 0хАА. Проверять запись 0xFF безсмысленно -- ФФ записано в пасяти сразу после стирания.

Сообщение отредактировал ar__systems - Jan 17 2011, 15:23
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Jan 18 2011, 18:15
Сообщение #8


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

Группа: Участник
Сообщений: 106
Регистрация: 4-04-06
Пользователь №: 15 783



Всем спасибо. Я разобрался в проблеме. Оказывается нельзя два раза писать без стирания.

Я вначале после стирания писал:
00 00 00 00 FF FF

Потом без стрирания прямо поверх старой записи:
00 00 00 00 FE FF

и получал:
00 00 00 00 FE DF (последний байт портился)

Самое интересное, что если еще раз поверх записать:
00 00 00 00 FC FF

то в памяти останется:
00 00 00 00 FC FF (!!!!!DF превратилось в FF!!!!!!!)

и получались глюки. Проверено на кристалах разного выпуска типов LPC2388 (тут ситуация похожая) и LPC 1768 (про него я и писал выше). Про запись "поверх" в даташите не сказано ни слова (я не нашел, хотя искал специально). Жирный минус NXP.
У Атмела таких косяков нет!

Это не связано со времянкой. Это связано с программой IAP. NXP прямой доступ к флешу не открывает. Жаль.

ЗЫ: Если у кого есть какие мысли по этому поводу - буду рад услышать.

Сообщение отредактировал ruslannd - Jan 18 2011, 18:17
Go to the top of the page
 
+Quote Post
bus16
сообщение Jan 18 2011, 18:37
Сообщение #9


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

Группа: Свой
Сообщений: 78
Регистрация: 10-01-07
Пользователь №: 24 270



Цитата
Всем спасибо. Я разобрался в проблеме. Оказывается нельзя два раза писать без стирания.

Не разобрались sad.gif

Цитата
Про запись "поверх" в даташите не сказано ни слова (я не нашел, хотя искал специально). Жирный минус NXP.
У Атмела таких косяков нет!

Если не сказано - значит и делать так, вероятно, нельзя.

Цитата
Это не связано со времянкой. Это связано с программой IAP. NXP прямой доступ к флешу не открывает. Жаль.

Вам, уверен, он и не помог-бы... Тема неоднократно обсуждалась, ищите не форуме. Если лень лазить по форуму - ищите в UM в разделе "Flash programming" слово "ECC"
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Jan 19 2011, 05:39
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Про минус NXP сильно задвинул!

И DF в FF без стирания превратиться в принципе не способен.

Сообщение отредактировал andrewlekar - Jan 19 2011, 05:41
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Jan 19 2011, 10:32
Сообщение #11


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

Группа: Участник
Сообщений: 106
Регистрация: 4-04-06
Пользователь №: 15 783



Цитата(andrewlekar @ Jan 19 2011, 08:39) *
Про минус NXP сильно задвинул!

И DF в FF без стирания превратиться в принципе не способен.


А Вы проверьте.

Цитата(bus16 @ Jan 18 2011, 21:37) *
Не разобрались sad.gif


А в чем еще может быть причина? Если стирать перед каждой записью, то все ОК.

Цитата
Если не сказано - значит и делать так, вероятно, нельзя.


Весь мир живет наоборот - если нет нельзя, значит можно.


Цитата(bus16 @ Jan 18 2011, 21:37) *
Вам, уверен, он и не помог-бы... Тема неоднократно обсуждалась, ищите не форуме. Если лень лазить по форуму - ищите в UM в разделе "Flash programming" слово "ECC"


Поискал - ничего не нашел, не для LPC23xx, не для LPC17xx.

EEC - это, если я правильно понял, корекция ошибок? А причем здесь она?

Я так понял что нельзя писать во флеш поверх старой записи, так как есть некая система коррекции данных, поверх данных которой уже не запишешь? Где почитать про это в применении к контроллерам LPC
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jan 19 2011, 10:36
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(ruslannd @ Jan 19 2011, 13:32) *
Я так понял что нельзя писать во флеш поверх старой записи, так как

... так как флеш. ЛЮБАЯ флеш так устроена.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Jan 19 2011, 11:15
Сообщение #13


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

Группа: Участник
Сообщений: 106
Регистрация: 4-04-06
Пользователь №: 15 783



Цитата(esaulenka @ Jan 19 2011, 13:36) *
... так как флеш. ЛЮБАЯ флеш так устроена.


Не любая. Я говорю про конкретную ситуацию, когда пишем поверх 0хFF. Кстати, только что обнаружил, у lpc1768 если флешку побить на блоки по 16 байт, то можно писать в блоки повторно информацию без стирания, если внутри блока бсе байты OxFF, даже, если в соседних есть информация отличная от 0xFF. ПсевдоEEPROM, однако.

Сообщение отредактировал ruslannd - Jan 19 2011, 11:22
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jan 19 2011, 11:38
Сообщение #14


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Рекомендую поискать ошибки в программе.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
VslavX
сообщение Jan 19 2011, 11:40
Сообщение #15


embarrassed systems engineer
*****

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



Цитата(ruslannd @ Jan 19 2011, 13:15) *
Не любая. Я говорю про конкретную ситуацию, когда пишем поверх 0хFF. Кстати, только что обнаружил, у lpc1768 если флешку побить на блоки по 16 байт, то можно писать в блоки повторно информацию без стирания, если внутри блока бсе байты OxFF, даже, если в соседних есть информация отличная от 0xFF. ПсевдоEEPROM, однако.

Про разбиение на блоки по 16 байт было то ли в каком-то раннем даташите или аппноте. Там же было сказано что каждый 16 байтный (128 битовый блок) защищается корректирующим кодом (ECC) и повышает выход годных изделий (с битыми отдельными битами флеша) и надежность хранения программы. Итого - пишете 16 байт, при этом вычисляется некоторый корректирующий код и пишется где-то в скрытую область памяти. И дописать в эти 16 байт произвольно поверх FF нельзя - корректирующий код будет другой и скорее всего он нормально не запишется, а результат считывания таких 16 байт с некорректным кодом будет непредсказуемым.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 21:29
Рейтинг@Mail.ru


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