DreamTwister 0 21 апреля, 2010 Опубликовано 21 апреля, 2010 · Жалоба Добрый день. Собственно, такая проблема. Делаю свою утилиту для заливки прошивок под процессор NXP2388. Собственно, заинтересовала ISP команда T. В описании на процессор ее нет. В интернете подробного описания - тоже. Какой ее синтаксис и что она делает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 21 апреля, 2010 Опубликовано 21 апреля, 2010 · Жалоба Собственно, заинтересовала ISP команда T. В описании на процессор ее нет. В интернете подробного описания - тоже. Какой ее синтаксис и что она делает? А с чего Вы взяли, что она есть, если ее нигде нет :). Провидение? Полагаю, что Вы пытались назвать командой постфикс команды 'G'. Для этого надо знать, что такое Thumb и что такое Arm. Ну или давайте ссылку не не подробное описание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DreamTwister 0 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба Врятли это префикс команда '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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба Собственно, заинтересовала ISP команда T. Есть такая команда! Когда ковырялся с бутлоадером от LPC2129, там еще баги были можно было защищенный flash легко считать. Но толку от нее мало - парралельная загрузка. http://electronix.ru/forum/index.php?s=&am...st&p=133717 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DreamTwister 0 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба Есть такая команда! Когда ковырялся с бутлоадером от LPC2129, там еще баги были можно было защищенный flash легко считать. Но толку от нее мало - парралельная загрузка. http://electronix.ru/forum/index.php?s=&am...st&p=133717 Спасибо! Буду теперь знать! Думаю пригодится в ближайшем будущем. Но у меня еще одна проблема. Процессор не реагирует на команду 'G'. Точнее отказывается запускать программу. В ответ получаю 0\r\n\. А дальше - тишина. В качестве операндов перепробовал несколько комбинаций адресов. Интересно, что адрес вычисленный процедурой-донором тоже не подошел. Не подходит ни нулевой адрес, ни адрес таблицы векторов прерываний. Переключение между ARM и Thumb не помогло(запускаю в ARM, ставил второй режим на случай "а вдруг заработает"). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба Но у меня еще одна проблема. Процессор не реагирует на команду 'G'. Точнее отказывается запускать программу. В ответ получаю 0\r\n\. А дальше - тишина. А что должно быть? 0 - это ответ бутлоадера, что все ок! Он запихивает его в FIFO UART и делает вызов по адресу указанному в G, в принципе можно вернуться! (BX LR) и продолжить работу с бутлоадером. Например, для корректной работы надо загрузить функцию, которая отмапит flash на адрес 0. Я еще грузил функции которые позволяли быстро загрузить 8кб в RAM, а потом уже обычными командами бутлоадера шить flash, ( а то родной загрузкой через USB->UART из-за полудуплексоного простокола очень медленно). И первоначальные тесты платы гружу по очереди в RAM и выполняю, так что G работает без проблем! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DreamTwister 0 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба И первоначальные тесты платы гружу по очереди в RAM и выполняю, так что G работает без проблем! А можно узнать модели и версии процессоров, с которыми Вы работали? Я только что провел эксперимент с 'G ' на 2144, все отработало на ура! Аналогичная последовательность команд на 2388 не приводит к должному результату. Причем 2388 запускается после передергивания питания. Вот, что самое интересное. Дак почему же один процессор запускается с "адреса сброса", а второй нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба Аналогичная последовательность команд на 2388 не приводит к должному результату. Причем 2388 запускается после передергивания питания. Так вы из флеша пытаетесь запустить штатный код? Т.к. бутлоадер частично инициализирует переферию, в частности на 23xx, 24xx PLL. Возможно вы его неккорректно отключаете или переинециализируете. И чип виснет. А можно узнать модели и версии процессоров, с которыми Вы работали? 2129, 2103, 1768, 2368, 2478 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба ходя из приведенного выше кода напрашивается вывод, что это что-то аля запуск со сбросом по WDT. исходя из кода эти телодвижения для какого-то неведомого контроллера, который ответит на '?' "Bootloader" я лично таких НЕ знаю. Наверное какие-нибудь старинные версии загрузчиков. Дак почему же один процессор запускается с "адреса сброса", а второй нет? Это уже проблемы Вашей программы. Загрузчик запускает исполнение с любого адреса. А чего там у Вас не работает ему не ведомо. Не забудьте только добавить A или T. А какого, Вы запускаете с какого-то магического адреса, а не с того, с которого он стартует по включению питания, т.е. 0 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DreamTwister 0 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба Так вы из флеша пытаетесь запустить штатный код? Т.к. бутлоадер частично инициализирует переферию, в частности на 23xx, 24xx PLL. Возможно вы его неккорректно отключаете или переинециализируете. И чип виснет. Так и есть! Через IAR глянул, что творится в процессоре - висим на while (!PLLSTAT_bit.PLOCK);. Это уже проблемы Вашей программы. Загрузчик запускает исполнение с любого адреса. А чего там у Вас не работает ему не ведомо. Не забудьте только добавить A или T. А какого, Вы запускаете с какого-то магического адреса, а не с того, с которого он стартует по включению питания, т.е. 0 ? Магическим адресом является, по сути, адрес таблици векторов прерываний(как я понял), а не 0. Разницы, кстати, замечено не было. Собственно, проблема ясна. Теперь о путях решения: 1)Правильно инициализировать PLL. Но есть проблема. Не факт, что все прошивки, заливаемые моей утилитой, будут моими, и PLL там будет адекватно проинициализирован. 2)После заливки основной программы прошивать по адресу 0x40000000 прошивку, которая будет делать сброс по WDT и все. После такого сброса можно быть уверенным, что процессор перешел а дефолтовые настройки. 3)Сбросить процессор программно через свою утилиту сразу после загрузки flash. При помощи какого-нибудь недокументированного способа. Но возможно ли это? Что посоветуете? Писать микроутилиту для RAM, как бы долго это не был? исходя из кода эти телодвижения для какого-то неведомого контроллера, который ответит на '?' "Bootloader" я лично таких НЕ знаю. Наверное какие-нибудь старинные версии загрузчиков. Не забудьте только добавить A или T. Самого удивило! G без выбора режима, а на ? не Synchronized. Вот, собственно, потому и спросил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 22 апреля, 2010 Опубликовано 22 апреля, 2010 · Жалоба Магическим адресом является, по сути, адрес таблици векторов прерываний(как я понял), а не 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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DreamTwister 0 23 апреля, 2010 Опубликовано 23 апреля, 2010 · Жалоба Да ну? От какой сырости таблица стала не с 0 начинаться.... Проблема совершенно не ясна, поскольку вместо всего это Вам следует после прошивки послать контроллер на 0 адрес И ВСЕ. Причем думать на какой адрес на самом деле не надо - в HEX файле он есть. Вот в том то и дело, что утилита по прошивке определяет начальный адрес из *.hex файла не 0, что само по себе странно. Но, как выяснилось после манипуляций с IAR, прошивка стартует, но не замыкает PLL. Причем с обоих адресов. Вероятно, утилита определяет стартовый адрес не 0, а тот, куда мы попадаем из 0. :unsure: Интересная ситуация. Сейчас меня интересует вопрос сброса после прошивки. Так как выяснилось, что просто перейти на 0-ой адрес - мало! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 23 апреля, 2010 Опубликовано 23 апреля, 2010 · Жалоба Вот в том то и дело, что утилита по прошивке определяет начальный адрес из *.hex файла не 0... .....Так как выяснилось, что просто перейти на 0-ой адрес - мало! Простите, но выяснилось только одно - сначала надо научиться писать и написать, то, что прошивать. А потом уже прошивать. И тогда все будет и определяться, и всего будет достаточно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DreamTwister 0 23 апреля, 2010 Опубликовано 23 апреля, 2010 · Жалоба Простите, но выяснилось только одно - сначала надо научиться писать и написать, то, что прошивать. А потом уже прошивать. И тогда все будет и определяться, и всего будет достаточно. Был бы этот *.hex файл полностью моей разработкой - проблем бы не было. Но это не так. Приходиться выкручиваться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 23 апреля, 2010 Опубликовано 23 апреля, 2010 · Жалоба Приходиться выкручиваться. Не выкрутитесь, ибо из дерьма шоколад не делается. Займитесь содержимым прошивки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться