Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CMSIS-DAP
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
KRS
ARM удумал новый отладочный интерфейс. Причем даже не отладочный интерфейс, а прошивку на базе CMSIS для железного отладчика который через RDDI-DAP dll общается с дебагером на хосте.

Цитата
Benefits of CMSIS-DAP
  • Provides a standardized interface for debuggers.
  • Interfaces to Keil MDK and ARM DS-5 are already available; adaption for 3rd party debuggers in preparation.
  • Access to CoreSight registers of all Cortex processor architectures (Cortex-A/R/M).
  • Connects via 5-pin JTAG or 2-pin Serial Wire Debug (SWD).
  • Supports multi-core debugging.
  • Easy to deploy to Debug Units based on Cortex-M microcontrollers.
  • Debug Unit may be integrated on an evaluation board.
  • USB using HID (Human Interface Device) driver class that avoids driver installation on host PC.


проект в стадии: Version 0.01 - Beta (даты файлов 19.06.2012)

ЗЫ ознакомится можно в местных закромах.
AlexandrY
Цитата(KRS @ Sep 20 2012, 21:47) *
ARM удумал новый отладочный интерфейс. Причем даже не отладочный интерфейс, а прошивку на базе CMSIS для железного отладчика который через RDDI-DAP dll общается с дебагером на хосте.


Отличная новость.
Как понимаю, дело обстоит так, что теперь можно приобрести плату LPC-Link-II , например в составе LPCXpresso, залить туда прошивку из CMSIS-DAP и получить JTAG отладчик круче чем J-Link или его клоны?

Странно только, что вместе с исходниками не дают схемы того самого LPC-Link-II.

Впрочем имея исходники никто не мешает сделать свой JTAG отладчик на любом микроконтроллере.
Ну щас гонка копеечных JTAG-ов начнется! wink.gif
goodwin
Оптимально LPC1343. ROM HID можно заюзать, да и прошиву первоначально залить через встроенный usb загрузчик.

Только вот быстрее J-Link оно вряд ли будет. У J-Link годами наработанная поддержка, исполняемый код в отлаживаемых контроллерах, "аппаратный" JTAG и оптимизированный BULK. А здесь похоже пока только ногодрыг по HID USB. Ну и только Keil (хотя это будет недолго).
KRS
Цитата(AlexandrY @ Sep 21 2012, 09:20) *
Отличная новость.
Как понимаю, дело обстоит так, что теперь можно приобрести плату LPC-Link-II , например в составе LPCXpresso, залить туда прошивку из CMSIS-DAP и получить JTAG отладчик круче чем J-Link или его клоны?

тут весь вопрос в скорости, причем даже не самого "ногодрыганья" для JTAG или SWD, а именно обмена с компом. Т.к. USB еще и HID если не будет нормальной очереди команд каждая транзакция по USB в лучшем случае 2 ms.

Например на Beaglebone установлен XDS100v2 (просто FTDI) подключил к IAR (ну о том что он работает один раз, потом надо перегружать среду, я не буду говорить, т.к. он использует тулзы от TI) но только при открытых регистрах CPU время шага несколько секунд. Потому что вместо того что бы сразу спустить вниз очередь команд и получить ответ, все идет мелкими шажками по 2 ms....


Цитата(goodwin @ Sep 21 2012, 11:16) *
А здесь похоже пока только ногодрыг по HID USB. Ну и только Keil (хотя это будет недолго).

Даже ногодрыганьем можно получить отличную скорость - главное что бы с хостом нормальные очереди команд были!
Не только keil, еще DS-5. Т.е. возможно будет получить отладчик для Cortex-Ax.
Хотя сейчас IAR уже умеет работать через J-link, например с Beaglebone AM3359 попробовал!
goodwin
Именно это и имел ввиду - "ногодрыг по HID USB".
KRS
Протокол в общем не уровня GDB сервер, где уже сразу память, регистры процессора и т.п. читаются.
Но и гораздо выше уровня ногодрыганья! Блочная передача, полинг DAP регистра есть. В общем название правильное - протокол именно доступа к DAP. Скорость должна вполне приличная получиться.
goodwin
Есть желающие поковыряться?
По быстрому совокупил с примером HID для LPC1343.
Вроде подает признаки жизни - девайс определяется, реагирует на настройки.
Но дальше что то никак...
В части ногодрыга все на макросах.
Что то лыжи остановилмсь wink.gif
Сообща все веселее...

