|
Запись во внутренюю Flash lpc1768 |
|
|
|
Jan 13 2011, 12:08
|

Частый гость
 
Группа: Участник
Сообщений: 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, операционка тоже кейловская ЧТО Я ДЕЛАЮ НЕ ПРАВИЛЬНО???????
|
|
|
|
|
Jan 14 2011, 12:52
|

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

|
Цитата Все функции работы с флешкой от Keil, операционка тоже кейловская Ошибка в этом. Требуется таки если уж использовать, то понимать что происходит (запись во флэш имеет некоторое количество ограничений, которые следует проверять, что они выполняются). А ваш вопрос звучит в переводе на русский язык так: у меня чего-то не работает. А чего - не знаю. Ибо приведенный текст программы ни о чем не говорит. Ибо сие не есть текст. Аналогичный вопрос по степени неправильности: выполняю printf команду, а она не выполняется... -- Вот если вообще не разбираться 1) Руками запретите все прерывания (после tsk_lock к примеру) И посмотрите что поменяется. К примеру.
--------------------
On the road again (Canned Heat)
|
|
|
|
|
Jan 14 2011, 14:04
|

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

|
Цитата(DpInRock @ Jan 14 2011, 18:52)  Ошибка в этом. Требуется таки если уж использовать, то понимать что происходит (запись во флэш имеет некоторое количество ограничений, которые следует проверять, что они выполняются). А ваш вопрос звучит в переводе на русский язык так: у меня чего-то не работает. А чего - не знаю. Ибо приведенный текст программы ни о чем не говорит. Ибо сие не есть текст.
Аналогичный вопрос по степени неправильности: выполняю printf команду, а она не выполняется...
-- Вот если вообще не разбираться 1) Руками запретите все прерывания (после tsk_lock к примеру) И посмотрите что поменяется. К примеру. tsk_lock и запрещает все прерывания (если верить документации от Кейл). Тем не менее попробовал - тоже самое. Смотрел исходники от кейл и сравнивал с документацией от NXP - все ОК. Может это сам кристал?
|
|
|
|
|
Jan 17 2011, 06:19
|

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

|
Цитата(DpInRock @ Jan 14 2011, 17:08)  Случаем не через UART работаете?
Кстати, там где-то должна быть команда (иап) сравнения флэша и буфера. Интересно бы глянуть что скажет она. Да, дамп памяти получаю через UART Сравнение ругается. Что делать не знаю. С прерываниями пробовал и без. С PLL и без. Смотрел как сделано у Keil и как надо по даташиту - все правильно. Баба Яга в отчаянии. =( Если никто советом помочь не может - дайте, плиз, примерчик.
Сообщение отредактировал ruslannd - Jan 17 2011, 06:47
|
|
|
|
|
Jan 18 2011, 18:37
|
Частый гость
 
Группа: Свой
Сообщений: 78
Регистрация: 10-01-07
Пользователь №: 24 270

|
Цитата Всем спасибо. Я разобрался в проблеме. Оказывается нельзя два раза писать без стирания. Не разобрались Цитата Про запись "поверх" в даташите не сказано ни слова (я не нашел, хотя искал специально). Жирный минус NXP. У Атмела таких косяков нет! Если не сказано - значит и делать так, вероятно, нельзя. Цитата Это не связано со времянкой. Это связано с программой IAP. NXP прямой доступ к флешу не открывает. Жаль. Вам, уверен, он и не помог-бы... Тема неоднократно обсуждалась, ищите не форуме. Если лень лазить по форуму - ищите в UM в разделе "Flash programming" слово "ECC"
|
|
|
|
|
Jan 19 2011, 10:32
|

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

|
Цитата(andrewlekar @ Jan 19 2011, 08:39)  Про минус NXP сильно задвинул!
И DF в FF без стирания превратиться в принципе не способен. А Вы проверьте. Цитата(bus16 @ Jan 18 2011, 21:37)  Не разобрались  А в чем еще может быть причина? Если стирать перед каждой записью, то все ОК. Цитата Если не сказано - значит и делать так, вероятно, нельзя. Весь мир живет наоборот - если нет нельзя, значит можно. Цитата(bus16 @ Jan 18 2011, 21:37)  Вам, уверен, он и не помог-бы... Тема неоднократно обсуждалась, ищите не форуме. Если лень лазить по форуму - ищите в UM в разделе "Flash programming" слово "ECC" Поискал - ничего не нашел, не для LPC23xx, не для LPC17xx. EEC - это, если я правильно понял, корекция ошибок? А причем здесь она? Я так понял что нельзя писать во флеш поверх старой записи, так как есть некая система коррекции данных, поверх данных которой уже не запишешь? Где почитать про это в применении к контроллерам LPC
|
|
|
|
|
Jan 19 2011, 11:15
|

Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jan 19 2011, 11:40
|

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 байт с некорректным кодом будет непредсказуемым.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|