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

 
 
> Проблема с LPC3250 service boot, Сервисный загрузчик в ROM LPC3250 работает не так как должен
Dennis E
сообщение Jan 4 2011, 08:07
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 27-07-07
Пользователь №: 29 404



Проблема следующая.

Не удаётся загрузить LPC3250 через последовательный интерфейс в режиме ‘Service boot’. Это режим загрузки, который включается при установке линии ‘BOOTSEL’ в ‘0’. В нём после ‘Reset’ из ROM процессора запускается заводской загрузчик ‘bootstrap’, который позволяет через UART5 загрузить во внутреннюю IRAM и запустить бинарник.

1. Выяснилось, что ‘bootstrap’ в запаянных на наши платы LPC3250 ревизии ‘-’ ведёт себя немного отлично от того, как он должен это делать судя по UserManual.
В UserManual говорится, что процесс ‘Service’ загрузки такой:
LPC32x0 Host
-> BootID (0x35=’5’)
<- 0x41=’A’
-> BootID (0x35=’5’)
<- 0x55=’U’
<- 0x33=’3’
-> 0x52=’R’
<- StartAddress (4 bytes)
<- CodeSize (4 bytes)
<- Code

А наш процессор почему-то в самом начале выдаёт не 1 код ‘BootID’ а сразу 2 штуки:

[смотри картинку "01_osc_dbl_'5'.png"]

Последующие этапы обмена процессор отрабатывает верно. Но у программы «LPC3250 Loader» из NXP’s CSP v2.01 “nxpmcu/software/csps/lpc32xx/tools/LPC3250 loader” всё равно сносит крышу и она прерывает процесс загрузки. (Причём физически два ‘BootID’ идут сразу друг за другом, а крышу у программы сносит немного позже, когда проходит несколько этапов обмена):

[смотри картинку "Serial_loader_dbl_'5'.PNG"]


2. Был сделан «Передатчик» на первой попавшейся подходящей плате, который транслирует данные с 1-го UART, подключенного к компьютеру, на 2-ой UART, подключенный к LPC3250. Но при трансляции «Передатчик» вырезает второй ‘BootID’, посылаемый LPC3250:

[смотри картинку "02_osc_do_single_'5'.png"]


После этого процесс ‘Service’ загрузки продвинулся дальше:

[смотри картинку "Serial_loader_cut_dbl_'5'.PNG"]


«LPC3250 Loader» начинает загружать бинарник. Но всё равно! Примерно через 1,42 секунды LPC3250 опять инициализирует процесс ‘Service’ boot, выдавая двойной ‘BootID’ и в дальнейшем выдавая ‘BootID’ в ответ на каждый байт продолжающегося грузиться бинарника:

[смотри картинку "07_osc_boot.png"]


3. Маркировка нашего LPC3250 следующая:

LPC3250FET296
POG454.00 01
ESD0920-

То есть ревизия нашего процессора ‘-’, дата производства: 11-17 Мая 2009 года.

PS: К сообщению прицеплен PDF с иллюстрациями: скриншоты и осциллограммы.
PPS: Также к сообщению прицеплены иллюстрации в виде отдельных файлов.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  LPC3250_Service_boot_problem_rus.pdf ( 174.27 килобайт ) Кол-во скачиваний: 159
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DpInRock
сообщение Jan 5 2011, 08:37
Сообщение #2


Гуру
******

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



Ага. А всего-то - резет дважды идет...


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Dennis E
сообщение Jan 6 2011, 03:16
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 27-07-07
Пользователь №: 29 404



Цитата(DpInRock @ Jan 5 2011, 16:37) *
Ага. А всего-то - резет дважды идет...

'DpInRock' зря вы так, уж что-что, а Reset я в первую очередь проверял. И вообще, где по вашему должен случаться Reset? После передачи 1-го 'BootID' и перед 2-м? Не получается так... Обратите внимание, на осциллограмме 2 'BootID' идут без задержки друг за другом, как будто в контроллер UART были посланы cразу 2 байта.
А ещё после Reset'а в режиме 'Service Boot' загрузчик должен выполнить определённые действия: проинициализироваться самому, проверить "RTC_KEY", проверить и проинициализировать "OTG ATX", проинициализировать UART. И всё это на частоте ядра 13 МГц. Можно смело тактов 200-400 на все эти дела отвести. Было бы видно эту задержку на осциллограмме...

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Save_our_Souls
сообщение Dec 21 2011, 20:11
Сообщение #4