ЗЫ:
Нашел ашЫПку:
Код
static __forceinline uint32_t PIN_SWDIO_IN      (void) {
    return ((LPC_GPIO1->DATA & (1<<PIN_SWD_D))>>7); // дальше в программе анализируется бит 0...
}


Клокается вроде все правильно, но все-равно не дышит...
KRS
Цитата(goodwin @ Sep 25 2012, 08:39) *
Клокается вроде все правильно, но все-равно не дышит...

IMHO для начала надо попробовать законнектится через SWD и считать IDCODE напрямую вызывая функции SW-DP.
Там в начале надо подать от 50 клоков при SWDIO = 1 (что бы очистить возможные незавершенные транзакции), потом подать 0xE79E, потом еще раз от 50 клоков при SWDIO = 1.
А потом считать IDCODE.
goodwin
Дык задача так не стоит - во что бы то ни стало к чему-нить подключиться...
Задача - заюзать в том же Keil штатно без всякого шаманства wink.gif
KRS
Цитата(goodwin @ Sep 26 2012, 19:40) *
Задача - заюзать в том же Keil штатно без всякого шаманства wink.gif

Ну так надо же определить почему не работает.
А хотя бы лог команд которые по USB приходят есть?
goodwin
Теперь есть:

Код
DAP command = 00  Seq: 02-00 00 00 00 00 00 00  //ID_DAP_Info
DAP command = 00  Seq: 03-00 00 00 00 00 00 00  //ID_DAP_Info
DAP command = 00  Seq: 04-00 00 00 00 00 00 00  //ID_DAP_Info
DAP command = 00  Seq: 01-00 00 00 00 00 00 00  //ID_DAP_Info
DAP command = 00  Seq: 02-00 00 00 00 00 00 00  //ID_DAP_Info
DAP command = 00  Seq: FF-00 00 00 00 00 00 00  //ID_DAP_Info
DAP command = 00  Seq: FE-00 00 00 00 00 00 00  //ID_DAP_Info
DAP command = 02  Seq: 01-00 00 00 00 00 00 00  //ID_DAP_Connect
DAP command = 11  Seq: 20-A1 07 00 00 00 00 00  //ID_DAP_SWJ_Clock
DAP command = 04  Seq: 00-64 00 00 00 00 00 00  //ID_DAP_TransferConfigure
DAP command = 13  Seq: 00-00 00 00 00 00 00 00  //ID_DAP_SWD_Configure
DAP command = 01  Seq: 00-01 00 00 00 00 00 00  //ID_DAP_LED
DAP command = 12  Seq: 33-FF FF FF FF FF FF FF  //ID_DAP_SWJ_Sequence    
DAP command = 12  Seq: 08-00 00 00 00 00 00 00  //ID_DAP_SWJ_Sequence
DAP command = 05  Seq: 00-01 02 00 00 00 00 00  //ID_DAP_Transfer
DAP command = 03  Seq: 00-00 00 00 00 00 00 00  //ID_DAP_Disconnect  
DAP command = 01  Seq: 00-00 00 00 00 00 00 00  //ID_DAP_LED


Для LPC1768:
Сначала 51 клок при высоком уровне и 8 клоков при низком
Срубается на команде ID_DAP_Transfer
01 02 посылается и ожидается от LPC1768 3 бита подтверждения ACK.
Смотрел осциллографом - LPC не отвечает...

Для STM32 ( ничего не подключено):

DAP command = 12 Seq: 33-FF FF FF FF FF FF FF
DAP command = 12 Seq: 10-B6 ED 00 00 00 00 00
DAP command = 12 Seq: 33-FF FF FF FF FF FF FF
DAP command = 12 Seq: 08-00 00 00 00 00 00 00
DAP command = 05 Seq: 00-01 02 00 00 00 00 00
DAP command = 03 Seq: 00-00 00 00 00 00 00 00
DAP command = 01 Seq: 00-00 00 00 00 00 00 00

KRS
Так 0xE79E не посылается - чип не будет по SWD работать! (может LPC1000 и будет т.к. JTAG нету) но именно эта последовательность переключает на SWD!

Цитата
Сначала 51 клок при высоком уровне и 8 клоков при низком

посмотрел свои старые исходники на битбанге - у меня 16 клоков при низком уровне.

т.е. общая последовательность такая:
64 клока при высоком уровне.
16 клоков отправка 0xE79E
16 клоков при низком уровне
50 клоков при высоком уровне
16 клоков при низком уровне

Первые 64 клока нужны для очистки состояния если SWD уже работал.
я уже не помню зачем нужны 16 клоков при низком уровне.

Но 0xE79E надо обязательно посылать!

Может быть Вам просто стоит подправить исходники что бы при первой команде ID_DAP_SWD_Configure или ID_DAP_SWD_Clock отправлялось
64 клока при высоком уровне.
16 клоков отправка 0xE79E
16 клоков при низком уровне
goodwin
Первым делом это попробовал, гогда углУбился wink.gif
Правда подавал по 55 "единичек".

При взведенной галке "SWJ" последовательность отрабатывается как на нижнем логе ("для STM") всегда.
(просто для LPC забыл выставить).

Но там может и с командой ID_DAP_Transfer тоже что то не так.
Не срабатывает...

Вычитал в сети такое:
"
> + /* More than 50 TCK/SWCLK cycles with TMS/SWDIO high,
> + * putting both JTAG and SWD logic into reset state.
> + */
> + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> + /* Switching sequence enables SWD and disables JTAG
> + * NOTE: bits in the DP's IDCODE may expose the need for
> + * an old/deprecated sequence (0xb6 0xed).
> + */
> + 0x9e, 0xe7,
> + /* More than 50 TCK/SWCLK cycles with TMS/SWDIO high,
> + * putting both JTAG and SWD logic into reset state.
> + */
> + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
"

DLL-ки из Keil и из вашего архива выдают такую байду (0xb6 0xed) ...
Пускай авторы допиливают sm.gif
Увы, суетиться, думаю, (пока?) нет смысла.
Возможно, что драйвер требует какие то вендорские команды для правильной настройки -
И все не так уж красиво и открыто?

Кстати, а где удалось тиснуть архивчик, если не секрет?
Что то в открытом доступе я его не нашел...
KRS
Цитата(goodwin @ Sep 27 2012, 16:47) *
Кстати, а где удалось тиснуть архивчик, если не секрет?
Что то в открытом доступе я его не нашел...

Да в открытом доступе ее нет, но новее у них ничего нет.

Да там исходники ногодрыганья не так интересны, как хидеры! Особенно которые лежат в папке RDDI.
К тому же там написано что их скоро удалят и внесут в RDDI, который не во всех вариантах доступен.
А вот DLL можно написать свою и получить отладчик даже на FTDI для DS-5

К тому же в исходниках RDDI/example лежит преобразователь RDDI-DAP в RDDI-CMSIS-DAP (в верхнем коменте в файле неверно указано, к ULINK это не имеет отношения вроде)
т.е. видно еще один вариант RDDI будет.
x893
Не могу сказать про LPC - но я скачал файл CMSISDAP-DL-00001-r0p1-00rel0.zip
Переделал его под STM32F103, присоединил его к STM32VLDISCOVERY и по крайне мере тест проходит.
goodwin
Ну дык и выкладывайте проект. Дабы сравнить. Может я где то накосячил...
x893
Запустил на STM32 - чуть позже выложу код (есть еще некоторые баги)
http://akb77.com/g/stm32/cmsis-dap/
sensor_ua
Появилась поддержка в CooCox.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.