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

 
 
 
Reply to this topicStart new topic
> Почему LPC2478 отказывается программироваться через JTAG?, Ничего не понимаю в этих АРМах :(
Dog Pawlowa
сообщение Mar 2 2009, 14:18
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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) // если нажать - продолжить.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 2 2009, 14:40
Сообщение #2


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

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



А может вы случайно JTAG отключили, ну там настройки GPIO например (особенно регистры PINSEL)
Go to the top of the page
 
+Quote Post
meister
сообщение Mar 2 2009, 14:50
Сообщение #3


Местный
***

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



Цитата(KRS @ Mar 2 2009, 18:40) *
А может вы случайно JTAG отключили, ну там настройки GPIO например (особенно регистры PINSEL)


Можно узнать, как с помощью регистров PINSEL отключить JTAG? ETM можно, JTAG не нашел.
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 2 2009, 15:10
Сообщение #4


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

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



Цитата(meister @ Mar 2 2009, 17:50) *
Можно узнать, как с помощью регистров PINSEL отключить JTAG? ETM можно, JTAG не нашел.

да у 24xx действительно PINSEL не влияет на ноги JTAG.
но бутлоадер как то умеет его отключать. на прежних чипах это как раз делалост через PINSEL
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 2 2009, 15:35
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Программа виснет где-то в дебрях инициализации efsl, буду разбираться почему и делать дополнительные проверки.

Но ситуация с невозможностью возобновления работы по JTAG без бутлодера непонятна и весьма огорчает.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 2 2009, 16:09
Сообщение #6


Гуру
******

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



Цитата(KRS @ Mar 2 2009, 17:40) *
А может вы случайно JTAG отключили...

Для LPC21xx где-то в AN было документировано управление активизацией JTAG - на первых порах даже закладывал возможность "секретной" командой с консоли активизировать заблокированный в bootloader JTAG - потом как-то все это похерил за ненадобнстью и сейчас уже в текущих исходниках не нашел sad.gif. Действительно, возможно на этот регистр наступили. А может и все много проще, например, грохнули тактовый генератор.....



Цитата(Dog Pawlowa @ Mar 2 2009, 17:18) *
Кстати, zltigo, Вы, как автор at200 - сброс в режиме бутлоадера в какие моменты должен подаваться?

Неважно, главное сниматься при установленной перемычке bootloader-а.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
meister
сообщение Mar 2 2009, 16:31
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 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.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Mar 2 2009, 18:26
Сообщение #8


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Попробуйте так - подайте '0' на порт 2.10 - процессор после сброса перейдет на NXP-шный загрузчик и будет в нем "сидеть". Если специально CRP не активировали то JTAG должен "откликнуться". Я таким образом решал проблему "отваливания" JTAG-а при активации энергосберегающего режима Idle на LPC23xx.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 4 2009, 11:08
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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 - войти в режим программирования, но не программировать smile.gif
Пока все на уровне танца с бубном, конечно. Надеюсь, что это детские болезни накопления опыта.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 4 2009, 11:24
Сообщение #10


Гуру
******

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



Цитата(Dog Pawlowa @ Mar 4 2009, 14:08) *
Zltigo, есть шанс расширить функциональность a200 - войти в режим программирования, но не программировать smile.gif

Дык, это вроде ключик -boot был всегда, или не работает?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 4 2009, 12:09
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(zltigo @ Mar 4 2009, 15:24) *
Дык, это вроде ключик -boot был всегда, или не работает?

Дык в ключиках еще разбираться надо! smile.gif
Ключик действительно есть, но сейчас проверить не могу.
И еще - все равно нужен терминал, то есть востребована ситуация снятия ISP с продолжением работы в терминалке, а после -boot снять ISP можно только при выходе, не так ли?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 4 2009, 12:36
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 12 2009, 12:10
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



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


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 13 2009, 00:43
Сообщение #14


кекс
******

Группа: Свой
Сообщений: 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, она бы наверняка ничего не дала в такой ситуации. Только нахлебались бы ошибок "симуляции", а в реальном железе получили бы ту же проблему.
Двойная работа короче говоря.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 13 2009, 10:23
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 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.
Такого не может быть потому что не может быть никогда!


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

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

 


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


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