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

 
 
> IAP в LPC, баянистый вопрос наверное...
Romario
сообщение Apr 28 2006, 11:29
Сообщение #1


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

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



нужно ли копировать код, который вызывает функцию IAP в раму? или не обязательно.
в даташите явно это не написано. мнения разделись. хочется наверняка знать и успокоится.
чтобы не было граблей.

я вот тут попробовал и....
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlexandrY
сообщение Apr 29 2006, 13:41
Сообщение #2


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Грабли будут по любому wink.gif

Цитата(Romario @ Apr 28 2006, 14:59) *
нужно ли копировать код, который вызывает функцию IAP в раму?


Если прямо на вопрос, то толку вызавать IAP из RAM если сам IAP передаст управление опять во FLASH?

А если взглянуть шире, то к любым слухам стоит прислушаться.
IAP в LPC вещь очень ненадежная и странная.
На мой взгляд у них серьезные проблемы с модулем Error Correction Code или контроллером FLASH.
Я например знаю последовательность данных запись которых во FLASH через IAP гарантировано приведет к искажению информации в соседних ячейках. Выражаться будет в том, что в соседней ячейке с записанным 0 и которую при записи совершенно не трогаем возникнет бит 1, который нельзя будет в последствии перезаписать в 0! (ну не считая полного стирания сектора)
Ни отключение MAM, ни отключение PLL, ничего от этого эффекта не помогает. Проверено на нескольких LPC2148, и в разных секторах.
Использование IAP полностью корректное, прерывания отключены, питание стабильное, эффект тоже очень стабильный - 100%-ый.
Процедура использования IAP сверена с тем как делается в примерах у IAR и у Keil, в файловой системе Keil-а и как рекомендует сам Philips. Тонкость в том, что в файловых системах применяется многократная дозапись страниц в сектора FLASH-и. Если писать страницы сразу и не трогать потом, эффект не заметил пока. Но, скажем, знаю разработчиков которые имели проблемы и с однократной постраничной записью.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 29 2006, 15:24
Сообщение #3


Гуру
******

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



Цитата(AlexandrY @ Apr 29 2006, 16:41) *
Грабли будут по любому wink.gif
....
А если взглянуть шире, то к любым слухам стоит прислушаться.
...

Я например знаю последовательность данных запись которых во FLASH через IAP гарантировано приведет к искажению информации в соседних ячейках.

Ну вот кто-то где-то что-то сказал :-(

1. Давайте сюда эту жуткую последовательность.
2. Городить файловую систему (32K блоки после стирания восстанавливать :-( ) на встроенном FLASH на запись - наверное не стоит по любому.
3. ISP загрузчик сам через ISP (естественно без дозаписи 512 байтовыми страницами а сразу сектором) работает с абсолютно разной информацией и никаких проблем......


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Apr 29 2006, 16:41
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(zltigo @ Apr 29 2006, 18:54) *
Цитата(AlexandrY @ Apr 29 2006, 16:41) *

Грабли будут по любому wink.gif
....
А если взглянуть шире, то к любым слухам стоит прислушаться.
...

Я например знаю последовательность данных запись которых во FLASH через IAP гарантировано приведет к искажению информации в соседних ячейках.

Ну вот кто-то где-то что-то сказал :-(

1. Давайте сюда эту жуткую последовательность.
2. Городить файловую систему (32K блоки после стирания восстанавливать :-( ) на встроенном FLASH на запись - наверное не стоит по любому.
3. ISP загрузчик сам через ISP (естественно без дозаписи 512 байтовыми страницами а сразу сектором) работает с абсолютно разной информацией и никаких проблем......



Ну например:
При чистом FLASH секторе т.е. где все 0xFF делаете так:
Организуете в RAM буфер скажем на 1024 байт (или 512 , это ничего не изменит )
Весь буфер заполняем 0xFF в конец только припишем по смещению 0x3F8 массив {0x0C, 0x00, 0x00, 0x00}
Записываем буфер (1024 байт) во FLASH по адресу 0x1FС00 используя IAP
Теперь обратно из FLASH по адресу 0x1FC00 считываем в буфер те же 1024 байта и дописываем в буфер по смещению 0x3FС массив {0xF0, 0xF0, 0xF0, 0xF0}
Снова записываем буфер во FLASH по адресу 0x1FС00 используя IAP
Теперь проверяем че там во FLASH записалось и видим по адресу 0x1FFFB байт 0x01
Попытки забить это байт 0-ем ни к чему не приведут.

Таких вариантов могу привести кучу. Эффект проявлялся как в конце сектора FLASH так и в начале и в разных секторах
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение May 5 2006, 12:44
Сообщение #5


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Выяснил проблему.
Оказывается Philips всех лоханул.
ECC то его работает на 128 битах, а в мануалах они везде пишут что шить можно по 4-е байта, а на самом деле надо по 16-ть.
На это повелся Keil и написал нерабочую файловую систему для LPC
А за ними и я.
Итак вывод: Во FLASH LPC надо писать блоками данных кратными 16-и байтам и повторно в эти блоки больше ничего записывать нельзя даже если там осталось много FF.
Отсюда видно, что файловую систему типа той что написал Keil в принципе нормально реализовать нельзя для LPC .
Go to the top of the page
 
+Quote Post
Romario
сообщение May 5 2006, 15:18
Сообщение #6


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

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



Цитата(AlexandrY @ May 5 2006, 16:44) *
Выяснил проблему.
Оказывается Philips всех лоханул.
ECC то его работает на 128 битах, а в мануалах они везде пишут что шить можно по 4-е байта, а на самом деле надо по 16-ть.
На это повелся Keil и написал нерабочую файловую систему для LPC
А за ними и я.
Итак вывод: Во FLASH LPC надо писать блоками данных кратными 16-и байтам и повторно в эти блоки больше ничего записывать нельзя даже если там осталось много FF.
Отсюда видно, что файловую систему типа той что написал Keil в принципе нормально реализовать нельзя для LPC .


опередили!:))) аккурат я об этом и хотел сегодня написать в этот топик.
вчера проводил экспериментsmile.gif)

