Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Cannot stop Arm device !
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Oleg_IT
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)» проходит.
Как преодолеть?
Lotor
С настройкой pll мк до этого не игрались?
Цитата(Oleg_IT @ Oct 1 2013, 13:01) *
Как преодолеть?

Как вариант - через заводской загрузчик по uart зашить исправную прогу. И продолжить свои опыты.
Oleg_IT
pll не трогал.
В конфигураторе адаптера поставил USB Port 0 один раз прошилось и опять не хочет.
Oleg_IT
Через Flash Magic работает, но мне отладчик нужен.

Может у меня не правильная настройка адаптера, скорость, ресет… Они у меня от второго, попроще, адаптера стоят, у того программа слетела, уже второй раз, на восстановление отдал.

Lotor
Уверены, что Ваша заливаемая программа не уходит в "астрал" до того, как jtag адаптер сможет подключиться к мк?

Если хотите понять причину "астрала" и точно знаете, что до main стартовый код отрабатывает без проблем, то как враиант - вставьте задержку в несколько секунд перед выполнением Вашешо кода.

PS: и да, в памяти всплывает - в опциях jlink не надо ставить адаптивные клоки. И способ сброса в Кейле можно выбрать специально для Lpc.
Mik174
Неоднократно видел такое сообщение при банальном непропае на вновь собранных платах.
МК: LPC2378
Oleg_IT
Цитата(Lotor @ Oct 1 2013, 17:45) *
Уверены, что Ваша заливаемая программа не уходит в "астрал" до того, как jtag адаптер сможет подключиться к мк?

Если хотите понять причину "астрала" и точно знаете, что до main стартовый код отрабатывает без проблем, то как враиант - вставьте задержку в несколько секунд перед выполнением Вашешо кода.

PS: и да, в памяти всплывает - в опциях jlink не надо ставить адаптивные клоки. И способ сброса в Кейле можно выбрать специально для Lpc.

Вполне возможен "астрал", потому и нужен отладчик. Странно, что JTAG не пожет "победить" не правильную программу.

Цитата(Mik174 @ Oct 1 2013, 20:24) *
Неоднократно видел такое сообщение при банальном непропае на вновь собранных платах.
МК: LPC2378

Возможно и так, но здесь не тот случай, плата не новая, минимум полтора года работает.
A. Fig Lee
Может пины переопределены и ЖиТаг законнектится не может?
Lotor
Цитата(Oleg_IT @ Oct 1 2013, 20:30) *
Странно, что JTAG не пожет "победить" не правильную программу.

Когда Ваш lpc2478 сброшен, то модуль jtag, как и любая периферия, тоже сброшен. После выхода из состояния сброса Ваш отладчик должен восстановить контроль над мк. Это занимает определенное количество тактов. И пока эти такты тикуют, выполняется программа, зашитая в кристалл. Как-то так.
Oleg_IT
Цитата(A. Fig Lee @ Oct 1 2013, 20:33) *
Может пины переопределены и ЖиТаг законнектится не может?

Нет, это тоже не мой случай, один раз вся связка сработала.
A. Fig Lee
Цитата(Oleg_IT @ Oct 1 2013, 12:44) *
Нет, это тоже не мой случай, один раз вся связка сработала.

Значит чтото с clock/PLL.
Загнано высоко.
Чето в подкорке вспоминается подобное..
toweroff
Цитата(A. Fig Lee @ Oct 1 2013, 22:09) *
Значит чтото с clock/PLL.
Загнано высоко.
Чето в подкорке вспоминается подобное..

подобное было, но не с 7, а с 9 ядром. JLink ни в какую не хотел связываться. В результате через JFlashARM и руками выставленный клок в 5 КГц (!!!) удалось связаться и стереть кристалл
Проблема действительно, после анализа кода, была в настройках PLL - банально одна цифра нажата была два раза, в результате чего множитель взлетел в космос
Oleg_IT
В моём случае "виноват" сам код, поставил задержку при старте и 500 кГц в JTAG-е и всё заработало.

Вопрос теперь в другом, не ясно откуда "астрал" берётся. Мучаю код с EMAC, раз повиснет на MAC1 = 0;, другой раз на чтении регистра PHY.
Сергей Борщ
QUOTE (Oleg_IT @ Oct 2 2013, 07:09) *
раз повиснет на MAC1 = 0;, другой раз на чтении регистра PHY.
А вы перед переключением на высокую частоту выставляете такты задержки флеша? Без этого из флеша может читаться и исполняться что угодно. Пока есть команды в буфере предвыборки - все работает. Как пошли считанные после разгона - все: чудеса, исключения и т.д.
сарматъ
может мне у себя тоже увеличить задержку флеш и виснуть перестанет?

сейчас вот это заклинание работает
/* Configure Flash prefetch, Instruction cache, Data cache and wait state */
FLASH->ACR = FLASH_ACR_PRFTEN |FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;
Сергей Борщ
QUOTE (сарматъ @ Oct 2 2013, 08:33) *
может мне у себя тоже увеличить задержку флеш и виснуть перестанет?
Я не люблю гадать. Вам лучше знать, на какой частоте у вас работает ядро. Откройте описание (flash programming manual на ваш контроллер) и посмотрите, сколько тактов ожидания производитель требует для флеши на этой частоте. Меньше - нельзя, больше - не нужно.
Lotor
Цитата(Oleg_IT @ Oct 2 2013, 09:09) *
раз повиснет на MAC1 = 0;, другой раз на чтении регистра PHY.

Что Вы имеете ввиду под "повисло"? Теперь с помощью jtag можно определить куда именно попадаете.

Если, например, в обработчик исключения Data Abort (DAbt_Handler), то надо анализировать регистр R14 (вычесть 8 и получить адрес инструкции, которая вызвала исключение).
Oleg_IT
Цитата(Lotor @ Oct 2 2013, 11:26) *
Что Вы имеете ввиду под "повисло"? Теперь с помощью jtag можно определить куда именно попадаете.

Если, например, в обработчик исключения Data Abort (DAbt_Handler), то надо анализировать регистр R14 (вычесть 8 и получить адрес инструкции, которая вызвала исключение).

Попадает программа в
Код
Vectors         LDR     PC, Reset_Addr
Там и остаётся

Цитата(Сергей Борщ @ Oct 2 2013, 10:01) *
А вы перед переключением на высокую частоту выставляете такты задержки флеша? Без этого из флеша может читаться и исполняться что угодно. Пока есть команды в буфере предвыборки - все работает. Как пошли считанные после разгона - все: чудеса, исключения и т.д.

Посмотрю, но я эти настройки вообще не трогаю, как автоматом генерится так и работает, в других программах на той же макетке проблем нет, графика работает, USB.
toweroff
Цитата(Oleg_IT @ Oct 2 2013, 12:22) *
Попадает программа в
Код
Vectors         LDR     PC, Reset_Addr
Там и остаётся

это как??

стандартные заглушки для того же Abort - да, бесконечный цикл. Но программа-то по Reset уж явно не в цикле крутится...


Сергей Борщ
QUOTE (Oleg_IT @ Oct 2 2013, 10:22) *
Попадает программа в
CODE
Vectors         LDR     PC, Reset_Addr
Там и остаётся
Вы смотрите в окне исходника или в окне дизассемблера? Уж по этой-то команде он должен уйти на Reset_Addr. А если не уходит - возможно произошел Remap и по этим адресам находится какой-то мусор, который процессор выполнить не может, а отладчик в окне исходника тупо показывает соответствующую этому адресу строку.
Oleg_IT
Скорей всего отладчик показывает ерунду, после выполнения присвоения MAC1 = 0; в окне Command начинает выводиться ошибка
Цитата
***JLink Error: CPU is not halted

А после останова отладчика иногда Keil вообще виснет, но чаще выходит на строку
Код
Vectors         LDR     PC, Reset_Addr

Затем или ни куда больше не идёт или входит в Reset_Handler и остаётся в цикле, см. рисунок, R3 = 0.
Oleg_IT
На рисунке настройки PLL в моей программе
toweroff
Цитата(Oleg_IT @ Oct 3 2013, 08:59) *
Скорей всего отладчик показывает ерунду, после выполнения присвоения MAC1 = 0; в окне Command начинает выводиться ошибка

