Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: купил MT-link...
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Kail
Плата olimex lpc2106. Mt-link V.5. Все дрова поставил, соотвественно инструкции для j-link. dll использую 3.48 от DASM'a, недавно выложенные здесь.
Отладка в Кроссворкс работает без проблем.
Но есть проблемы при отладке через rdi в Keil. Выдается уже замечанная здесь ошибка Write to IR: Expected 0x1, got 0x7 (TAP command: 2) @ Off 0x5.
Путем работы с консольной прогой Jlinkarm выяснил, что проблема - некоректная отработка комманды на софр ресест. Когда жму r (комманда reset) - процессор отваливается и установить с ним связь можно только выдернув из usb mt-link и включив обратно. Пробовал менять скорость - не помогате, пробывал ставить adaptive clocking (вроде lpc2106 умеет это, по крайней мере Jlinkarm это сказал). Пробывал менять usb шнур -ничего не помогает.

Если в настройках rdi драйвера, отключить reset процессора, то прошивка заливается, но сразу же на автомате выполняется код до конца, причем breakpoint'ы не срабатывают.

и еще - почему-то все время горит зеленый светодиод - busy, а красный ready изредка моргает. При общении с процессором красный начинает моргать активнее. Такое ощющение, что при сборке напутали и должно быть наоборот. Или так задамано и я не прав?
zltigo
Цитата(Kail @ Feb 7 2007, 09:44) *
Такое ощющение, что при сборке напутали и должно быть наоборот. Или так задамано и я не прав?

Напутали при маркировке светодиодов.
На остальные вопросы ответов нет. Свою борьбу уже описывал sad.gif.
DASM
Светодиоды да, напутал. Но вроде никого не напрягало. С reset - ом сложнее. Какой тип reset стоит ? Там их несколько.. Вообще - 2106 - не самый приятный проц по JTAG , у меня он тоже то так, то этак работал. С новыми сериями все намного проще. Ну чтобы меня совсем ногами не принали, напомню, что все идущие сейчас линки - полные аналоги, только тип выходного буфера иной. Поставьте hardware reset и задержку 250 мс после него. Впрочем не уверен что поможет
Kail
Цитата(DASM @ Feb 7 2007, 12:00) *
Светодиоды да, напутал. Но вроде никого не напрягало. С reset - ом сложнее. Какой тип reset стоит ? Там их несколько.. Вообще - 2106 - не самый приятный проц по JTAG , у меня он тоже то так, то этак работал. С новыми сериями все намного проще. Ну чтобы меня совсем ногами не принали, напомню, что все идущие сейчас линки - полные аналоги, только тип выходного буфера иной. Поставьте hardware reset и задержку 250 мс после него. Впрочем не уверен что поможет

Собственно пробывал все ресеты. С задержками особо не игрался, так как понятия не имею зачем они нужны. По идее ведь jtag должен перехватить работу процессора как можно скорее, пока тот не успел натворить всякого непонятного.
Вообще решение есть, ведь кроссворку удается рестартануть проц. Попробую покапаться в его функциях инициализации jlink, может там найду чего-нить.
Кстати может эта инфа поможет (сам я про аппаратное исполнение jtag мало что понимаю):
До рестарта процессора на ноге tRST=1, это пишет jlinkarm, а после ресета, он пишет, что находит не тот уровень напряжения на этой ноге (точно не помню, но по-моему находит НИЗКИЙ, а хочет ВЫСОКИЙ, или наоборот, но в общем не тот уровень) и просит проверить hardware.
DASM
а может его и правда проверить :-) Схемку подключения не покажите ?
Kail
Цитата(DASM @ Feb 7 2007, 12:30) *
а может его и правда проверить :-) Схемку подключения не покажите ?

Вот:
http://olimex.com/dev/images/lpc-p2106-sch.gif
Alex03
На ресете RC с постоянной времени 1мс.
Т.е. после снятия RST проц воспримет это снятие ресета через 1-3мс. (где там эта граница между 0.8 и 2В). Мож тут собачка порылась?
В CW TargetInterface.resetAndStop(50);
Кстати как народ поступает с теми-же супервизорами питания/ресета которые генерят ресет например по 100мс.?
Kail
В общем целый день мучился с отладчиком, а "воз и ныне там".
Проверил дорожки на плате - hardware problem нету, все разведено правильно и соотествует схеме. Обрывов дороже нету, о чем можно убедиться работой кросворка.

Проект кроссворка содержит следующие функции инициализации jtag:
function LPC210X_Reset()
{
TargetInterface.setNSRST(0);
TargetInterface.setNSRST(1);
TargetInterface.delay(100);
TargetInterface.trst();
TargetInterface.setICEBreakerBreakpoint(0, 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x100, 0xF7);
TargetInterface.waitForDebugState(1000);
TargetInterface.getICEBreakerRegister(5); /* Clear out Debug Comms Data */
TargetInterface.pokeWord(0xE0000000, 0); /* Reset Watchdog */
TargetInterface.pokeWord(0xE0028008, 0); /* Reset IODIR */
TargetInterface.pokeWord(0xE002C000, 0); /* Reset PINSEL0 */
TargetInterface.pokeWord(0xE01FC000, 0); /* Reset MAMCR */
TargetInterface.pokeWord(0xE01FC080, 0); /* Reset PLL */
TargetInterface.pokeWord(0xE01FC08C, 0xAA); /* Feed PLL */
TargetInterface.pokeWord(0xE01FC08C, 0x55); /* Feed PLL */
TargetInterface.pokeWord(0xFFFFF014, 0xFFFFFFFF); /* Disable all interrupts */
TargetInterface.setICEBreakerBreakpoint(0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000, 0x00);
}
Я весь инет перерыл пытась найти аналогичный .setup файл для jlinkrdi под lpc2106. Написал бы и сам, но не увидел в коммандах макрофайла аналога вот этой функции: TargetInterface.trst(); - сброс TAP, кажется мне тут собака порылась.
Либо же нужно отключать wdt, pll и прочее...
Обидно в общем, мучился с вигглером, купил девайс вроде качественный, результат нулевой. Причем проблема эта с Bad jtag communication действительно не mt-link, a j-link и хоть бы кто толковое что про это сказал. Все англоязычные источники облазил.

Кстати когда связь устанавливается и все хоршо, состояние пинов следующее:
TCK=1 TDI=0 TDO=0 TMS=0 TRES=1 TRST=1
А после ресета, следующее:
J-Link>rx 250
Reset delay: 250 ms
Reset type NORMAL: Using RESET pin, halting CPU after Reset
Info: Resetting target using RESET pin
Info: Halting CPU core
Info: Resetting target using RESET pin
Info: Halting CPU core

****** Error: Received 0xFFFFFFFF as core Id. No communication with core.
Bad JTAG communication: Write to IR: Expected 0x1, got 0x7 (TAP Command : 2) @ O
ff 0x5.

J-Link>st
VTarget=3.293V
ITarget=0mA
TCK=1 TDI=0 TDO=1 TMS=0 TRES=1 TRST=1

то есть активна линия TDO=1, что это может значить? Хорошего или плохого?

Надежда на решение проблемы тает с каждым часом sad.gif
Сергей Борщ
Цитата(Kail @ Feb 7 2007, 22:49) *
Bad JTAG communication: Write to IR: Expected 0x1, got 0x7 (TAP Command : 2) @ Off 0x5.
Похожее сообщение мне выдает ИАР если в программе запускается WatchDog. Естественно, что пока ядро стоит на точке останова собака срабатывает и переводит его в неожиданное для отладчика состояние. Приходится на время отладки собаку отключать. Ваш кристалл точно чистый или в нем может быть какая-то старая прошивка с инициализацией собаки? Может попробовать его включить в режиме загрузчика (P0.14 = 0)?
andrvisht
Заказал недавно MT-LINK новой версии.
Проблемы очень похожие на описанные автором поста.
При работе с новыми драйверами RDI равно как и с J-LINK от IAR наблюдается нижеследующее:

Процесс загрузки начинается с вывода окна сообщения
There were warnings during download, see log Window
и программа сразу идет в работу. При остановке отладки (пауза) окно CSTACK переполнено, да
Код
Wed Apr 04 15:15:44 2007: Warning: Target inconsistency detected in Memory range 0x00008114-0x00008197
Wed Apr 04 15:15:44 2007: Warning: Target inconsistency detected in Memory range 0x00008000-0x0000806F
Wed Apr 04 15:15:44 2007: Warning: Target inconsistency detected in Memory range 0x00008198-0x000081BB
Wed Apr 04 15:15:44 2007: Warning: Target inconsistency detected in Memory range 0x00008220-0x0000822B


Если убрать галочку Run to Main, то отладчик останавливается на __programm_start но все остальное также.
Как с этим бороться ?
DASM
А какой процессор ? Почему флеш стоит с адресов 0x8000 ? Очень похоже на дефолтные настройки Keil уж не помню для какого дефолтного проца. Глядите примеры в Keil
Сергей Борщ
Цитата(DASM @ Apr 4 2007, 14:50) *
А какой процессор ? Почему флеш стоит с адресов 0x8000 ? Очень похоже на дефолтные настройки Keil уж не помню для какого дефолтного проца.
Угу. Только не кейл а ИАР, настройки дефолтные из lnkarm.xcl Это раз. Второе - скорее всего не включен собственно флеш-загрузчик (Проверить тип процессора в Project->Options->GeneralOptions->processor variant и включение загрузчика в Project->Options->Debugger->Download).
Вот тут про настройку проекта подробнее
andrvisht
Цитата(Сергей Борщ @ Apr 4 2007, 16:09) *
Угу. Только не кейл а ИАР, настройки дефолтные из lnkarm.xcl Это раз. Второе - скорее всего не включен собственно флеш-загрузчик (Проверить тип процессора в Project->Options->GeneralOptions->processor variant и включение загрузчика в Project->Options->Debugger->Download).
Вот тут про настройку проекта подробнее

Да, к сожалению, а может и к счастью, у меня IAR. Проц LPC2294 но демоборде от Olimex
Спасибо за ссылку, одна проблема решилась. Стало работать при отладке кода в RAM.
для отладки во flash указал phytec_pcm023_iflash.xcl ну и далее по пунктам 6.1 и 7.2.
Проблемы со CSTACK остались.
Код
Wed Apr 04 17:00:08 2007: Sign on message from RDI driver:
Segger JLink ARM JTAG
Wed Apr 04 17:00:08 2007: 10641 bytes downloaded and verified (26.58 Kbytes/sec)
Wed Apr 04 17:00:08 2007: Warning: Target inconsistency detected in Memory range 0x00000154-0x000001D7
Wed Apr 04 17:00:08 2007: Warning: Target inconsistency detected in Memory range 0x00000040-0x000000AF
Wed Apr 04 17:00:08 2007: Warning: Target inconsistency detected in Memory range 0x000001D8-0x000001FB
Wed Apr 04 17:00:08 2007: Warning: Target inconsistency detected in Memory range 0x0000025C-0x00000267
Wed Apr 04 17:00:08 2007: Warning: Target inconsistency detected in Memory range 0x000001FC-0x0000024B
Wed Apr 04 17:00:08 2007: Warning: Target inconsistency detected at Memory address 0x00000020
Wed Apr 04 17:00:08 2007: Warning: Target inconsistency detected in Memory range 0x000000B0-0x00000153
Wed Apr 04 17:00:08 2007: Warning: Target inconsistency detected in Memory range 0x0000024C-0x0000025B
Wed Apr 04 17:00:08 2007: There were warnings during download, see Log Window
Wed Apr 04 17:00:10 2007: Loaded debugee: E:\PJT\asa\C-Soft\Debug\Exe\H2294.d79
Wed Apr 04 17:00:10 2007: Target reset
Wed Apr 04 17:00:10 2007: A breakpoint has been set on a SWI instruction at 0x000001D8
The interrupt handler reading the SWI number field, will read incorrect value
Avoid setting breakpoints on these instructions
Wed Apr 04 17:00:12 2007: The stack 'CSTACK' is filled to 100% (8192 bytes used out of 8192). The warning threshold is set to 90%.
Wed Apr 04 17:00:12 2007: The stack pointer for stack 'IRQ_STACK' (currently 0x40001310) is outside the stack range (0x40002000 to 0x40002100)
DASM
RDI настраивается отдельно - там надо тип процессора выставить и частоту.
Кстати что-то не припомню там таких сообщений. Загрузку флеш в опциях САМОГО IAR - отключить. Но выставить галки Flash download в RDI
andrvisht
Цитата(DASM @ Apr 4 2007, 17:20) *
RDI настраивается отдельно - там надо тип процессора выставить и частоту.

а там это где ?
и даже если переключиться на J_LINK
результат неизменный
Код
Wed Apr 04 17:25:48 2007: Logging to file: C:\Program Files\IAR Systems\Embedded Workbench 4.0 Evaluation\ARM\cspycomm.log
Wed Apr 04 17:25:48 2007: DLL version: V3.68b, compiled Mar 30 2007 16:52:49
Wed Apr 04 17:25:48 2007: Firmware: J-Link compiled Mar 22 2007 16:08:22 ARM Rev.5
Wed Apr 04 17:25:48 2007: JTAG speed is initially set to: 32 kHz
Wed Apr 04 17:25:48 2007: Halting CPU core
Wed Apr 04 17:25:48 2007: Software reset was performed
Wed Apr 04 17:25:48 2007: Initial reset was performed
Wed Apr 04 17:25:48 2007: J-Link found 1 JTAG device. ARM core Id: 4F1F0F0F(ARM7)
Wed Apr 04 17:25:48 2007: Device at TAP0 selected
Wed Apr 04 17:25:48 2007: RTCK reaction time is approx. 126ns
Wed Apr 04 17:25:48 2007: Auto JTAG speed: Adaptive
Wed Apr 04 17:25:48 2007: 560 bytes downloaded and verified (1.46 Kbytes/sec)
Wed Apr 04 17:25:48 2007: Warning:
Verify error at address 0x00000154, target byte: 0x00, byte in file: 0x01
Wed Apr 04 17:25:48 2007: Warning:
Verify error at address 0x00000155, target byte: 0x20, byte in file: 0x00
Wed Apr 04 17:25:48 2007: Warning:
Verify error at address 0x00000156, target byte: 0x00, byte in file: 0x50

причем в стеке лежит в основном CDCDCDCDCDCDCDCD ....

Нашел по поводу RDI? настроил под свой процессор. Вроде все нормально, тока не работает код smile.gif
причем код самый простейший - мограние диодом.
Пошел искать что не так ...
DASM
Там - это в настройках RDI .
vromanov
Как там, адаптеры не появились?
andrvisht
нашел sad.gif
почему то умерла нога процессора. Никто над ней вроде не издевался, светодиод был анодом на питании и через 100 Ом на ноге P0.30.
Если переставить ногу на P30.0 все как то работает.
Итак удалось запустить в режиме J-LINK для ОЗУ и в RDI из ОЗУ и из FLASH.
в режиме J-LINK из FLASH
Код
Wed Apr 04 18:32:29 2007: There were warnings during download of FLASH loader, see Log Window
Wed Apr 04 18:32:36 2007: Failed to load flash loader: C:\Program Files\IAR Systems\Embedded Workbench 4.0 Evaluation\ARM\config\flashloader\NXP\FlashNXPLPC256k.d79
Wed Apr 04 18:32:37 2007: PID changed. Old PID = 0x000009A8, Current PID = 0x00000980

Проблемы были в установках xcl файлов и в отдельных Настройках RDI.

Еще вопрос :
не нашел функции типа __delay_cycles();
её нет или она как то иначе называется ?
DASM
по-моему это встроенная ф-ция, включается через что-то типа #include<inarm.h>
Сергей Борщ
Цитата(&-rey @ Apr 4 2007, 17:33) *
в режиме J-LINK из FLASH
Код
Wed Apr 04 18:32:37 2007: PID changed. Old PID = 0x000009A8, Current PID = 0x00000980

Если победите - не забудьте сообщить в чем было дело. Сам еще не сталкивался, но если вдруг - хочется иметь "записанное на корочку" решение.
Цитата(&-rey @ Apr 4 2007, 17:33) *
не нашел функции типа __delay_cycles();
её нет или она как то иначе называется ?
Нет. Дело в том, что у ARM время выполнения инструкции отличается в зависимости от места расположения (ОЗУ/флеш) и от конкретного производителя. Напишите свою:
Код
#define CORE_CLK (7372800UL * 5)   // частота ядра
#define MS  * CORE_CLK / 1000 / 7   // 7 - подобрать.
static delay_cycles(uint32_t cycles)
{
    volatile uint32_t i = cycles;
    while(--cycles);
}
пользование:
delay_cycles(100 MS);
andrvisht
Цитата(DASM @ Apr 4 2007, 18:40) *
по-моему это встроенная ф-ция, включается через что-то типа #include<inarm.h>

Это да, но там её нет. Как и других к которым я привык на AVR, но это ARM и надо привыкать smile.gif
Цитата(Сергей Борщ @ Apr 4 2007, 20:16) *
Если победите - не забудьте сообщить в чем было дело. Сам еще не сталкивался, но если вдруг - хочется иметь "записанное на корочку" решение.Нет. Дело в том, что у ARM время выполнения инструкции отличается в зависимости от места расположения (ОЗУ/флеш) и от конкретного производителя.

А вот с утра загрузил и все заработало, вчерашней ошибки от J-LINK нет sad.gif
Видимо я замучал вчера USB, и нужна была перезагрузка. Если вдруг попаду на что то подобное то напишу как создать данную проблему.

Насчет функции задержки все ясно, по крайней мере после таких обьяснений не так обидно что её нет.
Не знаю что на счет такой функции в Keil, пока остановился на IAR так как среда привычная, да и трафик пока 60 метров не потянет sad.gif

Спасибо всем, по крайней мере теперь есть от чего идти дальше, жаль тока безвременно ушедшую ногу ...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.