Группа: Новичок
Сообщений: 5
Регистрация: 22-11-11
Пользователь №: 68 461



Подниму, пожалуй, тему.

У меня совсем глупый вопрос наверное, в программировании не силен. Случилось так, что нужно вручную переписать этот LPC3250 Loader с некоторым его интерфейсным облегчением. Но Я никак не пойму, как обратиться к конкретному адресу регистра в этой микрухе. Собственно не пойму, как передавая через VCP данные, она понимает, что Я ей передаю адрес, а не число? Вот например, следуя по даташиту, в процессе перехода в Service Boot нужно проверть RTC_KEY==0xB5C13F27 на правильность. А это значит, что нужно запросить это чиселко из конкретного регистра 0x4002 4018, ну или хотябы сразу туда его записать. В любом случае...В общем ступоры на ровном месте, почти убежден, что делается тривиально.

http://www.nxp.com/documents/user_manual/UM10326.pdf

Можно еще указать что. Я использую дрова ftd2xx. Поэтому как вариант можно сначала передать 4 байта 0x4002 4018 через функцию FT_WRITE(..., ..., ..., &...), потом еще 4 байта самого числа 0xB5C13F27 тоже через FT_WRITE(). Но вот будет ли оно работать так, как Я думаю, бог знает. Ей то до фени.

Сообщение отредактировал Save_our_Souls - Dec 21 2011, 19:52
Go to the top of the page
 
+Quote Post
scorp2011
сообщение Dec 22 2011, 14:09
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 29-01-11
Пользователь №: 62 559



Судя по вопросу вы похоже никогда не писали програму для этого АРМа. Проще наити в примерах компилятора которым вы пользуетесь как обьявляются регистры. Вот например в IAR:
Код
__IO_REG32(    RTC_KEY,               0x40024018,__READ_WRITE);

if(RTC_KEY == 0xB5C13F27)......

Кроме того когда вы передаете данные по UART в процессе boot, то следуете жесткому алгоритму зашитому в АРМ бутлоадере. Предполагаю вы хотите таким способом загрузить свои бутлоадер а затем продолжить загрузку через него. Тогда вам надо разработать свои протокол обмена с вашим бутлоадером.
Хотя глядя на ваш последнии абзац похоже я вас не до конца понял

Сообщение отредактировал IgorKossak - Dec 22 2011, 15:44
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post
Save_our_Souls
сообщение Dec 22 2011, 19:43
Сообщение #6





Группа: Новичок
Сообщений: 5
Регистрация: 22-11-11
Пользователь №: 68 461



Да, спасибо. Сегодня поковырял этот АРМ еще немного. Действительно там все жестко прописано, и только успевай слать нужные комбинации.

На самом деле задача, то предельно проста да вроде бы не очень. В процессе работы с этой платой требуется автоматизировать процесс залития кода в boot режиме. То есть убрать операции с нажатием кнопочек reset и p2.10. И сделать соответствующее управление через FT232R, установленную на эту плату. В теории можно было бы использовать программку, которая создает эмулированные порты на основе одного реального. То есть можно к одному порту подключить сразу несколько управляющих программок. И путем нажатия кнопки сброса DTR и RTS в приложении запускать процесс прошивки с помощью Loader'a, но тут обнаружился косяк с этими перемычками. Ибо LPC3250 Loader работает при незамкнутых перемычках сброса и р2.10, а FT-шка при замкнутых. ( Поэтому вот приходится вот так корячиться.

А в программировании Я олень, меня до сих пор вводят в ужас такие команды типа __READ_WRITE, и при программировании всяких AT90 стараюсь избегать все что с этим подчеркиванием. Беда нынешней системы управления будущими кадрами, в том числе и образовании.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 08:19
Рейтинг@Mail.ru


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