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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Проблема с LPC1768, Не записывается внутренний флеш по адресу 0x70000
VslavX
сообщение Dec 6 2010, 20:04
Сообщение #1


embarrassed systems engineer
*****

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



Имеется LPC1768. Написан свой загрузчик по UART, расположен в первых 16K флэш памяти. Все работало нормально. Но недавно программа увеличилась в размерах и потребовалась запись уже в предпоследний сектор флешки - по адресу 0x70000. И тут произошла засада - оно просто не пишется, функция IAP возвращает SUCCESS, а данные по адресу не записаны.
Начал разбираться что до как. В итоге есть две платы, на обоих LPC1768, но с разными маркировками. На одной память пишется нормально, на второй - такая вот ерунда. И эта проблемная плата не одна такая - на данный момент три опытные штуки, процессоры на них из одной партии.
Прочитал BootROM, дизассемблировал, нашел много интересного sm.gif. У LPC-ей оказывается есть 2 килобайта теневого флеша, и там записано много любопытных вещей - ID процессора, точки старта, методы блокировки JTAG, и - таблица адресов секторов. Так вот - у сбойных чипов эта таблица для предпоследнего сектора содержит 0x78000 вместо законных 0x70000 в нормальном чипе. Такая информация в теневой флешке могла быть записана только на заводе. Вопрос такой - кто-нибудь уже написал такую большую программу для LPC17xx, что понадобился сектор по адресу 0x70000? Или просто у кого-нибудь были проблемы с флешкой по адресу 0x70000?
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 7 2010, 07:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



А вообще LPC1768 уже официально доведённый продукт? Может быть, это у Вас инженерные образцы?
Go to the top of the page
 
+Quote Post
oman
сообщение Dec 7 2010, 08:09
Сообщение #3





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



Цитата(VslavX @ Dec 6 2010, 23:04) *
Прочитал BootROM, дизассемблировал, нашел много интересного sm.gif. У LPC-ей оказывается есть 2 килобайта теневого флеша, и там записано много любопытных вещей - ID процессора, точки старта, методы блокировки JTAG, и - таблица адресов секторов.


не расскажешь как? ну или результаты поподробнее.
заранее спасибо
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 7 2010, 12:23
Сообщение #4


.
******

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



Цитата(oman @ Dec 7 2010, 13:09) *
не расскажешь как? ну или результаты поподробнее.
заранее спасибо

Это всё в отладчике видно. Даже если нет отладчика, то просто залить прогу, которая будет сливать память (флэш) бутлодера через любой инентерфейс (UART например).

Цитата(VslavX @ Dec 7 2010, 01:04) *
Вопрос такой - кто-нибудь уже написал такую большую программу для LPC17xx, что понадобился сектор по адресу 0x70000? Или просто у кого-нибудь были проблемы с флешкой по адресу 0x70000?

Чертовски странно. Я такую большую прогу не писал, но зато сохранял настройки по адресу 0x78000, в последний сектор. Проблем не было. Зачем было извращаться (разработчикам) с предпоследним сектором - непонятно.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
VslavX
сообщение Dec 7 2010, 13:48
Сообщение #5


embarrassed systems engineer
*****

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



Цитата(scifi @ Dec 7 2010, 09:08) *
А вообще LPC1768 уже официально доведённый продукт? Может быть, это у Вас инженерные образцы?

Рабочие процессоры: S61873.1 ZSD0936- - 36 неделя 2009-го
Нерабочие процессоры: SU5617.1 ZSD1012- - 12 неделя 2010-го
Обе партии вполне серийные
Еще отличие - в ранних чипах загрузчик 4.1, в новых - 4.2. Судя по всему - загрузчик тоже записан во отдельную флеш, так как ревизия чипа не менялась, поэтому маловероятно чтобы делали новую маску только для изменения BootROM.

Цитата(oman @ Dec 7 2010, 10:09) *
не расскажешь как? ну или результаты поподробнее.
заранее спасибо

Берем считываем отладчиком или своей программой 8 килобайт по адресу 0x1FFFE000 в файл, потом запускаем IDA и много думаем sm.gif
Потом выясняем как осуществляется доступ к теневым 2K и соответственно пишем свою программку чтобы эти 2 килобайта прочитать.
А результаты пока такие что в партии процессоров в этих 2килобайтах глючная таблица адресов начала предпоследнего сектора


Цитата(GetSmart @ Dec 7 2010, 14:23) *
Чертовски странно. Я такую большую прогу не писал, но зато сохранял настройки по адресу 0x78000, в последний сектор. Проблем не было.

А для последнего сектора проблем и нету - для него в теневой таблице записан правильный базовый адрес.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 7 2010, 13:49
Сообщение #6


.
******

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



FlashMagic тоже не может прописать адреса 0x70000..0x77fff ?

Сообщение отредактировал GetSmart - Dec 7 2010, 15:15


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
VslavX
сообщение Dec 7 2010, 13:55
Сообщение #7


embarrassed systems engineer
*****

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



Цитата(GetSmart @ Dec 7 2010, 15:49) *
FlashMagic тоже не может прописать адреса 0x70000..0x77ffff ?

Не пробовал. А что - это идея, надо бы проверить, спасибо. Правда у меня там RS-232 нету и перемычки на 2.10 тоже.

Upd: попробовал. Программа flashmagic ублюдочная - 6 мегабайт инсталлятор, полчаса грузит в свой внутренний буфер большой хекс файл.
Сначала просто выполнил стирание и записал большой файл. Он записался нормально! Я даже обалдел слегка. Потом вспомнил что IAP то возвращает успех. И записал снова и выполнил верификацию - опа - олень попался - ничего не записано! То есть баг тот же самый.
Общий итог - через FlashMagic и заводской загрузчик тоже не работает. И на том же самом месте.

В-общем-то у меня к NXP основная претензия - закрытость загрузчика и алгоритма записи в память. А теперь они еще и напортачили там maniac.gif
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 7 2010, 15:17
Сообщение #8


.
******

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



Возможно напортачили только в 2к теневого флэша. Ненарошно. Скорее всего это поправимо, ручками программера.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
VslavX
сообщение Dec 7 2010, 16:12
Сообщение #9


embarrassed systems engineer
*****

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



Цитата(GetSmart @ Dec 7 2010, 17:17) *
Возможно напортачили только в 2к теневого флэша. Ненарошно. Скорее всего это поправимо, ручками программера.

Я на NXP написал, посмотрим что ответят. У нас таких чипов вроде всего около сотни пока куплено. Я думаю что патч для внутренней флешки они даже под NDA не дадут - а то можно будет, например, из 1766 программно делать 1768.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 7 2010, 21:50
Сообщение #10


.
******

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



VslavX, у Вас есть код для чтение 2к теневого флэш 17хх?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
igorsk
сообщение Dec 8 2010, 01:32
Сообщение #11


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

Группа: Участник
Сообщений: 84
Регистрация: 22-03-10
Пользователь №: 56 131



Теневой ром виден при установке бита 0x40 в слове 0x40084000. Виден по адресу 0.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Dec 8 2010, 05:56
Сообщение #12


embarrassed systems engineer
*****

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



Цитата(GetSmart @ Dec 7 2010, 23:50) *
VslavX, у Вас есть код для чтение 2к теневого флэш 17хх?

А как бы я его иначе прочитал? sm.gif
CODE
DWORD save[512];

__ramfunc void copy_hidden_flash(void)
{
DWORD i;
PDWORD s, d;

i = 512;
s = (PDWORD)NULL;
d = save;
*((volatile DWORD*)0x40084000) |= 0x40;
do
{
*d++ = *s++;
}
while(--i);
*((volatile DWORD*)0x40084000) &= ~0x40;
}

Функция должна быть в RAM, потому как программный флеш полностью отрубается при переключении на теневую флешку.
Приведенной выше функцией я скопировал теневой флеш в RAM и потом его уже разбирал.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Dec 8 2010, 14:48
Сообщение #13


embarrassed systems engineer
*****

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



Я балдею дорогая редакция...
NXP ответил что девайсы маркированные с 11 по 34 неделю 2010 года могут иметь 480 килобайт флеша вместо 512 ("sector 28 should be skipped"). Эти чипы подлежат "ретестированию" (гы, теневую флешку перезапишут, нет чтобы кодом с народом поделитцо) и на упаковках таких "ретестированных" чипов приклеют этикетку "RESCREEN". Мои экземпляры предложили вернуть и обменять на нормальные. Я уже постеснялся переспрашивать "Ничо шо паянные?"
Капец процесс у них поставлен - полгода бнопню гнали.
Go to the top of the page
 
+Quote Post
vmp
сообщение Dec 9 2010, 09:04
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(VslavX @ Dec 7 2010, 16:55) *
В-общем-то у меня к NXP основная претензия - закрытость загрузчика и алгоритма записи в память.

А после дизассемблирования алгоритм записи в память не появился? Если напрямую, без использования их ПЗУ работать?
И как еще один вариант. Попробовать настроить регистры отладчика или MPU на перехват обращения к глючной части теневого ПЗУ и подправить результат.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Dec 9 2010, 10:26
Сообщение #15


embarrassed systems engineer
*****

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



Цитата(vmp @ Dec 9 2010, 11:04) *
А после дизассемблирования алгоритм записи в память не появился? Если напрямую, без использования их ПЗУ работать?

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

Цитата(vmp @ Dec 9 2010, 11:04) *
И как еще один вариант. Попробовать настроить регистры отладчика или MPU на перехват обращения к глючной части теневого ПЗУ и подправить результат.

Думал я об этом, возни достаточно много - когда идет обращение к теневой флешке, то основная флеш не работает - это обработчик исключения надо в ОЗУ размещать, а все обработчики у меня по шаблону автогенерируюся и на HAL/RTOS завязаны. Но, наверное от шаблона отступить все-таки можно. MPU у меня уже используется, все регионы заняты, а вот точка останова по обращению к данным - вполне подойдет, cпасибо за идею.

Upd: почитал про DWT (Data Watchpoint and Trace) - не пойдет, процессор именно останавливается, а не генерирует исключение. Таки остается только MPU.
Go to the top of the page
 
+Quote Post

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

 


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


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