VslavX 0 6 декабря, 2010 Опубликовано 6 декабря, 2010 · Жалоба Имеется LPC1768. Написан свой загрузчик по UART, расположен в первых 16K флэш памяти. Все работало нормально. Но недавно программа увеличилась в размерах и потребовалась запись уже в предпоследний сектор флешки - по адресу 0x70000. И тут произошла засада - оно просто не пишется, функция IAP возвращает SUCCESS, а данные по адресу не записаны. Начал разбираться что до как. В итоге есть две платы, на обоих LPC1768, но с разными маркировками. На одной память пишется нормально, на второй - такая вот ерунда. И эта проблемная плата не одна такая - на данный момент три опытные штуки, процессоры на них из одной партии. Прочитал BootROM, дизассемблировал, нашел много интересного :). У LPC-ей оказывается есть 2 килобайта теневого флеша, и там записано много любопытных вещей - ID процессора, точки старта, методы блокировки JTAG, и - таблица адресов секторов. Так вот - у сбойных чипов эта таблица для предпоследнего сектора содержит 0x78000 вместо законных 0x70000 в нормальном чипе. Такая информация в теневой флешке могла быть записана только на заводе. Вопрос такой - кто-нибудь уже написал такую большую программу для LPC17xx, что понадобился сектор по адресу 0x70000? Или просто у кого-нибудь были проблемы с флешкой по адресу 0x70000? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 7 декабря, 2010 Опубликовано 7 декабря, 2010 · Жалоба А вообще LPC1768 уже официально доведённый продукт? Может быть, это у Вас инженерные образцы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oman 0 7 декабря, 2010 Опубликовано 7 декабря, 2010 · Жалоба Прочитал BootROM, дизассемблировал, нашел много интересного :). У LPC-ей оказывается есть 2 килобайта теневого флеша, и там записано много любопытных вещей - ID процессора, точки старта, методы блокировки JTAG, и - таблица адресов секторов. не расскажешь как? ну или результаты поподробнее. заранее спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 7 декабря, 2010 Опубликовано 7 декабря, 2010 · Жалоба не расскажешь как? ну или результаты поподробнее. заранее спасибо Это всё в отладчике видно. Даже если нет отладчика, то просто залить прогу, которая будет сливать память (флэш) бутлодера через любой инентерфейс (UART например). Вопрос такой - кто-нибудь уже написал такую большую программу для LPC17xx, что понадобился сектор по адресу 0x70000? Или просто у кого-нибудь были проблемы с флешкой по адресу 0x70000? Чертовски странно. Я такую большую прогу не писал, но зато сохранял настройки по адресу 0x78000, в последний сектор. Проблем не было. Зачем было извращаться (разработчикам) с предпоследним сектором - непонятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 7 декабря, 2010 Опубликовано 7 декабря, 2010 · Жалоба А вообще LPC1768 уже официально доведённый продукт? Может быть, это у Вас инженерные образцы? Рабочие процессоры: S61873.1 ZSD0936- - 36 неделя 2009-го Нерабочие процессоры: SU5617.1 ZSD1012- - 12 неделя 2010-го Обе партии вполне серийные Еще отличие - в ранних чипах загрузчик 4.1, в новых - 4.2. Судя по всему - загрузчик тоже записан во отдельную флеш, так как ревизия чипа не менялась, поэтому маловероятно чтобы делали новую маску только для изменения BootROM. не расскажешь как? ну или результаты поподробнее. заранее спасибо Берем считываем отладчиком или своей программой 8 килобайт по адресу 0x1FFFE000 в файл, потом запускаем IDA и много думаем :) Потом выясняем как осуществляется доступ к теневым 2K и соответственно пишем свою программку чтобы эти 2 килобайта прочитать. А результаты пока такие что в партии процессоров в этих 2килобайтах глючная таблица адресов начала предпоследнего сектора Чертовски странно. Я такую большую прогу не писал, но зато сохранял настройки по адресу 0x78000, в последний сектор. Проблем не было. А для последнего сектора проблем и нету - для него в теневой таблице записан правильный базовый адрес. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 7 декабря, 2010 Опубликовано 7 декабря, 2010 (изменено) · Жалоба FlashMagic тоже не может прописать адреса 0x70000..0x77fff ? Изменено 7 декабря, 2010 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 7 декабря, 2010 Опубликовано 7 декабря, 2010 · Жалоба FlashMagic тоже не может прописать адреса 0x70000..0x77ffff ? Не пробовал. А что - это идея, надо бы проверить, спасибо. Правда у меня там RS-232 нету и перемычки на 2.10 тоже. Upd: попробовал. Программа flashmagic ублюдочная - 6 мегабайт инсталлятор, полчаса грузит в свой внутренний буфер большой хекс файл. Сначала просто выполнил стирание и записал большой файл. Он записался нормально! Я даже обалдел слегка. Потом вспомнил что IAP то возвращает успех. И записал снова и выполнил верификацию - опа - олень попался - ничего не записано! То есть баг тот же самый. Общий итог - через FlashMagic и заводской загрузчик тоже не работает. И на том же самом месте. В-общем-то у меня к NXP основная претензия - закрытость загрузчика и алгоритма записи в память. А теперь они еще и напортачили там :maniac: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 7 декабря, 2010 Опубликовано 7 декабря, 2010 · Жалоба Возможно напортачили только в 2к теневого флэша. Ненарошно. Скорее всего это поправимо, ручками программера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 7 декабря, 2010 Опубликовано 7 декабря, 2010 · Жалоба Возможно напортачили только в 2к теневого флэша. Ненарошно. Скорее всего это поправимо, ручками программера. Я на NXP написал, посмотрим что ответят. У нас таких чипов вроде всего около сотни пока куплено. Я думаю что патч для внутренней флешки они даже под NDA не дадут - а то можно будет, например, из 1766 программно делать 1768. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 7 декабря, 2010 Опубликовано 7 декабря, 2010 · Жалоба VslavX, у Вас есть код для чтение 2к теневого флэш 17хх? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorsk 0 8 декабря, 2010 Опубликовано 8 декабря, 2010 · Жалоба Теневой ром виден при установке бита 0x40 в слове 0x40084000. Виден по адресу 0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 8 декабря, 2010 Опубликовано 8 декабря, 2010 · Жалоба VslavX, у Вас есть код для чтение 2к теневого флэш 17хх? А как бы я его иначе прочитал? :) 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 и потом его уже разбирал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 8 декабря, 2010 Опубликовано 8 декабря, 2010 · Жалоба Я балдею дорогая редакция... NXP ответил что девайсы маркированные с 11 по 34 неделю 2010 года могут иметь 480 килобайт флеша вместо 512 ("sector 28 should be skipped"). Эти чипы подлежат "ретестированию" (гы, теневую флешку перезапишут, нет чтобы кодом с народом поделитцо) и на упаковках таких "ретестированных" чипов приклеют этикетку "RESCREEN". Мои экземпляры предложили вернуть и обменять на нормальные. Я уже постеснялся переспрашивать "Ничо шо паянные?" Капец процесс у них поставлен - полгода бнопню гнали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vmp 0 9 декабря, 2010 Опубликовано 9 декабря, 2010 · Жалоба В-общем-то у меня к NXP основная претензия - закрытость загрузчика и алгоритма записи в память. А после дизассемблирования алгоритм записи в память не появился? Если напрямую, без использования их ПЗУ работать? И как еще один вариант. Попробовать настроить регистры отладчика или MPU на перехват обращения к глючной части теневого ПЗУ и подправить результат. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 9 декабря, 2010 Опубликовано 9 декабря, 2010 · Жалоба А после дизассемблирования алгоритм записи в память не появился? Если напрямую, без использования их ПЗУ работать? В принципе появился, но с документацией лучше. В принципе я запросил ее у NXP хотя бы касательно программирования флешки, посмотрим что скажут. И как еще один вариант. Попробовать настроить регистры отладчика или MPU на перехват обращения к глючной части теневого ПЗУ и подправить результат. Думал я об этом, возни достаточно много - когда идет обращение к теневой флешке, то основная флеш не работает - это обработчик исключения надо в ОЗУ размещать, а все обработчики у меня по шаблону автогенерируюся и на HAL/RTOS завязаны. Но, наверное от шаблона отступить все-таки можно. MPU у меня уже используется, все регионы заняты, а вот точка останова по обращению к данным - вполне подойдет, cпасибо за идею. Upd: почитал про DWT (Data Watchpoint and Trace) - не пойдет, процессор именно останавливается, а не генерирует исключение. Таки остается только MPU. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться