|
|
  |
Почему LPC2478 отказывается программироваться через JTAG?, Ничего не понимаю в этих АРМах :( |
|
|
|
Mar 2 2009, 14:18
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Сделал какие-то коррекции большого проекта, загрузил в среде в контроллер, контроллер перестал программироваться вообще. Лог внизу. Записал старую версию проекта через бутлоадер + at200. Все работает. Вернулся к последней версии большого проекта. Он запрограммировался один раз, и все повторилось сначала. 1) И как ошибки искать? Что такое криминальное я мог сделать? Всего, что добавил - циклические буферы по UART0. 2) Может, JTAG нужно как-то совсем правильно подключать? Сейчас RTCK не подключен, может это увеличит возможность перепрограммирования через JTAG?
Кстати, zltigo, Вы, как автор at200 - сброс в режиме бутлоадера в какие моменты должен подаваться? Этот вопрос отпал - фирменный нуль-модемный кабель был без перемычек 4-6.
Спасибо
Mon Mar 02 13:55:51 2009: Loaded macro file: D:\Program Files\IAR ARM 520\ARM\config\flashloader\NXP\LPC23xx24xx.mac Mon Mar 02 13:55:52 2009: DLL version: V3.90d, compiled Sep 1 2008 13:56:39 Mon Mar 02 13:55:52 2009: Firmware: J-Link ARM V6 compiled Jul 30 2008 11:24:59 Mon Mar 02 13:55:52 2009: JTAG speed is initially set to: 32 kHz Mon Mar 02 13:55:52 2009: TotalIRLen = 4, IRPrint = 0x01 Mon Mar 02 13:55:52 2009: Resetting target using RESET pin Mon Mar 02 13:55:52 2009: TotalIRLen = 4, IRPrint = 0x01 Mon Mar 02 13:55:52 2009: Halting CPU core Mon Mar 02 13:55:52 2009: Using DBGRQ to halt CPU Mon Mar 02 13:55:52 2009: Resetting TRST in order to halt CPU Mon Mar 02 13:55:52 2009: Resetting target using RESET pin Mon Mar 02 13:55:52 2009: TotalIRLen = 4, IRPrint = 0x01 Mon Mar 02 13:55:53 2009: Halting CPU core Mon Mar 02 13:55:53 2009: Using DBGRQ to halt CPU Mon Mar 02 13:55:53 2009: Resetting TRST in order to halt CPU Mon Mar 02 13:55:56 2009: Hardware reset with strategy 0 was performed Mon Mar 02 13:55:56 2009: Initial reset was performed ________тут появляется сообщение - не могу остановить ядро Mon Mar 02 13:55:56 2009: Fatal error: Scan chain length is expected to be 4 or 5. Found (0) // если нажать - продолжить.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Mar 2 2009, 16:09
|

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

|
Цитата(KRS @ Mar 2 2009, 17:40)  А может вы случайно JTAG отключили... Для LPC21xx где-то в AN было документировано управление активизацией JTAG - на первых порах даже закладывал возможность "секретной" командой с консоли активизировать заблокированный в bootloader JTAG - потом как-то все это похерил за ненадобнстью и сейчас уже в текущих исходниках не нашел  . Действительно, возможно на этот регистр наступили. А может и все много проще, например, грохнули тактовый генератор..... Цитата(Dog Pawlowa @ Mar 2 2009, 17:18)  Кстати, zltigo, Вы, как автор at200 - сброс в режиме бутлоадера в какие моменты должен подаваться? Неважно, главное сниматься при установленной перемычке bootloader-а.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 2 2009, 16:31
|

Местный
  
Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484

|
Цитата(KRS @ Mar 2 2009, 19:10)  но бутлоадер как то умеет его отключать. Может, вот так: Код user.manual.lpc24xx.pdf: The ARM7TDMI-S debug architecture is described in detail in "ARM7TDMI-S (rev 4) Technical Reference Manual" (ARM DDI 0234A) published by ARM Limited.
|
|
|
|
|
Mar 4 2009, 11:08
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(VslavX @ Mar 2 2009, 22:26)  Попробуйте так - подайте '0' на порт 2.10 - процессор после сброса перейдет на NXP-шный загрузчик и будет в нем "сидеть". Спасибо за подсказку, запустил программку, дергающую флоу-контролем порта, вроде помогает. Последовательность такая: RTS ON, DTR ON-OFF (reset), запуск отладки, через пару секунд RTS OFF. Zltigo, есть шанс расширить функциональность a200 - войти в режим программирования, но не программировать  Пока все на уровне танца с бубном, конечно. Надеюсь, что это детские болезни накопления опыта.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Mar 4 2009, 12:09
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(zltigo @ Mar 4 2009, 15:24)  Дык, это вроде ключик -boot был всегда, или не работает? Дык в ключиках еще разбираться надо!  Ключик действительно есть, но сейчас проверить не могу. И еще - все равно нужен терминал, то есть востребована ситуация снятия ISP с продолжением работы в терминалке, а после -boot снять ISP можно только при выходе, не так ли?
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Mar 4 2009, 12:36
|

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

|
Цитата(Dog Pawlowa @ Mar 4 2009, 15:09)  И еще - все равно нужен терминал, то есть востребована ситуация снятия ISP с продолжением работы в терминалке, а после -boot снять ISP можно только при выходе, не так ли? Так это в консоле bootloader-a директивой G address куда угодно послать можно. Собственно так и происходит в AT200 после заливки - если есть в HEX файле адрес точки входа, то по нему и переходит, если нет - тогда уж сброс. Состояние перемычки, контрольной суммы векторов, естественно, при переходе совершенно безразлично.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 12 2009, 12:10
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
После часов работы с большим проектом в IAR+Jlink7, могу сделать некоторые выводы: Если JTAG не подключен, то все хорошо. Если JTAG подключен, и сделано несколько шагов по функции инициализации, то дальше все работает. Если эти пару метров не проползти, то контроллер где-то виснет  Аналогичный результат у коллег и на других экземплярах платы, и с клоном MT-link. Старт-кит на старой ревизии LPC2478 работает устойчиво. Жалко, что с самого начала не пошли по пути кросс-отладки на PC с частичной симуляцией железа.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Mar 13 2009, 00:43
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Dog Pawlowa @ Mar 12 2009, 14:10)  После часов работы с большим проектом в IAR+Jlink7, могу сделать некоторые выводы: Если JTAG не подключен, то все хорошо. Если JTAG подключен, и сделано несколько шагов по функции инициализации, то дальше все работает. Если эти пару метров не проползти, то контроллер где-то виснет В таких случаях надо проверить порядок инициализации всего. Или по крайней мере того, что подвержено Вашим изменениям. Старая версия осталась? diff сделать можно? В Atmel'ах натыкался на аналогичный симптом - если обращаться к периферии от которой отключен клок на момент обращения. В LM3S тоже натыкался на аналогичную батву, пошагово все ОК, делаешь Run - и глухой вис. Причина та же - обращение к регистрам периферии к которой еще не подан клок. вот, что я имею в виду (упрощенно): Код void UartInit(void) { SYSCTL_RCGC1_R |= SYSCTL_RCGC1_UART0; // enable peripheral clock for UART0
//<--- на первый взгляд тут все ОК, вначале включается клок, потом идет обращение к периферии, но // неучтено время подачи клока. // если между этими строчками вставить что-то еще весомое (напр инициализацию кольцевого буфера), // что даст требуемую задержку для подачи клока, то будет все в порядке. // если же между этими строками другого кода нет, тогда при "Run" - зависнет наглухо, // т.к. на момент выполнения второй строки клок еще к UARTу не подан. // при пошаговой отладке будет все ОК, т.к. требуемая задержка для подачи клока есть
UART0_CTL_R = (UART_CTL_RXE) | (UART_CTL_TXE) | (UART_CTL_UARTEN); // enable RX, TX and UART unit } Может и в LPC24xx есть нечто подобное? (просьба сильно не пинать - 24xx серию не пробовал пока). Цитата Жалко, что с самого начала не пошли по пути кросс-отладки на PC с частичной симуляцией железа. Да ерунда эта кросс отладка на PC, она бы наверняка ничего не дала в такой ситуации. Только нахлебались бы ошибок "симуляции", а в реальном железе получили бы ту же проблему. Двойная работа короче говоря.
|
|
|
|
|
Mar 13 2009, 10:23
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(defunct @ Mar 13 2009, 04:43)  В таких случаях надо проверить порядок инициализации всего. Или по крайней мере того, что подвержено Вашим изменениям. Старая версия осталась? diff сделать можно?
В Atmel'ах натыкался на аналогичный симптом - если обращаться к периферии от которой отключен клок на момент обращения. В LM3S тоже натыкался на аналогичную батву, пошагово все ОК, делаешь Run - и глухой вис. Причина та же - обращение к регистрам периферии к которой еще не подан клок. Спасибо за идею, где-то в районе инициализации клока и GPIO все и происходит. Действительно было обращение без инициализации клока. Убрал - стало устойчивее. Еще поиграюсь с задержками ну и некоторые тупые ожидания разблокирую по тайм-ауту с переинициализацией. Цитата(defunct @ Mar 13 2009, 04:43)  Да ерунда эта кросс отладка на PC, она бы наверняка ничего не дала в такой ситуации. Только нахлебались бы ошибок "симуляции", а в реальном железе получили бы ту же проблему. Двойная работа короче говоря. Тут еще и "чиста" софта полно - экраны, события, менюшки... Не связанного с железом, я такую отладку имел виду. Охренеть, простите. Висим. Кликаю на останов. По коду - не в прерывании, в начале подготовки дебажного сообщения проверяется полнота отправки предыдущего. Оно не отправляется - потому что в VICADDRESS вектор прерывания таймера (нулевой приоритет), а прерывание UARTа приоритет 1. Такого не может быть потому что не может быть никогда!
--------------------
Уходя, оставьте свет...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|