А после останова отладчика иногда Keil вообще виснет, но чаще выходит на строку
Код
Vectors         LDR     PC, Reset_Addr

Затем или ни куда больше не идёт или входит в Reset_Handler и остаётся в цикле, см. рисунок, R3 = 0.

ну нифига себе reset_handler wacko.gif
Oleg_IT
Цитата(toweroff @ Oct 3 2013, 12:07) *
ну нифига себе reset_handler wacko.gif

Мжно подробнее, а то не пойму впечатлениеsm.gif

Я думаю отладчик при крахе уже не имеет доступа к ARM-у и делает что-то своё.

Закрыл я доработку по рекомендации errata.lpc2478_1.1.pdf виснуть на MAC1 = 0;, программа всё равно не работает. Нужно ли это изменение или нет???
toweroff
Цитата(Oleg_IT @ Oct 3 2013, 12:39) *
Мжно подробнее, а то не пойму впечатление sm.gif

ну потому что Reset_Handler и PLL_Loop - это разные вещи sm.gif

общее впечатление - проверить настройки PLL и Wait_States для Flash, это уже выше упоминали




И еще. Лично натыкался на глючное поведение отладчика, пока не распаял все требуемые резисторы на JTAG
KRS
А вы уверены что инструкция должна быть
LDR PC, Reset_Addr
а не
LDR PC, =Reset_Addr
Oleg_IT
Цитата(toweroff @ Oct 3 2013, 13:47) *
ну потому что Reset_Handler и PLL_Loop - это разные вещи sm.gif

Цитата(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" проверю.
KRS
Цитата(Oleg_IT @ Oct 3 2013, 14:48) *
Ну не знаю, я этот код не пмшу, он автоматически при создании проекта генерится.


А Reset_Addr где?

И вообще нафига на асме инициализацию PLL делать? Это все на С прекрасно пишется...
Сергей Борщ
QUOTE (KRS @ Oct 3 2013, 14:08) *
Это все на С прекрасно пишется...
Так это ж писать надо! А тут галочки расставил, и "оно самО".
Lotor
Цитата(KRS @ Oct 3 2013, 16:08) *
А Reset_Addr где?

В стартовом коде есть строка аля
Код
Reset_Addr      DCD     Reset_Handler


В Кейле "оно самО" все нормально генерит. =)
А вот то, что lpc2478 при неправильной инициализации mac улетает в астрал - проходил сам. И обходил (согласно еррате вроде). Но было это пару лет назад, сингулярность дает о себе знать - не помню подробностей.
KRS
У меня для 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;

//-----------------------------------------------------------------------------


правда у меня на С все! В стартапе только стек устанавливается и переход на функцию инициализации.
toweroff
Цитата(KRS @ Oct 3 2013, 17:18) *
правда у меня на С все! В стартапе только стек устанавливается и переход на функцию инициализации.

аналогично, вектора, стеки и прыжок в __main
Oleg_IT
Победил я эту проблему. Аппаратная часть тут не причём, как и первоначальные настройки, которые, подчеркиваю, сам не пишу, верю автомату. Код имеет четыре варианта, сработал
Код
#define IAR_BOARD_LPC23XX      1

Почти во всём разобрался, за исключением двух вещей
1. Не пойму, что такое в регистре MADR поле 12:8 PHY ADDRESS, оно в примере или 0 или 1. Номер регистра и значения в нем понятно, посмотрел в даташите на микросхему PHY. А где брать PHY ADDRESS?
2. Что делать с рекомендацией errata.lpc2478_1.1.pdf? У меня сейчас без неё работает.

DmitryM
Цитата(Oleg_IT @ Oct 3 2013, 22:02) *
А где брать PHY ADDRESS?

PHY ADDRESS - адрес Вашей мсх PHY, может быть 0-31, определяется, как правило, StrapPin. Для DP83848, например, по умолчанию 0х01.
Ну и обычно определяется при поиске возможной PHY, благо первые 7 регистров стандартизированы.
wiki MII
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.