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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> ISP команды для NXP
DreamTwister
сообщение Apr 21 2010, 11:31
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Добрый день.
Собственно, такая проблема.
Делаю свою утилиту для заливки прошивок под процессор NXP2388.

Собственно, заинтересовала ISP команда T. В описании на процессор ее нет. В интернете подробного описания - тоже.
Какой ее синтаксис и что она делает?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 21 2010, 12:48
Сообщение #2


Гуру
******

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



Цитата(DreamTwister @ Apr 21 2010, 14:46) *
Собственно, заинтересовала ISP команда T. В описании на процессор ее нет. В интернете подробного описания - тоже.
Какой ее синтаксис и что она делает?

А с чего Вы взяли, что она есть, если ее нигде нет smile.gif. Провидение? Полагаю, что Вы пытались назвать командой постфикс команды 'G'. Для этого надо знать, что такое Thumb и что такое Arm.
Ну или давайте ссылку не не подробное описание.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DreamTwister
сообщение Apr 22 2010, 03:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Врятли это префикс команда 'G'. Для своей утилиты использовал "донора" (lpcprog.c lpc21isp.c), где и наткнулся на очень интересный код.

Код
                long chars, xtal;
                unsigned long ticks;
                chars = (17 * IspEnvironment->BinaryLength + 1) / 10;
                WatchDogSeconds = (10 * chars + 5) / atol(IspEnvironment->baud_rate) + 10;
                xtal = atol(IspEnvironment->StringOscillator) * 1000;
                ticks = (unsigned long)WatchDogSeconds * ((xtal + 15) / 16);
                DebugPrintf(2, "Entering ISP; re-synchronizing (watchdog = %ld seconds)\n", WatchDogSeconds);
                sprintf(temp, "T %lu\r\n", ticks);
                SendComPort(IspEnvironment, temp);
                ReceiveComPort(IspEnvironment, Answer, sizeof(Answer)-1, &realsize, 1,100);
                if (strcmp(Answer, "OK\r\n") != 0)
                {
                    ResetKeyboardTtySettings();
                    DebugPrintf(2, "No answer on 'watchdog timer set'\n");
                    return (NO_ANSWER_WDT);
                }
                SendComPort(IspEnvironment, "G 10356\r\n");
                Sleep(200);
                nQuestionMarks = 0;
                WaitForWatchDog = 1;


Как видите тут 'G' без префикса, но она идет после 'T', а не наоборот, да и к тому же у 'T' есть свой собственный операнд. Да и посылка имеет обвязку, как у команды. При отправке оной(T) процессор возвращает код ошибки 12\r\n.

Исходя из приведенного выше кода напрашивается вывод, что это что-то аля запуск со сбросом по WDT.

И еще, искал в интернете и нашел один документик, но, правда, немного не по теме, но там есть замечательная фраза:
http://www.cast.com.au/esdk/lpc2/boot-loader.html

Цитата
There are hidden commands in the boot loader that NXP has chosen not to disclose (for example the T command) which does things in a sneaky way as will be seen later. The G command accepts the argument "tEsT" in lieu of the branch address.
Go to the top of the page
 
+Quote Post
KRS
сообщение Apr 22 2010, 07:56
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(DreamTwister @ Apr 21 2010, 15:46) *
Собственно, заинтересовала ISP команда T.

Есть такая команда! Когда ковырялся с бутлоадером от LPC2129, там еще баги были можно было защищенный flash легко считать.
Но толку от нее мало - парралельная загрузка.
http://electronix.ru/forum/index.php?s=&am...st&p=133717
Go to the top of the page
 
+Quote Post
DreamTwister
сообщение Apr 22 2010, 08:42
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Цитата(KRS @ Apr 22 2010, 14:11) *
Есть такая команда! Когда ковырялся с бутлоадером от LPC2129, там еще баги были можно было защищенный flash легко считать.
Но толку от нее мало - парралельная загрузка.
http://electronix.ru/forum/index.php?s=&am...st&p=133717


Спасибо! Буду теперь знать! Думаю пригодится в ближайшем будущем.

Но у меня еще одна проблема. Процессор не реагирует на команду 'G'. Точнее отказывается запускать программу.
В ответ получаю 0\r\n\. А дальше - тишина.
В качестве операндов перепробовал несколько комбинаций адресов. Интересно, что адрес вычисленный процедурой-донором тоже не подошел.
Не подходит ни нулевой адрес, ни адрес таблицы векторов прерываний. Переключение между ARM и Thumb не помогло(запускаю в ARM, ставил второй режим на случай "а вдруг заработает").
Go to the top of the page
 
+Quote Post
KRS
сообщение Apr 22 2010, 08:53
Сообщение #6


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(DreamTwister @ Apr 22 2010, 12:57) *
Но у меня еще одна проблема. Процессор не реагирует на команду 'G'. Точнее отказывается запускать программу.
В ответ получаю 0\r\n\. А дальше - тишина.

А что должно быть?
0 - это ответ бутлоадера, что все ок! Он запихивает его в FIFO UART и делает вызов по адресу указанному в G, в принципе можно вернуться! (BX LR) и продолжить работу с бутлоадером. Например, для корректной работы надо загрузить функцию, которая отмапит flash на адрес 0. Я еще грузил функции которые позволяли быстро загрузить 8кб в RAM, а потом уже обычными командами бутлоадера шить flash, ( а то родной загрузкой через USB->UART из-за полудуплексоного простокола очень медленно).
И первоначальные тесты платы гружу по очереди в RAM и выполняю, так что G работает без проблем!
Go to the top of the page
 
+Quote Post
DreamTwister
сообщение Apr 22 2010, 09:17
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Цитата(KRS @ Apr 22 2010, 15:08) *
И первоначальные тесты платы гружу по очереди в RAM и выполняю, так что G работает без проблем!


А можно узнать модели и версии процессоров, с которыми Вы работали? Я только что провел эксперимент с 'G ' на 2144, все отработало на ура!
Аналогичная последовательность команд на 2388 не приводит к должному результату. Причем 2388 запускается после передергивания питания.
Вот, что самое интересное.

Дак почему же один процессор запускается с "адреса сброса", а второй нет?
Go to the top of the page
 
+Quote Post
KRS
сообщение Apr 22 2010, 10:21
Сообщение #8


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(DreamTwister @ Apr 22 2010, 13:32) *
Аналогичная последовательность команд на 2388 не приводит к должному результату. Причем 2388 запускается после передергивания питания.

Так вы из флеша пытаетесь запустить штатный код?
Т.к. бутлоадер частично инициализирует переферию, в частности на 23xx, 24xx PLL. Возможно вы его неккорректно отключаете или переинециализируете. И чип виснет.

Цитата(DreamTwister @ Apr 22 2010, 13:32) *
А можно узнать модели и версии процессоров, с которыми Вы работали?

2129, 2103, 1768, 2368, 2478
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 22 2010, 10:43
Сообщение #9


Гуру
******

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



Цитата(DreamTwister @ Apr 22 2010, 05:37) *
ходя из приведенного выше кода напрашивается вывод, что это что-то аля запуск со сбросом по WDT.

исходя из кода эти телодвижения для какого-то неведомого контроллера, который ответит на '?'
"Bootloader" я лично таких НЕ знаю. Наверное какие-нибудь старинные версии загрузчиков.
Цитата(DreamTwister @ Apr 22 2010, 11:32) *
Дак почему же один процессор запускается с "адреса сброса", а второй нет?

Это уже проблемы Вашей программы. Загрузчик запускает исполнение с любого адреса. А чего там у Вас не работает ему не ведомо.
Не забудьте только добавить A или T. А какого, Вы запускаете с какого-то магического адреса, а не с того, с которого он стартует по включению питания, т.е. 0 ?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DreamTwister
сообщение Apr 22 2010, 11:47
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Цитата(KRS @ Apr 22 2010, 16:36) *
Так вы из флеша пытаетесь запустить штатный код?
Т.к. бутлоадер частично инициализирует переферию, в частности на 23xx, 24xx PLL. Возможно вы его неккорректно отключаете или переинециализируете. И чип виснет.


Так и есть! Через IAR глянул, что творится в процессоре - висим на while (!PLLSTAT_bit.PLOCK);.


Цитата
Это уже проблемы Вашей программы. Загрузчик запускает исполнение с любого адреса. А чего там у Вас не работает ему не ведомо.
Не забудьте только добавить A или T. А какого, Вы запускаете с какого-то магического адреса, а не с того, с которого он стартует по включению питания, т.е. 0 ?


Магическим адресом является, по сути, адрес таблици векторов прерываний(как я понял), а не 0. Разницы, кстати, замечено не было.


Собственно, проблема ясна. Теперь о путях решения:
1)Правильно инициализировать PLL. Но есть проблема. Не факт, что все прошивки, заливаемые моей утилитой, будут моими, и PLL там будет адекватно проинициализирован.
2)После заливки основной программы прошивать по адресу 0x40000000 прошивку, которая будет делать сброс по WDT и все. После такого сброса можно быть уверенным, что процессор перешел а дефолтовые настройки.
3)Сбросить процессор программно через свою утилиту сразу после загрузки flash. При помощи какого-нибудь недокументированного способа. Но возможно ли это?


Что посоветуете? Писать микроутилиту для RAM, как бы долго это не был?

Цитата(zltigo @ Apr 22 2010, 16:58) *
исходя из кода эти телодвижения для какого-то неведомого контроллера, который ответит на '?'
"Bootloader" я лично таких НЕ знаю. Наверное какие-нибудь старинные версии загрузчиков.

Не забудьте только добавить A или T.



Самого удивило! G без выбора режима, а на ? не Synchronized. Вот, собственно, потому и спросил.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 22 2010, 12:22
Сообщение #11


Гуру
******

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



Цитата(DreamTwister @ Apr 22 2010, 14:02) *
Магическим адресом является, по сути, адрес таблици векторов прерываний(как я понял), а не 0. Разницы, кстати, замечено не было.

Да ну? От какой сырости таблица стала не с 0 начинаться....
Цитата
Собственно, проблема ясна. Теперь о путях решения:

Проблема совершенно не ясна, поскольку вместо всего это Вам следует после прошивки послать контроллер на 0 адрес И ВСЕ. Причем думать на какой адрес на самом деле не надо - в HEX файле он есть.
Код
AT200/AES ISP/Terminal for LPC2/1000 V0.31.4 by I.Zalts. Windows 5.1
    Erase all FLASH!
    Set Boot Control mode: 0
       HEX file:  [Ctrl+F9] .\works\exe\loader_usm3.hex
    Serial Port: COM12    Baud: 115200
      Oscilator: 72000KHz

Dumb Terminal started
     [Alt+X] to exit

Go to LPC2000 Bootloader...
Wait...
Entering to LPC2000 Bootloader -Ok
Bootcode: 3.3.0
Chip  ID: LPC2378 512KB ROM/32KB SRAM Rev:B (ID:385940773/0x1700FD25)

Erased Sectors 0..27
File    : '.\works\exe\loader_usm3.hex' -Loaded
       Linear Address: 00000000
         Load Address: 00000000
    Run Address Found: 00000000
    End of File
           Image size: 8192
Sector 00..............................................................................
...............
Sector 01..............................................................................
...............
Download Finished.
Now launching (000000) the brand new code....Success.

    Found LPC2378 (Watchdog Mode)
    Loader CRC: Valid
    Kernel CRC: Not Found(FFFFFFFF)


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DreamTwister
сообщение Apr 23 2010, 03:27
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Цитата(zltigo @ Apr 22 2010, 18:37) *
Да ну? От какой сырости таблица стала не с 0 начинаться....

Проблема совершенно не ясна, поскольку вместо всего это Вам следует после прошивки послать контроллер на 0 адрес И ВСЕ. Причем думать на какой адрес на самом деле не надо - в HEX файле он есть.


Вот в том то и дело, что утилита по прошивке определяет начальный адрес из *.hex файла не 0, что само по себе странно.
Но, как выяснилось после манипуляций с IAR, прошивка стартует, но не замыкает PLL.
Причем с обоих адресов. Вероятно, утилита определяет стартовый адрес не 0, а тот, куда мы попадаем из 0. unsure.gif
Интересная ситуация.

Сейчас меня интересует вопрос сброса после прошивки. Так как выяснилось, что просто перейти на 0-ой адрес - мало!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 23 2010, 05:06
Сообщение #13


Гуру
******

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



Цитата(DreamTwister @ Apr 23 2010, 05:42) *
Вот в том то и дело, что утилита по прошивке определяет начальный адрес из *.hex файла не 0...
.....Так как выяснилось, что просто перейти на 0-ой адрес - мало!

Простите, но выяснилось только одно - сначала надо научиться писать и написать, то, что прошивать. А потом уже прошивать. И тогда все будет и определяться, и всего будет достаточно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DreamTwister
сообщение Apr 23 2010, 05:23
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Цитата(zltigo @ Apr 23 2010, 11:21) *
Простите, но выяснилось только одно - сначала надо научиться писать и написать, то, что прошивать. А потом уже прошивать. И тогда все будет и определяться, и всего будет достаточно.



Был бы этот *.hex файл полностью моей разработкой - проблем бы не было. Но это не так. Приходиться выкручиваться.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 23 2010, 05:31
Сообщение #15


Гуру
******

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



Цитата(DreamTwister @ Apr 23 2010, 07:38) *
Приходиться выкручиваться.

Не выкрутитесь, ибо из дерьма шоколад не делается. Займитесь содержимым прошивки.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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