|
Cannot stop Arm device ! |
|
|
|
Oct 1 2013, 09:01
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Keil V4.20.03.0, JTAG адаптер JetLinck8, драйвер JLinkARM_V476b, лицензии установил. Отладочная плата SK-MLPC2478. В Options… Keil-а установлено J-LINK/J-TRACE. При любой попытке обратится к процессору, появляется ошибка, картинка в приложении. Изменение скорости «JTAG Speed» не помогает. Keil в «Build Output» пишет Цитата Load "E:\\ARM\\Test_2478\\Out\\Test_2478.AXF" VTarget = 3.274V Info: TotalIRLen = 4, IRPrint = 0x01 Info: Using DBGRQ to halt CPU Info: Resetting TRST in order to halt CPU ***JLink Error: Unable to halt CPU core Программой JLink.exe процессор не останавливается, «Reset target (RESET)» проходит. Как преодолеть?
Прикрепленные изображения
|
|
|
|
|
Oct 1 2013, 09:50
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
С настройкой pll мк до этого не игрались? Цитата(Oleg_IT @ Oct 1 2013, 13:01)  Как преодолеть? Как вариант - через заводской загрузчик по uart зашить исправную прогу. И продолжить свои опыты.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Oct 1 2013, 16:33
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(Lotor @ Oct 1 2013, 17:45)  Уверены, что Ваша заливаемая программа не уходит в "астрал" до того, как jtag адаптер сможет подключиться к мк?
Если хотите понять причину "астрала" и точно знаете, что до main стартовый код отрабатывает без проблем, то как враиант - вставьте задержку в несколько секунд перед выполнением Вашешо кода.
PS: и да, в памяти всплывает - в опциях jlink не надо ставить адаптивные клоки. И способ сброса в Кейле можно выбрать специально для Lpc. Вполне возможен "астрал", потому и нужен отладчик. Странно, что JTAG не пожет "победить" не правильную программу. Цитата(Mik174 @ Oct 1 2013, 20:24)  Неоднократно видел такое сообщение при банальном непропае на вновь собранных платах. МК: LPC2378 Возможно и так, но здесь не тот случай, плата не новая, минимум полтора года работает.
|
|
|
|
|
Oct 1 2013, 16:36
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(Oleg_IT @ Oct 1 2013, 20:30)  Странно, что JTAG не пожет "победить" не правильную программу. Когда Ваш lpc2478 сброшен, то модуль jtag, как и любая периферия, тоже сброшен. После выхода из состояния сброса Ваш отладчик должен восстановить контроль над мк. Это занимает определенное количество тактов. И пока эти такты тикуют, выполняется программа, зашитая в кристалл. Как-то так.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Oct 1 2013, 18:09
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(Oleg_IT @ Oct 1 2013, 12:44)  Нет, это тоже не мой случай, один раз вся связка сработала. Значит чтото с clock/PLL. Загнано высоко. Чето в подкорке вспоминается подобное..
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
Oct 2 2013, 07:26
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(Oleg_IT @ Oct 2 2013, 09:09)  раз повиснет на MAC1 = 0;, другой раз на чтении регистра PHY. Что Вы имеете ввиду под "повисло"? Теперь с помощью jtag можно определить куда именно попадаете. Если, например, в обработчик исключения Data Abort (DAbt_Handler), то надо анализировать регистр R14 (вычесть 8 и получить адрес инструкции, которая вызвала исключение).
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Oct 2 2013, 08:22
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(Lotor @ Oct 2 2013, 11:26)  Что Вы имеете ввиду под "повисло"? Теперь с помощью jtag можно определить куда именно попадаете.
Если, например, в обработчик исключения Data Abort (DAbt_Handler), то надо анализировать регистр R14 (вычесть 8 и получить адрес инструкции, которая вызвала исключение). Попадает программа в Код Vectors LDR PC, Reset_Addr Там и остаётся Цитата(Сергей Борщ @ Oct 2 2013, 10:01)  А вы перед переключением на высокую частоту выставляете такты задержки флеша? Без этого из флеша может читаться и исполняться что угодно. Пока есть команды в буфере предвыборки - все работает. Как пошли считанные после разгона - все: чудеса, исключения и т.д. Посмотрю, но я эти настройки вообще не трогаю, как автоматом генерится так и работает, в других программах на той же макетке проблем нет, графика работает, USB.
|
|
|
|
|
Oct 2 2013, 11:30
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(Oleg_IT @ Oct 2 2013, 12:22)  Попадает программа в Код Vectors LDR PC, Reset_Addr Там и остаётся это как?? стандартные заглушки для того же Abort - да, бесконечный цикл. Но программа-то по Reset уж явно не в цикле крутится...
|
|
|
|
|
Oct 2 2013, 15:54
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Oleg_IT @ Oct 2 2013, 10:22)  Попадает программа в CODE Vectors LDR PC, Reset_Addr Там и остаётся Вы смотрите в окне исходника или в окне дизассемблера? Уж по этой-то команде он должен уйти на Reset_Addr. А если не уходит - возможно произошел Remap и по этим адресам находится какой-то мусор, который процессор выполнить не может, а отладчик в окне исходника тупо показывает соответствующую этому адресу строку.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Oct 3 2013, 04:59
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Скорей всего отладчик показывает ерунду, после выполнения присвоения MAC1 = 0; в окне Command начинает выводиться ошибка Цитата ***JLink Error: CPU is not halted А после останова отладчика иногда Keil вообще виснет, но чаще выходит на строку Код Vectors LDR PC, Reset_Addr Затем или ни куда больше не идёт или входит в Reset_Handler и остаётся в цикле, см. рисунок, R3 = 0.
Эскизы прикрепленных изображений
|
|
|
|
|
Oct 3 2013, 08:07
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(Oleg_IT @ Oct 3 2013, 08:59)  Скорей всего отладчик показывает ерунду, после выполнения присвоения MAC1 = 0; в окне Command начинает выводиться ошибка А после останова отладчика иногда Keil вообще виснет, но чаще выходит на строку Код Vectors LDR PC, Reset_Addr Затем или ни куда больше не идёт или входит в Reset_Handler и остаётся в цикле, см. рисунок, R3 = 0. ну нифига себе reset_handler
|
|
|
|
|
Oct 3 2013, 10:48
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(toweroff @ Oct 3 2013, 13:47)  ну потому что Reset_Handler и PLL_Loop - это разные вещи  Цитата(KRS @ Oct 3 2013, 14:36)  А вы уверены что инструкция должна быть LDR PC, Reset_Addr а не LDR PC, =Reset_Addr Ну не знаю, я этот код не пмшу, он автоматически при создании проекта генерится. Начало кода CODE EXPORT Reset_Handler Reset_Handler
; Clock Setup ------------------------------------------------------------------
IF (:LNOT:(:DEF:NO_CLOCK_SETUP)):LAND:(CLOCK_SETUP != 0) LDR R0, =SCB_BASE MOV R1, #0xAA MOV R2, #0x55
; Configure and Enable PLL LDR R3, =SCS_Val ; Enable main oscillator STR R3, [R0, #SCS_OFS]
IF (SCS_Val:AND:OSCEN) != 0 OSC_Loop LDR R3, [R0, #SCS_OFS] ; Wait for main osc stabilize ANDS R3, R3, #OSCSTAT BEQ OSC_Loop ENDIF
LDR R3, =CLKSRCSEL_Val ; Select PLL source clock STR R3, [R0, #CLKSRCSEL_OFS] LDR R3, =PLLCFG_Val STR R3, [R0, #PLLCFG_OFS] STR R1, [R0, #PLLFEED_OFS] STR R2, [R0, #PLLFEED_OFS] MOV R3, #PLLCON_PLLE STR R3, [R0, #PLLCON_OFS] STR R1, [R0, #PLLFEED_OFS] STR R2, [R0, #PLLFEED_OFS]
IF (CLKSRCSEL_Val:AND:3) != 2 ; Wait until PLL Locked (if source is not RTC oscillator) PLL_Loop LDR R3, [R0, #PLLSTAT_OFS] ANDS R3, R3, #PLLSTAT_PLOCK BEQ PLL_Loop ELSE ; Wait at least 200 cycles (if source is RTC oscillator) MOV R3, #(200/4) PLL_Loop SUBS R3, R3, #1 BNE PLL_Loop ENDIF
M_N_Lock LDR R3, [R0, #PLLSTAT_OFS] LDR R4, =(PLLSTAT_M:OR:PLLSTAT_N) AND R3, R3, R4 LDR R4, =PLLCFG_Val EORS R3, R3, R4 BNE M_N_Lock "PLL и Wait_States для Flash" проверю.
Сообщение отредактировал IgorKossak - Oct 3 2013, 18:02
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
Oct 3 2013, 12:37
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(KRS @ Oct 3 2013, 16:08)  А Reset_Addr где? В стартовом коде есть строка аля Код Reset_Addr DCD Reset_Handler В Кейле "оно самО" все нормально генерит. =) А вот то, что lpc2478 при неправильной инициализации mac улетает в астрал - проходил сам. И обходил (согласно еррате вроде). Но было это пару лет назад, сингулярность дает о себе знать - не помню подробностей.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Oct 3 2013, 13:18
|

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

|
У меня для LPC2478 первые команды Код //----------------------------------------------------------------------------- //cleanup system MAMCR = 0; PCONP_bit.PCENET = 0; LCD_CTRL = 0; PCONP_bit.PCLCD = 0; if (PLLSTAT & (1 << 25)) { PLLCON = 1; /* Enable PLL, disconnected */ PLLFEED = 0xaa; PLLFEED = 0x55; } CLKSRCSEL = 0; SCS = 0x11;
//----------------------------------------------------------------------------- правда у меня на С все! В стартапе только стек устанавливается и переход на функцию инициализации.
|
|
|
|
|
Oct 3 2013, 18:02
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Победил я эту проблему. Аппаратная часть тут не причём, как и первоначальные настройки, которые, подчеркиваю, сам не пишу, верю автомату. Код имеет четыре варианта, сработал Код #define IAR_BOARD_LPC23XX 1 Почти во всём разобрался, за исключением двух вещей 1. Не пойму, что такое в регистре MADR поле 12:8 PHY ADDRESS, оно в примере или 0 или 1. Номер регистра и значения в нем понятно, посмотрел в даташите на микросхему PHY. А где брать PHY ADDRESS? 2. Что делать с рекомендацией errata.lpc2478_1.1.pdf? У меня сейчас без неё работает.
|
|
|
|
|
Oct 3 2013, 18:27
|
Знающий
   
Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840

|
Цитата(Oleg_IT @ Oct 3 2013, 22:02)  А где брать PHY ADDRESS? PHY ADDRESS - адрес Вашей мсх PHY, может быть 0-31, определяется, как правило, StrapPin. Для DP83848, например, по умолчанию 0х01. Ну и обычно определяется при поиске возможной PHY, благо первые 7 регистров стандартизированы. wiki MII
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|