p.s. т.к. что то уж смутно верилось в то, что филипок так облажался.

Сообщение отредактировал Romario - May 5 2006, 15:20
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 5 2006, 15:34
Сообщение #7


Гуру
******

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



Цитата(Romario @ May 5 2006, 18:18) *
p.s. т.к. что то уж смутно верилось в то, что филипок так облажался.

Ну насчет 'облажался' - разве они где-то написали, что можно писать поверх записанного блока???

Цитата
ECC то его работает на 128 битах, а в мануалах они везде пишут что шить можно по 4-е байта, а на самом деле надо по 16-ть.

Ну когда я читал в последний раз мануалы, там было 512 байт и далее кратно.....
В последних на 213x/4x 256 и кратно, так что на счет "везде пишут 4 байта" - нет такого.

Посему наибольшую лажу спорол Keil, родив 'файловую систему'.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение May 5 2006, 16:22
Сообщение #8


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(zltigo @ May 5 2006, 19:04) *
Ну когда я читал в последний раз мануалы, там было 512 байт и далее кратно.....
В последних на 213x/4x 256 и кратно, так что на счет "везде пишут 4 байта" - нет такого.


Не, видать не поняли. В IAP - да, совать надо страницами по 512 и т.д. байт. Но для файловой системы важнее грануляция секторов на немодифицируемые в дальнейшем ячейки. Для обычных флешей можно модифицировать каждый байт забивая 1-цы нулями. Филипс утверждает что в его флеши это 4-е последовательных байта (смотрите внимательнее мануал где про FLASH) А на самом деле 16-ть и реверс ихнего IAP-а показывает, что за раз они шьют по 16-ть байт.
И была у меня своя линейная файловая система и черт дернул на халяву поиметь совместимую с С99 FS
Go to the top of the page
 
+Quote Post
amusin
сообщение May 10 2006, 04:31
Сообщение #9


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

Группа: Участник
Сообщений: 120
Регистрация: 2-09-05
Из: Екатеринбург
Пользователь №: 8 165



Цитата(AlexandrY @ May 5 2006, 22:22) *
Не, видать не поняли. В IAP - да, совать надо страницами по 512 и т.д. байт. Но для файловой системы важнее грануляция секторов на немодифицируемые в дальнейшем ячейки. Для обычных флешей можно модифицировать каждый байт забивая 1-цы нулями. Филипс утверждает что в его флеши это 4-е последовательных байта (смотрите внимательнее мануал где про FLASH) А на самом деле 16-ть и реверс ихнего IAP-а показывает, что за раз они шьют по 16-ть байт.


Действительно, у них в мануале на LPC213x есть ошибка:
A byte of ECC corresponds to every consecutive 128 bits of the user
accessible Flash. Consequently, Flash bytes from 0x0000 0000 to 0x0000 0003 are
protected by the first ECC byte, Flash bytes from 0x0000 0004 to 0x0000 0007 are
protected by the second ECC byte, etc.
Пока все нормально: 4 слова = 16 байт = 128 бит.
Therefore, for the implemented ECC mechanism to perform properly, data must be written
into the Flash memory in groups of 4 bytes (or multiples of 4), aligned as described above.
А вот здесь они опечатались, т.к. described above 16 байт, а не 4.
Спасибо за информацию.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 13 2006, 16:58
Сообщение #10


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Скажите, кто-нибудь пробовал при программировании флэша в LPC2000 одновременно обрабатывать прерывания? Разумеется обработчик должен быть в ОЗУ. И ещё, я знаю, что есть какое-то недокументированное прерывание (в регистре VICIntEnable, да и в других подобных) для обработки флэша. Кто-нибудь знает какое? Просто я знаю, что все свободные биты в этом регистре (аналогично быту 1) можно использовать для эмуляции аппаратных прерываний. Так вот, мне это надо знать чтобы случайно не напороться на это самое прерывание.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Romario   IAP в LPC   Apr 28 2006, 11:29
- - zltigo   Цитата(Romario @ Apr 28 2006, 14:29) нужн...   Apr 28 2006, 15:01
|- - zltigo   Цитата(AlexandrY @ Apr 29 2006, 19:41) Та...   Apr 29 2006, 18:55
- - zltigo   ЦитатаСкажите, .... Пишите свой: http://water.cse....   May 13 2006, 18:41
|- - GetSmart   Но я не хочу писать ботлоадер. Меня интересует мож...   May 14 2006, 04:49
|- - zltigo   Цитата(GetSmart @ May 14 2006, 07:49) Но ...   May 14 2006, 07:30
|- - amusin   Цитата(GetSmart @ May 14 2006, 10:49) Про...   May 16 2006, 04:51
|- - zltigo   Цитата(amusin @ May 16 2006, 07:51) Можно...   May 16 2006, 06:20
|- - GetSmart   Только что проверял прерывания когда обработчик в ...   May 16 2006, 07:20
- - GetSmart   Проверил стирание и запись флэш. Ха! Работает...   May 16 2006, 08:01
|- - zltigo   Цитата(GetSmart @ May 16 2006, 11:01) zlt...   May 16 2006, 08:41
- - GetSmart   ЦитатаПросто я не извращенец. Можете продолжать в ...   May 16 2006, 14:56


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 04:12
Рейтинг@Mail.ru


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