Технология JTAG широко применяется для тестирования электронных устройств, чаще всего основанные на микроконтроллерах, CPU, CPLD и/или FPGA. JTAG также позволяет аппаратную отладку, чтение/запись памяти, управление ножками I/O, анализ на производительность работающего кода (здесь приведен перевод статьи [1]).
Технология SWD (расшифровывается как Serial Wire Debug) это более современная версия JTAG, требующая для работы только 2 сигнальных выводов вместо как минимум 4 у стандартного JTAG (иногда добавляется еще один сигнал, что доводит количество сигнальных проводников до 5). SWJ это комбинация SWD и традиционного JTAG. Однако на высшем уровне оба этих интерфейса предоставляют аналогичные функции с разными вариациями, зависящими от управляющего ПО и от аппаратного обеспечения.
С одной стороны эта функциональность должна поддерживаться в целевом устройстве (target device). Порт отладки (Debug Port) часто называют JTAG-DP для JTAG и SW-DP для SWD. Устройство с поддержкой SWJ часто комбинирует в себе оба этих стандарта, при этом SWD-сигналы SWDIO и SWCLK повторно используются как JTAG-сигналы JTMS и JTCK (таким образом, SWJ обеспечивает обратную совместимость с традиционным JTAG). Большинство 32-битых микроконтроллеров и чипов SoC имеют на борту один из таких интерфейсов (или оба).
С другой стороны Вам нужен SWJ-адаптер, который может обмениваться данными с устройством по протоколу JTAG и/или SWD. SWJ могут стоить недорого (< 5$) и очень дорого (> 1000$), в зависимости от качества аппаратуры и ПО (и от бренда производителя). Ниже перечислены несколько описаний SWJ-адаптеров.
[ST-Link v2]
ST-LINK/V2 это адаптер от STMicroelectronics, очень удобный для прошивки микроконтроллеров STM8 и STM32 этой компании, таких как серия STM32 F1. Адаптер поддерживает интерфейсы JTAG, SWD и SWIM (последний применяется для STM8).
Эти SWJ-адаптеры основаны на микроконтроллерах STM32F1xx ARM Cortex M3. Любопытно, что адаптер на основе микроконтроллера STM32F1xx применяется для программирования и отладки таких же микроконтроллеров STM32F1xx.
Использование ST-LINK/V2 на Linux. Для нормального использования сначала добавьте правила для обычного пользователя, чтобы можно было получить доступ к этому устройству (правило udev, основанное на идентификаторах VID и PID адаптера, показываемых lsusb). Это делается только один раз перед тем, как адаптер подключается для непосредственного использования:
echo -n 'ST-Link V2 SWJ adapter' | sudo tee -a /etc/udev/rules.d/60-st-linkv2.rules echo -n 'ATTR{idVendor}=="0483", ATTR{idProduct}=="3748", MODE="0666"' | sudo tee -a /etc/udev/rules.d/60-st-linkv2.rules sudo udevadm control --reload-rules
Для подключения к микроконтроллерам STM32F1xx ARM Cortex M3 используется OpenOCD [9]:
openocd --file interface/stlink-v2.cfg --file target/stm32f1x.cfg Open On-Chip Debugger 0.10.0-dev-00189-g554313b (2016-01-12-10:52) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : auto-selecting first available session transport "hla_swd". To override use 'transport select < transport >'. Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD adapter speed: 1000 kHz adapter_nsrst_delay: 100 none separate Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : clock speed 950 kHz Info : STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748 Info : using stlink api v2 Info : Target voltage: 3.534945 Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
[Клон ST-LINK/V2]
Это полностью содранный с оригинала ST-LINK/V2. Он поставляется в таком же корпусе, с такими же кабелями, выглядит так же, сохранено даже название печатной платы (MB936). Но сама плата не такая же, список деталей (BOM) не совпадает с оригинальным.
Оригинальный адаптер снабжен дополнительной защитой от статического электричества, защитными резисторами и трансивером, позволяющим работать с уровнями сигнала от 1.65V до 5.5V. В клоне это полностью отсутствует, поскольку сигналы интерфейса напрямую подключены к микроконтроллеру. Таким образом, поддерживаются только уровни сигналов 3.3V на отлаживаемой/программируемой системе, и иногда 5V, потому что выводы микроконтроллера допускают по входу уровни 5V (5V tolerant).
Этот адаптер стоит $9, что довольно много. Если не нужен JTAG, то есть более дешевый адаптер, описанный ниже.
[ST-LINK V2 aluminium]
Эти адаптеры поставляются в маленьком алюминиевом корпусе, стоит порядка $2.5. Они поддерживают SWD и SWIM (для STM8), но не поддерживают JTAG. Это вероятно самый дешевый клон, который можно найти. Вероятно, такая низкая цена обусловлена тем, что в адаптере используются STM32F101. В сравнении с STM32F103 возможности у STM32F101 меньше, но все-таки это адаптер USB! Вероятно, что у STM32F101 тот же самый кристалл, что и STM32F103, и тот же самый корпус, просто STM32F101 получают в результате отбраковки STM32F103. Подобным образом декларируется, что у STM32F103C8 только 64 килобайта памяти flash, потому что полный тест они не прошли, в сравнении с 128 килобайтами STM32F103CB, но на борту STM32F103C8 часто есть больше памяти (Вы можете проверить эту память на ошибки путем чтения/записи).
Существует несколько версий плат этого варианта адаптера, и может также отличаться цоколевка.
2014-06-22 ST-LINK V2. Ниже показана схема и внешний вид этих адаптеров.
В адаптере используется интересный трюк для подключения двух светодиодов (LED) на одной ножке порта (PA9):
• Когда ножка выхода порта установлена в лог. 1, зажигается один светодиод
• Когда эта же ножка переводится в лог. 0, зажигается другой светодиод
• Когда ножка переводится в состояние висящего входа, оба светодиода выключается
• Когда выход работает в режиме ШИМ (PWM), Вы можете смешивать эти 2 цвета светодиодов (красный и синий). Это происходит потому, что глаз не замечает быстрых мерцаний, светодиоды находятся рядом и светят в маленькую дырку по центру.
Тот же самый адаптер, но с другой цоколевкой. Выглядит очень похоже на вышеописанный адаптер, но цоколевка сигналов разъема сильно отличается (кроме питания), и используется только один светодиод. На плате нет никакой маркировки сигналов.
2016-01-18 MX-LINK V2
[Baite]
Это аналог ST-Link V2 с поддержкой JTAG, SWD и SWIM (для STM8) [2].
Автор статьи [1] сделал для этого адаптера стикер с цоколевкой сигналов.
Автор также перерисовал по плате схему. Все выводы коннектора защищены резисторами 220 ом.
Baite-V2A. Более новая версия промаркирована «V2A» (под кварцем), но схема почти такая же, со следующими изменениями:
• Присутствуют все ножки микроконтроллера (есть даже маска пайки между ними).
• Добавлен порт SWD.
• STM32F103C8 заменен на STM32F101CB, но используется как STM32F103 (так же, как в других дешевых адаптерах).
• Используются пассивные элементы меньшего размера.
• Некачественная разводка платы.
[Black Magic Probe]
Адаптер Black Magic Probe [3] (известный как BMP) очень интересный SWJ-адаптер, потому что в него встроен сервер GDB. Таким образом, не нужно запускать сервер OpenOCD, чтобы управлять адаптером SWJ. Вы можете напрямую подключить GDB к этому адаптеру (через драйвер USB CDC ACM).
В этом адаптере также есть порт UART (через второй канал USB CDC ACM). Это очень полезно для отладки в реальном времени, без точек останова (для обмена сообщениями printf).
Поставляемая аппаратура имеет следующие недостатки:
• Используется не очень удобный коннектор ARM Cortex SWJ с маленьким шагом.
• Отдельный UART используется не всегда (UART также доступен на коннекторе SWJ).
• Дорогой (> $50), но эта цена относительно разумная, поскольку есть поддержка проекта.
Из-за того, что firmware этого адаптера открыто (open source), его можно портировать на другую аппаратуру, и народ реально этим пользуется [4]. Проект был портирован [5] на blue pill [6]. Также он был портирован и на клон ST-Link V2 [7], но на нем больше нет дополнительного UART. Автор решил сделать порт на baite [2]. На коннекторе используется меньше выводов питания, но зато получается достаточно функциональных выводов для добавления UART (и SRST).
Сборка firmware (ожидается интегрирование патча):
git clone https://github.com/tsaitgaist/blackmagic.git cd blackmagic git submodule init git submodule update git checkout baite-platform # if you are usgin GCC >= 7 git cherry-pick 2ebcffa2a4911090b43c36594dae6b58d4bb2f27 make cd src make clean make PROBE_HOST=baite
После получения двоичного кода нужно перепрошить им адаптер Baite. Как Вы можете видеть по схеме, выводы JTAG и SWD микроконтроллера не подключены (на плате нет контактных площадок, куда эти выводы припаяны). Но на обратной стороне платы можно найти контрольные точки, чтобы запрограммировать микроконтроллер через serial bootloader:
Вывод | Сигнал |
1 (квадратный) | RX |
2 | TX |
3 | BOOT0 |
4 | +5V |
5 | GND |
Для подключения используйте любой конвертер USB — TTL UART, и подключите соответствующие выводы к этому порту. Не подавайте питание на адаптер Baite через USB, потому что это может привести к его загрузке в нормальном режиме (не в режиме serial bootloader). Вместо этого подайте питание через конвертер USB — UART. Для запуска serial bootloader в момент подачи питания на адаптер нужно перевести сигнал BOOT0 в лог. 1 путем подключения его к +3.3V или к DTR (или к любому другому сигналу, который находится в лог. 1 на конвертере USB — UART).
Чтобы прошить Black Magic firmware автор использовал stm32flash. Поскольку flash защищена от чтения/записи, сначала нужно очистить эти биты опций.
# disable flash read protection stm32flash -k /dev/ttyUSB0 # disable flash write protection stm32flash -u /dev/ttyUSB0 # erase flash stm32flash -o /dev/ttyUSB0 # flash the DFU bootloader stm32flash -w src/blackmagic_dfu.bin -v /dev/ttyUSB0 # flash the main firmware stm32flash -w src/blackmagic.bin -v -S 0x08002000 /dev/ttyUSB0
Поскольку этот адаптер основан на микроконтроллере STM32F103C8 с 64 килобайтами flash, DFU bootloader дает возможность использовать только 56 килобайт памяти flash для основного приложения. Blackmagic firmware превышает этот размер, поэтому его нельзя прошить, если программное обеспечение DFU не игнорирует это ограничение. У микроконтроллера STM32F103C8 часто есть 128 килобайт flash, так что все еще можно прошить blackmagic firmware, используя serial bootloader (по адресу 0x08002000). Проверка во время прошивки (verification) гарантирует, что весь код firmware был успешно записан.
Отключите Baite, и снова подключите его через USB. В нем должно запуститься основное программное обеспечение, и операционная система хоста должна обнаружить два порта USB CDC ACM.
Вы можете перепрошить устройство из основного приложения, используя dfu-util (если Вы сможете перевести dfu-util в состояние игнорирования ограничения по размеру памяти):
dfu-util -d 1d50:6018 -s 0x08002000:leave -D blackmagic.bin
Цоколевка нового «BMP Baite»:
Сигнал | Вывод | Вывод | Сигнал |
SRTST | 1 | 2 | +3.3V |
+5V | 3 | 4 | JTCK/SWCLK |
RX | 5 (ключ) | 6 | JTMS/SWDIO |
GND | 7 | 8 | JTDO/TRACESWO |
TX | 9 | 10 | JTDI |
Примечание: вывод RX подтягивается к лог. 1 с помощью резистора 620 ом. Таким образом TX, подключенный к BMP Baite, должен иметь достаточную нагрузочную способность, чтобы подтянуть сигнал к лог. 0 (скорее всего, USB — UART адаптер наподобие Ch440 это сделать не сможет).
Если Вы подключите SRST к сигналу NRST целевой отлаживаемой системы, то можно будет подавать на неё сброс без нажатия кнопки сброса на плате отлаживаемой системы (если конечно такая кнопка есть). Сигнал сброса генерируется следующей командой:
gdb --eval-command="target extended-remote /dev/ttyACM0" --eval-command="monitor hard_srst" --eval-command="quit"
[Altera USB-Blaster]
USB-Blaster это адаптер от компании Altera. Он часто используется для прошивки FPGA, но по сути это обычный адаптер JTAG.
Внимание: вывод VCC{TARGET} подключается к опорному напряжению, используемому для обмена JTAG, обычно предоставляемому печатной платой целевого отлаживаемого устройства (часто это напряжение 3.3V или 1.8V). Иначе сигналы не смогут определиться адаптером JTAG.
Сначала добавьте правила для обычного пользователя, чтобы он мог получить доступ к устройству (правило udev на основе идентификаторов VID и PID, показываемых lsusb). Это делается только один раз, перед тем как устройство подключается для непосредственного использования:
echo -n 'Altera USB-Blaster JTAG adatper' | sudo tee -a /etc/udev/rules.d/60-altera-usb-blaster.rules echo -n 'ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="666"' | sudo tee -a /etc/udev/rules.d/60-altera-usb-blaster.rules sudo udevadm control --reload-rules
Чтобы можно было использовать этот адаптер, нужно перекомпилировать OpenOCD для USB-Blaster, чтобы использовалась библиотека libftdi (наверное потому что это клон).
git clone http://git.code.sf.net/p/openocd/code openocd-code cd openocd-code ./bootstrap ./configure --enable-usb_blaster_libftdi make sudo make install cd ..
Иначе OpenOCD зависает, загружая на 100% CPU, и его нужно прибить используя -KILL.
openocd --file interface/altera-usb-blaster.cfg Open On-Chip Debugger 0.10.0-dev-00189-g554313b (2016-01-12-11:26) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Warn : Adapter driver 'usb_blaster' did not declare which transports it allows; assuming legacy JTAG-only Info : only one transport option; autoselect 'jtag' adapter speed: 1000 kHz adapter_nsrst_delay: 100 jtag_ntrst_delay: 100 none separate cortex_m reset_config sysresetreq Info : No lowlevel driver configured, will try them all Info : Altera USB-Blaster II found (Firm. rev. = 6??) Info : This adapter doesn't support configurable speed
openocd --debug 3 --file interface/altera-usb-blaster.cfg ... Debug: 385 845 tcl.c:497 handle_nand_init_command(): Initializing NAND devices... Debug: 386 845 command.c:145 script_debug(): command - ocd_command ocd_command type ocd_pld init Debug: 387 845 command.c:145 script_debug(): command - ocd_pld ocd_pld init Debug: 389 846 pld.c:207 handle_pld_init_command(): Initializing PLDs...
Теперь Вы можете использовать адаптер, пример с микроконтроллером STM32F1:
openocd --file interface/altera-usb-blaster.cfg --file target/stm32f1x.cfg Open On-Chip Debugger 0.10.0-dev-00189-g554313b (2016-01-12-16:26) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Warn : Adapter driver 'usb_blaster' did not declare which transports it allows; assuming legacy JTAG-only Info : only one transport option; autoselect 'jtag' adapter speed: 1000 kHz adapter_nsrst_delay: 100 jtag_ntrst_delay: 100 none separate cortex_m reset_config sysresetreq Info : No lowlevel driver configured, will try them all Info : usb blaster interface using libftdi Error: unable to get latency timer Info : This adapter doesn't support configurable speed Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3) Info : JTAG tap: stm32f1x.bs tap/device found: 0x16410041 (mfg: 0x020, part: 0x6410, ver: 0x1) Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
Оригинальный адаптер Altera USB-Blaster использует чипы FTDI FT245 и MAX CPLD. Имеется множество его клонов разного качества и разной поддержкой диапазонов напряжения.
[SiLabs USB-Blaster]
Здесь используется микроконтроллер C8051F321 от Silicon Labs и 4-канальный буфер 74LVC125 (для преобразования уровней сигналов в пределах от 1.65V до 3.6V).
[PIC USB-Blaster]
Этот адаптер использует микроконтроллер PIC18F14 компании Microchip, без каких-либо буферов (поддерживаются только сигналы с уровнями 5V).
[ARMJISHU USB-Blaster]
Здесь используется STM32F101 от ST (как STM32F103 с поддержкой USB) и 8-канальный буфер 74HC244 (для преобразования уровней от 2.0V до 6.0V).
На схеме видно, что аппаратура может также управлять сигналами (на 3.3V) в случае, когда Vcc_target не подключен, и Вы можете добавить слот карт uSD или память SPI flash. Не известно, поддерживается ли этот функционал в программном обеспечении.
[SEGGER J-Link]
O-Link-ARM V8 [8], клон SEGGER J-Link.
Поддерживает JTAG, SWD, SWO, RTCK и опорное напряжение для регулировки уровней, что делает этот JTAG-адаптер наиболее полным.
[Цепочка сканирования JTAG]
Микросхемы с поддержкой JTAG имеют точки тестирования, которые называются Test Access Points (TAP). Один микроконтроллер может иметь несколько TAP, соединяемых в цепочку (scan chain). Несколько микросхем с TAP-ми также могут быть соединены (сигналами на печатной плате) в цепочку, это позволяет опрашивать все устройства на плате через одно подключение JTAG. Каждый TAP имеет идентификатор (IDCODE) и он может быть выбран индивидуально.
Иногда полезно перечислить все доступные TAP-ы на цепочке, чтобы узнать, какие есть устройства в системе. Это можно просто осуществить с помощью ПО urJTAG [10]. Пример с USB Blaster:
jtag UrJTAG 0.10 #2007 Copyright (C) 2002, 2003 ETC s.r.o. Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors UrJTAG is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. There is absolutely no warranty for UrJTAG. warning: UrJTAG may damage your hardware! Type "quit" to exit, "help" for help. jtag> cable UsbBlaster Connected to libftdi driver. jtag> detect IR length: 9 Chain length: 2 Device Id: 00111011101000000000010001110111 (0x3BA00477) Unknown manufacturer! (01000111011) (/usr/share/urjtag/MANUFACTURERS) Device Id: 00010110010000010000000001000001 (0x16410041) Unknown manufacturer! (00000100000) (/usr/share/urjtag/MANUFACTURERS)
OpenOCD также сканирует цепочку, если нет предоставленных target (какой используется адаптер, все-таки определить нужно):
openocd --file interface/altera-usb-blaster.cfg Open On-Chip Debugger 0.10.0-dev-00189-g554313b (2016-01-12-16:26) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Warn : Adapter driver 'usb_blaster' did not declare which transports it allows; assuming legacy JTAG-only Info : only one transport option; autoselect 'jtag' Info : No lowlevel driver configured, will try them all Info : usb blaster interface using libftdi Error: unable to get latency timer Info : This adapter doesn't support configurable speed Warn : There are no enabled taps. AUTO PROBING MIGHT NOT WORK!! Info : JTAG tap: auto0.tap tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3) Info : JTAG tap: auto1.tap tap/device found: 0x16410041 (mfg: 0x020, part: 0x6410, ver: 0x1) Warn : AUTO auto0.tap - use "jtag newtap auto0 tap -irlen 4 -expected-id 0x3ba00477" Warn : AUTO auto1.tap - use "jtag newtap auto1 tap -irlen 5 -expected-id 0x16410041" Warn : gdb services need one or more targets defined
0x3ba00477 соответствует Cortex-M3 TAP, и 0x16410041 boundary scan TAP, как указано в документации на STM32F1xx.
Хотя ST-Link v2 с микроконтроллерами ST главным образом используется как адаптер SWD, он также поддерживает обычный JTAG. Оба этих протокола реализованы драйвером High Level Adapter (HLA). Но все выглядит так, как будто scan chain не поддерживается драйвером HLA.
openocd --file interface/stlink-v2.cfg -c "transport select hla_jtag" -c "adapter_khz 100" Open On-Chip Debugger 0.10.0-dev-00189-g554313b (2016-01-12-16:26) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html hla_jtag adapter speed: 100 kHz Info : clock speed 100 kHz Error: BUG: current_target out of bounds
[Ссылки]
1. SWJ adapters site:wiki.cuvoodoo.info.
2. Best Quality~ST-Link stlink V2 for STM8S STM8L STM32 Cortex-M0 Cortex-M3 SWIM JTAG SWD interface Programmer site:aliexpress.com.
3. blacksphere/blackmagic site:github.com.
4. blacksphere/blackmagic Supported Hardware site:github.com.
5. Converting an STM32F103 board to a Black Magic Probe site:medium.com.
6. blue pill site:wiki.cuvoodoo.info.
7. Cheap Chinese ST-Link v.2 Programmer converted to Black Magic Probe Debugger site:blog.linuxbits.io.
8. FREE SHIPPING V8 ARM Emulator,supports ARM7,ARM9,ARM11,Cortex-M3 core,ADS,IAR,STM32 Emulator + Adapter converter site:aliexpress.com.
9. OpenOCD: руководство пользователя, начало.
10. UrJTAG: бесплатный инструментарий JTAG.
11. Цоколевка интерфейсов JTAG.
EMULATOR, JTAG / SWD, FOR ARM
The J-LINK ULTRA is a JTAG/SWD emulator designed for ARM/Cortex and other supported CPUs. It is fully compatible to the standard J-Link and works with the same PC software. Based on the highly optimized and proven J-Link, it offers even higher speed as well as target power measurement capabilities due to the faster CPU, built in FPGA and high speed USB interface. It connects via USB to a PC running Microsoft Windows 2000, Windows XP, Windows 2003, Windows Vista or Windows 7. The J-Link Ultra has a built in 20 pin JTAG/SWD connector and it comes with built in licenses for flash download and flash breakpoints for some devices. come with additional input/output Indicators. The input indicator is used to give the user some information about the status of the target hardware.
Встроенные Конструкции и Разработка
J-Link ULTRA, Ribbon cable, USB cable.
???PF_PDP_COMPARE_MAX_ITEMS_MESG???
Количество | Цена ₽/шт |
---|---|
+1 | 975 |
+3 | 836 |
+6 | 790 |
+10 | 760 |
Условия
Срок поставки 5-10 рабочих днейАртикул
ARM-JTAG-SWDПроизводитель
OLIMEXТехническое описание:
Вы можете запросить у нас любое количество ARM-JTAG-SWD, просто отправьте нам запрос на поставку.
Мы работаем с частными и юридическими лицами.
Адаптер; IDC20; Интерфейс: JTAG,SWD; 50×40мм
Бесплатная доставка
заказов от 5000 ₽
Доставим прямо в руки или в ближайший пункт выдачи
JTAG-адаптеры I-jet, I-jet Trace, I-scope
Аппаратные средства разработки позволяют осуществлять внутрисхемное программирование микроконтроллера и комплексную отладку программы в среде IAR Embedded Workbench. С их помощью можно получать доступ к содержимому внутренних ресурсов микроконтроллера, выполнять трассировку программы с привязкой к программному коду, оценивать энергопотребление микроконтроллера в зависимости от исполняемого кода.
Профессиональный отладчик I-jet поддерживает программирование микроконтроллеров с архитектурой ARM и ARM Cortex. Отладчик использует интерфейсы JTAG и SWD/SWO. I-jet может точно измерять потребляемую кристаллом мощность и поддерживает режим Power Debugging в среде разработки IAR Embedded Workbench.
Основные характеристики I-jet:
Узнать цену
Инженер-консультант по направлению IAR Systems: |
Мамаева Татьяна | [email protected] |
Сеть Stack Exchange состоит из 177 сообществ вопросов и ответов, включая Stack Overflow, крупнейшее и пользующееся наибольшим доверием онлайн-сообщество, где разработчики могут учиться, делиться своими знаниями и строить свою карьеру.
Посетить Stack ExchangeElectrical Engineering Stack Exchange — это сайт вопросов и ответов для профессионалов в области электроники и электротехники, студентов и энтузиастов.Регистрация займет всего минуту.
Зарегистрируйтесь, чтобы присоединиться к этому сообществуКто угодно может задать вопрос
Кто угодно может ответить
Лучшие ответы голосуются и поднимаются наверх
Спросил
Просмотрено 1к раз
\ $ \ begingroup \ $JTAG, SWD, EDBG, ICSP, ISP.
Может кто просто объяснить свои отличия.
Например, если отладчик EDBG ТАКЖЕ может программировать flash, почему платы Arduino имеют и ISP, и EDBG?
http://www.armlearning.com/wp-content/uploads/2017/10/4c10034e18f9380ff03a140a4835faff.jpg
А на картинке, почему они написали «SWD (EDBG)»?
Какой смысл писать EDBG и писать в парантезе?
Почему ISP и ICSP имеют одно и то же значение? Почему не одно сокращение?
И, наконец, какое отношение имеет JTAG ко всему этому?
Создан 13 дек.
Т.RexT. Рекс1344 бронзовых знака
\ $ \ endgroup \ $ \ $ \ begingroup \ $Производители микросхем имеют разные названия программных интерфейсов, которые в основном делают одно и то же:
Наконец, описываемый здесь EDBG, скорее всего, представляет собой прошивку отладчика, которая может работать на одном MCU (с USB) и отлаживать другой MCU (так что на самом деле на плате разработки есть два MCU).Как вы можете видеть в связанном документе, он поддерживает несколько стандартов интерфейса программирования Atmel.
Создан 13 дек.
филофило8,335 11 золотой знак2121 серебряный знак4040 бронзовых знаков
\ $ \ endgroup \ $ 1 \ $ \ begingroup \ $И, наконец, какое отношение имеет JTAG ко всему этому?
Платы Arduino на базе Atmega328P не поддерживают JTAG.Для этого вам нужно перейти на более крупные чипы (например, ‘1284P, 2560).
Создан 13 дек.
КрестДорогиКроссДороги3,33011 золотых знаков44 серебряных знака1414 бронзовых знаков
\ $ \ endgroup \ $Ваша конфиденциальность
Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Принимать все файлы cookie Настроить параметры
ОбъяснениеКаждый на своем пути к встроенным решениям познакомится с этими двумя основными протоколами.Когда они это делают, в их голове неизбежно возникает несколько вопросов!
Эта статья посвящена ответам на вышеперечисленные вопросы! Если вы торопитесь, вот вам краткий вариант ответа!
Краткая версия ответа: SWD против JTAGВ таблице ниже показаны основные различия между стандартами SWD и JTAG.
SWD | JTAG | |||
Количество выводов | 2 | 4 | ||
Отладка только для программирования и отладки Функциональные возможности | Только программирование и отладка | тесты | | |
Поддерживаемые архитектуры ЦП | Только ARM | JTAG является независимой группой и, следовательно, поддерживается многими архитектурами, не ограничиваясь только ARM | ||
Топология | Звезда | |||
Специальные функции | Печать отладочной информации через порт отладки | не поддерживается |
Теперь, когда мы увидели короткую версию, давайте посмотрим на более длинную и информативную версию и узнаем основные различия между SWD и JTAG начиная с основ!
Хорошо, приступим!
Что такое отладчики? Проще говоря, отладчики— это устройства , которые переводят команды, отправляемые с ПК (например,через протокол USB) на язык (например, протокол SWD или JTAG), который понимается микроконтроллерами (периферийное устройство внутри микроконтроллера, которое отвечает за загрузку кода и, если быть точным, управление выполнением).
Потребность в стандартах отладкиПрежде чем рассматривать потребность в стандартах отладки, давайте начнем с ответа на простой вопрос.
Что такое стандарт? Стандарт, говоря простым языком, — это набор правил и протоколов, которым каждый игрок в определенной отрасли согласился следовать и внедрять.
Раньше, до появления таких протоколов, как SWD и JTAG, мир отладки был просто полон хаоса. Каждый крупный производитель придумал свой собственный способ загрузки кода в свои микроконтроллеры, и в результате пришлось страдать только таким людям, как мы, инженерам встраиваемых систем. Каждый раз, когда крупный производитель выпускает микроконтроллер, мы, разработчики встраиваемых систем, должны узнавать об их проприетарных протоколах для загрузки кода в наши микроконтроллеры.
Кроме того, адаптеры отладки были дорогими , так как производители действительно не имеют конкурентов , которые делают адаптеры отладки в соответствии со своими протоколами, поскольку протоколы были проприетарными. Другая причина, по которой они были дорогими, заключается в том, что не хватает тома , поскольку они могут продавать свои отладочные адаптеры только тем людям, которые используют микроконтроллеры, произведенные ими!
Третья проблема, которая послужила причиной появления этих стандартов, — это вопрос о производственных испытаниях электронных устройств .Рассмотрим этот сценарий: у вас есть 4 чипа от 4 разных производителей на разработанной вами плате, и вы хотите реализовать на них автоматическое тестирование, чтобы сделать производственный процесс более эффективным. Но поскольку все платы теперь имеют свой собственный протокол, вам нужно создать сверхсложный производственный код, который учитывает сложность, и вам потребуется 4 разных отладчика, установленных на контрольных точках вашей платы, что приведет к дополнительным затратам, времени производства и времени программирования.
По сути, все эти проприетарные протоколы выполняют одни и те же действия, например, загружают код и дают возможность отлаживать и тестировать эти проблемы.Просто они делают это немного по-другому.
Для борьбы с этими 3 проблемами из
инженеры всех основных производителей микроконтроллеров и производителей продукции собрались вместе, обсудили и составили некоторые спецификации того, как должен работать протокол отладки . Результатом таких посиделок являются стандарты вроде JTAG.
Таким образом, все производители микроконтроллеров могут реализовать один и тот же протокол отладки, так что один и тот же адаптер отладки может использоваться со всеми микроконтроллерами, реализующими данный стандарт!
Существует два таких основных стандарта для загрузки и отладки кода на микроконтроллерах и ПЛИС. Начнем с изучения стандарта JTAG!
Стандарт JTAGJTAG означает Joint Test Action Group , просто причудливое название для команды инженеров крупных производителей, которые собрались вместе и разработали стандарт, который мы теперь называем JTAG.
Эта группа начала свои обсуждения в конце 1980-х, а в 1990 году они официально выпустили документ, объясняющий стандарт IEEE. (IEEE означает Институт инженеров по электротехнике и электронике, это международная организация, в которой публикуются все стандарты, такие как WiFi, Bluetooth и т. Д.). Протокол, который они придумали, был задокументирован в IEEE 1149.1 в 1990 году. Позже этот документ был пересмотрен и улучшен, и на момент написания последнего стандарта был IEEE 1149.7.
Интересная история о JTAG заключается в том, что основная причина, по которой эта группа была сформирована, заключалась в том, чтобы помочь с производством и тестированием электронных устройств, а не фактически создать стандарт для отладки программного обеспечения! Но со временем JTAG стал очень популярным в использовании и для отладки программного обеспечения!
Контакты и архитектура JTAGJTAG в основном имеет 5 контактов, а именно
Эти 5 контактов вместе известны как Test Access Port или TAP для краткости.Среди них TRST является необязательным, и мы можем сделать наши платы совместимыми с JTAG только с четырьмя другими!
JTAG использует топологию последовательного соединения для установления соединений между микросхемами, и, следовательно, скорость определяется самым медленным чипом в цепочке.
Возможность сканирования границыЧто такое сканирование границ? Граничное сканирование — это функция, которая дает нам возможность проверять собранные печатные платы после производства на предмет коротких замыканий и обрывов. Это достигается с помощью специального оборудования внутри каждого чипа, известного как ячейки с граничным сканированием. Эти ячейки можно использовать для управления каждым отдельным выводом микросхем на нашей печатной плате, чтобы включать / выключать их. Таким образом, ошибки пайки могут быть легко обнаружены без необходимости использования системы контрольных точек / гвоздей!
JTAG — это стандарт, который представил эту технологию граничного сканирования, и он особенно незаменим, когда дело доходит до производственного тестирования микросхем Ball Grid Array (BGA), поскольку в случае BGA тестирование «кровати гвоздей» просто невозможно!
Если вы хотите узнать больше о сканировании границ, я предлагаю вам прочитать эту отличную статью по адресу xjtag
. Стандарт SWDSWD означает Serial Wire Debug — это протокол, разработанный ARM для программирования и отладки своих микроконтроллеров.Поскольку SWD специализируется на программировании и отладке , , он поставляется со многими специальными функциями, которые обычно не доступны где-либо еще, например, отправка отладочной информации на компьютер через линию ввода-вывода. Кроме того, поскольку он специально сделан ARM для использования в своих устройствах, производительность SWD обычно является лучшей в своем классе!
Поскольку бизнес-модель ARM просто лицензирует свои разработки, многие производители делают адаптеры отладки на основе конструкций SWD, и это делает SWD столь же повсеместным, как и сами чипы на базе ARM!
Контакты и архитектура SWD ПротоколSWD имеет только 2 контакта, а именно
SWD поддерживает топологию звезды с точки зрения архитектуры.
Совместимость SWD / JTAGВы можете найти множество микроконтроллеров и адаптеров отладки, которые могут поддерживать протоколы SWD и JTAG. Обычно они достигают этого с помощью одного набора внешних контактов, которые внутренне мультиплексированы как с периферийным устройством SWD, так и с периферийным устройством JTAG . Обычно по умолчанию выбирается один из этих протоколов, и вы можете переключаться между двумя из них, используя специальный набор инструкций, предоставленных производителем.
Может быть, вы находитесь в процессе выбора микросхемы для своего следующего проекта, и у вас есть 2 одинаковых чипа, основная разница между которыми состоит в том, что один поддерживает только SWD, а другой поддерживает только JTAG. Как вы теперь решите?
Давайте посмотрим на ответы на вышеперечисленные вопросы в следующем разделе!
Сильные стороны протокола SWDДавайте посмотрим на преимущества SWD перед JTAG
Теперь давайте посмотрим, какие преимущества имеют JTAG перед SWD.
Что касается других факторов, таких как цена, адаптеры JTAG и SWD одинаково недороги и, следовательно, не важны для нас при принятии решения.
Когда выбирать SWD вместо JTAGДавайте рассмотрим несколько сценариев, в которых вы можете выбрать SWD
Давайте рассмотрим несколько сценариев, в которых вы можете выбрать JTAG
Но тогда, , если обе опции доступны для вас в вашем микроконтроллере, как вы можете принять решение? Ответ прост: просто оставьте микроконтроллер в режиме SWD во время программирования и переключитесь на JTAG во время производственных испытаний!
РезюмеДавайте закончим эту статью, рассмотрев таблицу различий между этими двумя стандартами отладки
SWD | JTAG | |||
Количество выводов | 2 | 4 | ||
Отладка только для программирования и отладки Функциональные возможности | Только программирование и отладка | тесты | | |
Поддерживаемые архитектуры ЦП | Только ARM | JTAG является независимой группой и, следовательно, поддерживается многими архитектурами, не ограничиваясь только ARM | ||
Топология | Звезда | Специальные функции | Печать отладочной информации через порт отладки | не поддерживается |
И на этом я закончу эту статью!
Надеюсь, вам понравилась эта статья, и вы узнали что-то полезное.
Если вам понравился пост, не стесняйтесь поделиться им со своими друзьями и коллегами!
Статьи по темеВот еще несколько моих статей, которые могут вас заинтересовать!
Аппаратное обеспечение, программное обеспечение, прошивка, промежуточное ПО, драйверы, ОС и приложения, в чем разница?
Лучшие 14 альтернатив Raspberry Pi 4B
Видео: вопросы на собеседовании инженера по встроенному программному обеспечению
Заработная плата встраиваемых инженеров в Европе
Для разработчиков встраиваемых систем и хакеров аппаратного обеспечения JTAG — это стандарт de facto для отладки и доступа к регистрам микропроцессора.Этот протокол используется уже много лет и используется до сих пор. Его главный недостаток в том, что он использует для работы множество сигналов (минимум 4 — TCK, TMS, TDI, TDO). Это стало проблемой сейчас, когда устройства становятся все меньше и меньше, а также доступны микроконтроллеры с небольшим количеством выводов.
Для решения этой проблемы ARM создала альтернативный интерфейс отладки под названием SWD (Serial Wire Debug), который использует только два сигнала (SWDCLK и SWDIO). Этот интерфейс и связанный с ним протокол теперь доступны почти во всех процессорах Cortex- [A, R, M].
В отличие от JTAG, который связывает TAP вместе, SWD использует шину под названием DAP (порт доступа отладки). На этом DAP есть один мастер ( DP — порт отладки) и один или несколько ведомых устройств ( AP, — порты доступа), аналогичные TAP JTAG. DP связывается с AP, используя пакеты, содержащие адрес AP.
Подводя итог, внешний отладчик подключается к DAP через DP, используя протокол, называемый SWD.Этот технический документ от ARM показывает хороший обзор архитектуры SWD:
SWD архитектураПорт отладки — это интерфейс между хостом и DAP. Он также обрабатывает интерфейс хоста. Для доступа к DAP доступны три разных порта отладки:
В зависимости от потребностей к DAP можно добавить несколько точек доступа.ARM предоставляет спецификации для двух точек доступа:
Как было сказано ранее, SWD использует только два сигнала:
Обе линии должны быть натянуты на цель.
Каждая транзакция SWD состоит из трех этапов:
Обратите внимание, что цикл Trn должен быть отправлен, когда необходимо изменить направление данных.
Передача SWDЗаголовок запроса содержит следующие поля:
Поле | Описание |
Начало | Стартовый бит.Должно быть 1 |
APnDP | Доступ к DP (0) или AP (1) |
RnW | Запрос записи (0) или чтения (1) |
A [2: 3] | Биты адреса регистра AP или DP [2: 3] |
Четность | Проверка на нечетность (APnDP, RnW, A [2: 3]) |
Стоп | Стоп-бит. Должно быть 0 |
Парк | Парковочный бит отправлен перед изменением SWDIO на открытый сток.Должно быть 1 |
Биты ACK содержат статус ACK заголовка запроса. Обратите внимание, что сначала нужно прочитать три бита LSB.
Бит | Описание |
2 | ОК, ответ. Операция прошла успешно |
1 | ПОДОЖДИТЕ ответ. Хост должен повторить запрос. |
0 | FAULT ответ.Произошла ошибка |
Данные отправляются хостом или целью. Он отправляется первым в LSB и заканчивается битом нечетной четности.
Теперь, когда мы знаем больше о низкоуровневой части протокола, пришло время взаимодействовать с реальной целью. Для этого я использовал Hydrabus, но это также можно сделать с помощью Bus Pirate или любого другого подобного инструмента. Во время этого эксперимента я использовал отладочную плату STM32F103, получившую название Blue Pill .Он легко доступен и уже имеет разъем SWD.
Документ спецификации архитектуры интерфейса отладки ARM содержит все детали, необходимые для взаимодействия с интерфейсом SWD, так что приступим.
Поскольку целевой объект использует интерфейс SWJ-DP, его необходимо переключить с режима JTAG по умолчанию на SWD. В главе 5.2.1 документа показана последовательность отправки для переключения с JTAG на SWD:
1.Отправьте не менее 50 циклов SWCLKTCK с SWDIOTMS HIGH. Это гарантирует, что текущий интерфейс находится в состоянии сброса. Интерфейс JTAG обнаруживает только 16-битную последовательность JTAG-to-SWD, начиная с состояния Test-Logic-Reset.
2. Отправьте 16-битную последовательность выбора JTAG-to-SWD на SWDIOTMS.
3. Отправьте не менее 50 циклов SWCLKTCK с SWDIOTMS HIGH. Это гарантирует, что если SWJ-DP уже находился в режиме SWD перед отправкой последовательности выбора, интерфейс SWD переходит в состояние сброса линии.
Последовательность 0b0111 1001 1110 0111 (0x79e7) Сначала MSB, нам нужно использовать 0x7b 0x9e в формате LSB-first.
импорт pyHydrabus r = pyHydrabus.RawWire ('/ dev / ttyACM0') r._config = 0xa # Сначала установить GPIO с открытым стоком / LSB r._configure_port () r.write (b '\ xff \ xff \ xff \ xff \ xff \ xff \ x7b \ x9e \ xff \ xff \ xff \ xff \ xff \ xff)
Теперь, когда DP находится в состоянии сброса, мы можем выполнить команду чтения DPIDR , чтобы определить порт отладки.Для этого нам нужно прочитать регистр DP по адресу 0x00
.| Старт | APnDP | RnW | A [2: 3] | Четность | Стоп | Парк | | ------- | ------- | ----- | -------- | -------- | ------ | - ---- | | 1 | 0 | 1 | 0 0 | 1 | 0 | 1 | = 0xa5
r.write (b '\ x0f \ x00 \ xa5') статус = 0 для i в диапазоне (3): status + = ord (r.read_bit ()) << i print ("Статус:", шестнадцатеричное (статус)) print ("DPIDR", шестнадцатеричное (int.from_bytes (r.read (4), byteorder = "little")))
Следующим шагом является включение домена отладки.В главе 2.4.5 говорится, что нам нужно установить CDBGRSTREQ и CDBGRSTACK (биты 28 и 29) в регистре CTRL / STAT (адрес 0x4) DP:
.r.write (b '\ x81') # Записать запрос на адрес регистра DP 0x4 для _ в диапазоне (5): r.read_bit () # Не заботиться об ответе # Записать 0x00000078-MSB в регистр CTRL / STAT r.write (b '\ x1e \ x00 \ x00 \ x00 \ x00') # Отправьте несколько тактов для синхронизации линии r.write (b '\ x00')
Теперь, когда домен отладки включен, DAP полностью доступен.В качестве первого процесса обнаружения мы запросим AP, а затем просканируем все AP в DAP.
Чтение из AP всегда выполняется через DP. Чтобы запросить AP, хост должен сказать DP, чтобы он записал в AP, указанный адресом на DAP. Для чтения данных из предыдущей транзакции DP использует специальный регистр RDBUFF (адрес 0xc). Это означает, что правильный метод запроса следующий:
Регистр SELECT описан в главе 2.3.9, интересные поля отмечены здесь:
Регистр | Позиция | Описание |
APSEL | [31:24] | Выбирает адрес точки доступа. На DAP имеется до 255 APS. |
APBANKSEL | [7: 4] | Выбирает регистр AP для запроса. В нашем случае мы будем запрашивать регистр IDR для определения типа AP . |
Интересным для чтения регистром AP является регистр IDR (адрес 0xf), который содержит идентификационную информацию для этой AP. В приведенном ниже коде резюмируется процедура чтения IDR точки доступа по адресу 0x0.
ap = 0 # адрес точки доступа r.write (b '\ xb1') # Запись в регистр DR SELECT для _ в диапазоне (5): r.read_bit () # Не читать биты статуса r.write (b '\ xf0 \ x00 \ x00') # Заполняем APBANKSEL 0xf r.write (ap.to_bytes (1, byteorder = "little")) # Заполняем APSEL адресом точки доступа # Это вычисляет бит четности, который будет отправлен после фазы данных если (bin (ap) .count ('1')% 2) == 0: r.write (b '\ x00') еще: р.написать (b '\ x01') r.write (b '\ x9f') # Чтение RDBUFF из DP статус = 0 для i в диапазоне (3): status + = ord (r.read_bit ()) << i # Прочитать статус транзакции print ("Статус:", шестнадцатеричное (статус)) #Dummy read #print ("пустышка", шестнадцатеричное (int.from_bytes (r.read (4), byteorder = "little"))) r.read (4) r.write (b '\ x00') r.write (b '\ x9f') # Чтение RDBUFF из DP, на этот раз по-настоящему статус = 0 для i в диапазоне (3): status + = ord (r.read_bit ()) << i print ("Статус:", шестнадцатеричное (статус)) idcode = шестнадцатеричный (int.from_bytes (r.read (4), byteorder = "little")) # Считать фактическое значение if idcode! = '0x0': # Если AP отсутствует, значение будет 0 print ("AP", шестнадцатеричное (ap), idcode) r.write (b '\ x00')
С тем же кодом мы можем перебрать все адресное пространство и посмотреть, есть ли другие точки доступа на DAP:
для ap в диапазоне (0x100): r.write (b '\ x00') r.write (b '\ xb1') для _ в диапазоне (5): р.read_bit () # r.write (b '\ xf0 \ x00 \ x00 \ x00 \ x00') r.write (b '\ xf0 \ x00 \ x00') r.write (ap.to_bytes (1, byteorder = "маленький")) если (bin (ap) .count ('1')% 2) == 0: r.write (b '\ x00') еще: r.write (b '\ x01') r.write (b '\ x9f') статус = 0 для i в диапазоне (3): status + = ord (r.read_bit ()) << i #print ("Статус:", шестнадцатеричный (статус)) #print ("пустышка", шестнадцатеричное (int.from_bytes (r.read (4), byteorder = "little"))) р.читать (4) r.write (b '\ x00') r.write (b '\ x9f') статус = 0 для i в диапазоне (3): status + = ord (r.read_bit ()) << i #print ("Статус:", шестнадцатеричный (статус)) idcode = hex (int.from_bytes (r.read (4), byteorder = "little")) если idcode! = '0x0': print ("AP", шестнадцатеричное (ap), idcode)
Запуск сценария показывает, что на шине только одна точка доступа. По документации это MEM-AP:
. > python3 / tmp / swd.ру
Статус: 0x1
DPIDR 0x2ba01477
ТД 0x0 0x24770011
Отсюда можно отправлять команды на MEM-AP для запроса памяти процессора.
На реальных устройствах не всегда легко определить, какие выводы или контрольные точки используются для интерфейса отладки. Это также верно и для JTAG, поэтому существуют такие инструменты, как JTAGulator. Его цель - обнаружить интерфейсы JTAG, пробуя каждую комбинацию контактов, пока комбинация не вернет действительный IDCODE.
Теперь, когда мы лучше знаем, как инициализируется интерфейс SWD, мы можем сделать то же самое, но для интерфейсов SWD. Идея такая:
Этот метод реализован для прошивки Hydrabus и пока приносит положительные результаты.Здесь показан пример сеанса:
> 2-х проводный
Устройство: twowire1
Резистор GPIO: плавающий
Частота: 1000000 Гц
Порядок битов: сначала MSB
twowire1> перебор 8
Брутфорс на 8 пинах.
Обнаружено устройство. IDCODE: 2BA01477
CLK: PB5
IO: PB6
twowire1>
Операция занимает менее двух секунд, и пока надежно обнаружены интерфейсы SWD на всех протестированных платах.
В этом посте мы показали, как разработан интерфейс отладки ARM и как протокол SWD работает на очень низком уровне.Имея эту информацию, можно отправлять запросы к MEM-AP с помощью простого микроконтроллера. Эта часть выходит далеко за рамки данной публикации и здесь не рассматривается. Библиотека PySWD - полезный ресурс для начала взаимодействия с MEM-AP.
Мы также показали, как реализовать инструмент обнаружения SWD, чтобы помочь найти порты SWD, аналогичные существующим инструментам, используемым для обнаружения JTAG.
Есть два способа записать программу в микроконтроллер для ее выполнения: либо с помощью адаптера JTAG / SWD, либо с помощью загрузчика библиотеки.На этой странице обсуждаются плюсы и минусы каждого метода.
JTAG - это стандарт, изначально разработанный для проведения электрических испытаний компонентов и плат, выходящих с заводов, путем контроля их входных / выходных контактов («граничное сканирование»). Оттуда он превратился в общий интерфейс, используемый для управления всем микроконтроллером и позволяющий, среди прочего, программировать его внутреннюю флэш-память, управлять потоком выполнения с помощью точек останова и выгружать содержимое регистров в реальном времени.
SWD - это альтернативный протокол, специфичный для чипов ARM, который совместим по выводам с JTAG, но использует меньше проводов. Большую часть времени при работе с микроконтроллерами ARM вы будете использовать микроконтроллер и адаптер, совместимые как с JTAG, так и с SWD, поэтому вам все равно, какой протокол используется на самом деле. Вот почему мы будем называть их все вместе как JTAG / SWD .
Для использования JTAG / SWD требуется адаптер , т.е.е. внешняя плата, соединяющая микроконтроллер с компьютером. Это что-то вроде «переходника USB на JTAG». Доступно множество моделей, но вот две из них были протестированы и, как известно, работают:
Вам также понадобится программное обеспечение для связи с этим адаптером. libtungsten использует для этого отличный OpenOCD с открытым исходным кодом, большинство адаптеров и микроконтроллеров поддерживаются прямо из коробки.
JTAG / SWD - это «классический» метод программирования микроконтроллера. Он предоставляет вам самые мощные функции (такие как возможности внутрисистемной отладки) и «всегда работает», поскольку реализован на аппаратном уровне. Однако это немного сложнее и дороже, потому что вам понадобится внешний адаптер.
BOOTLOADER
в вашем файле Makefile либо не установлен, либо установлен на false
(и не забудьте выдавать make clean
каждый раз, когда вы меняете Makefile) make autoflash
, либо запустите make openocd
в фоновом терминале и используйте make flash
Загрузчик (в контексте встроенной системы, такой как микроконтроллер) - это небольшая программа, которая записывается в начале памяти микроконтроллера и имеет две основные цели:
libtungsten предоставляет настраиваемый загрузчик, который может получать код с USB или последовательного порта.Это позволяет вам программировать микроконтроллер без адаптера, однако он никогда не будет таким мощным, как адаптер JTAG / SWD (например, вы не сможете выполнять пошаговую отладку). Сам загрузчик также необходимо однократно прошить в микроконтроллер, используя адаптер, хотя вы можете купить плату с предустановленным загрузчиком. На самом деле так работает Arduino: в микроконтроллер с завода встроен загрузчик, и IDE подключается к нему через последовательный порт.
libtungsten также предоставляет инструмент, необходимый для отправки кода в загрузчик, который называется codeuploader . Этот инструмент командной строки поддерживает как USB, так и последовательный режим.
BOOTLOADER = true
установлен в вашем файле Makefile (и не забудьте выдавать make clean
каждый раз, когда вы меняете Makefile) autoBootloaderReset
для Carbide :: init ()
), вы можете перейти непосредственно к следующему шагу; в противном случае вам необходимо перезагрузить микроконтроллер в режиме загрузчика (например, перезагрузив плату, нажав кнопку на Carbide, но это зависит от конфигурации загрузчика) make upload
Для получения более подробной информации, например, о том, как настроить загрузчик и взаимодействовать с ним, см. Специальную страницу «В загрузчике».
Если вы планируете создавать сложные проекты и можете позволить себе адаптер JTAG / SWD, дерзайте. Для простых проектов и для конечных продуктов может быть достаточно загрузчика, который предоставляет интересную функцию обновления.
JTAG (Joint Test Action Group, Joint Test Action Group) - это международный стандартный протокол тестирования (IEEE 1149.1), в основном используется для внутреннего тестирования микросхем.
В настоящее время большинство современных устройств поддерживают протокол JTAG, например, устройства ARM, DSP, FPGA и так далее.
Стандартный интерфейс JTAG состоит из 4 проводов: TMS, TCK, TDI, TDO, которые являются линиями выбора режима, синхронизации, ввода и вывода данных соответственно. Соответствующие выводы JTAG определены следующим образом:
TMS: выбор тестового режима, TMS используется для установки интерфейса JTAG в определенный тестовый режим; Сигнал TMS действителен на переднем фронте TCK.TMS является обязательной в стандарте IEEE1149.1. Сигнал TMS используется для управления переходом конечного автомата TAP. Посредством сигнала TMS можно управлять переключением TAP между различными состояниями.
TCK: вход тестового тактового сигнала; TCK обеспечивает независимый основной тактовый сигнал для работы TAP, и все операции TAP управляются этим тактовым сигналом.
TDI: интерфейс ввода тестовых данных, данные вводятся в интерфейс JTAG через вывод TDI; все данные, которые должны быть введены в конкретный регистр, вводятся бит за битом через интерфейс TDI (управляемый TCK).
TDO: Интерфейс вывода тестовых данных. Данные выводятся из интерфейса JTAG через вывод TDO; все данные, которые должны быть выведены из определенного регистра, выводятся побитно через интерфейс TDO (управляемый TCK).
Обычно бывает 10, 14 и 20 контактов. Хотя количество выводов и порядок выводов различаются, некоторые выводы одинаковы. Стоит отметить, что разные компании, занимающиеся интегральными схемами, будут определять свои собственные заголовки Jtag для своих продуктов для загрузки или отладки программ.
JTAG часто использует подключение через плоский кабель. Чтобы повысить помехоустойчивость, появляется 20-контактный интерфейс путем добавления провода заземления между каждой сигнальной линией. Но на самом деле RTCK, USER IN и USER OUT обычно не используются, поэтому имеется 14-контактный интерфейс. Для фактической разработки и применения, благодаря стабильному источнику питания в лаборатории, электромагнитная среда лучше, а помехи невелики.
Интерфейсы, которые необходимо подключить в режиме JTAG, следующие:
Вход тестовых часов (TCK) ----- Обязательный 1
Вход выбора тестового режима (TMS) ----- Обязательный 2
Вход тестовых данных (TDI) ----- Обязательный 3
Выход тестовых данных (TDO) ----- Обязательный 4
Вход тестового сброса (TRST) ---- Вариант 1: Этот сигнальный интерфейс не является обязательным в IEEE 1149.1 и не является обязательным. TRST можно использовать для сброса (инициализации) TAPController. Потому что TAP Controll также можно сбросить (инициализировать) через TMS. Итак, есть четырехпроводной JTAG и пятипроводной JTAG.
(VTREF) ----- Обязательное требование 5: Опорное напряжение уровня сигнала интерфейса обычно напрямую подключается к Vsupply. Это можно использовать для определения логического уровня, используемого интерфейсом JTAG ARM (например, 3,3 В или 5,0 В?)
Return Test Clock (RTCK) ---- Вариант 2: Необязательно.Тактовый сигнал, возвращаемый от цели к эмулятору, используется для синхронизации генерации сигнала TCK. Когда он не используется, он напрямую заземлен.
Сброс системы (nSRST) ---- Вариант 3: Дополнительно, связанный с сигналом сброса системы на целевой плате, вы можете напрямую сбросить целевую систему. В то же время может быть обнаружена ситуация сброса целевой системы. Чтобы предотвратить ложное срабатывание, к целевой клемме следует добавить соответствующий подтягивающий резистор.
USER IN: ввод, определяемый пользователем. Его можно подключить к IO, чтобы принять управление с главного компьютера.
USER OUT: определяемый пользователем выход. Может быть подключен к IO, используется для передачи статуса на главный компьютер
Имя вывода вышеуказанного заголовка Jtag предназначено для IC. Фактически для 10-контактного разъема требуется всего 4 провода. № 4 представляет собой самоподключающуюся цепь и не требует подключения. 1 и 2 подключены к контакту 1 ; а 8 и 10 подключены к GND или не подключены 。
в заключение : Режим подключения JTAG: 1 (питание), 3 (сброс TRST), 4 (земля), 5 (TDI), 7 (TMS), 9 (TCK), 13 (TDO), 15 (nSRST / Сброс)
При использовании режима SWD Jlink (эмулятора на основе JTAG) для связи с целевой платой требуется только три провода, которые могут выполнять загрузку программ, пошаговую отладку и другие функции, за исключением того, что он не может определять напряжение целевой платы и не может подавать питание на целевую плату. За исключением снижения скорости, функция аналогична полной версии JLink.
в заключение : 20-контактная база JTAG, необходимы только три провода SWDIO (TMS), SWCLK (TCK) и GND, а именно любой из No.7, № 9 и GND. Схема подключения режима SWD: 1 (питание), 4 (земля), 7 (SWDIO) и 9 (SWCLK).
J-Link - это эмулятор на основе JTAG, выпущенный немецкой компанией SEGGER. Проще говоря, это блок преобразования протокола JTAG, то есть небольшой блок преобразования USB в JTAG, который подключается к компьютеру через интерфейс USB, а протокол jtag используется внутри целевой платы. Он завершил преобразование программного обеспечения в аппаратное.
Для полнофункциональной JLink модель No.1 контакт (источник питания) выполняет две функции: для определения напряжения целевой платы; для обеспечения выходного опорного напряжения для микросхемы преобразования внутреннего уровня.
Другими словами, если напряжение целевой платы составляет 3,3 В, то здесь необходимо подать напряжение 3,3 В на контакт 1, чтобы обеспечить нормальный выход. Как видно из приведенного выше рисунка, вывод № 2 20-контактного JTAG может обеспечивать питание VCC. Когда я включаю J-Link Commander и подаю питание, обнаруживается, что контакт 2 выдает напряжение 5 В, и проблема не может быть решена путем прямого замыкания контактов 1 и 2.Следовательно, необходимо подать напряжение 3,3 В на контакт № 1 разъема Jlink на целевой плате, которое можно получить от Jlink или платы, которую нужно запрограммировать, что не имеет ничего общего с трехпроводной загрузкой SWD. режим.
Проводка SWD и проводка JTAG:
Последовательность подключения программы программирования: подключите заголовок DuPont, включите исходный JLink, дождитесь программирования и включите записывающее устройство (USB).При отключении шаги меняются в обратном порядке, и их нельзя переворачивать! Особенно не отключайте соединение на рисунке выше при включенном питании, иначе устройство сгорит!
1. Интерфейс JTAG
2. интерфейс SWD
Serial Wire Debug. По сравнению с 20 контактами JTAG, SWD требует только 4 (или 5) контактов. Структура проста, но сфера использования не такая широкая, как JTAG. Основные отладчики были добавлены позже в режиме отладки SWD.
РежимSWD более надежен, чем JTAG в высокоскоростном режиме. Если ваш эмулятор поддерживает его, рекомендуется использовать этот режим.
Если вам не хватает одного GPIO, вы можете использовать эмуляцию SWD. Этот режим поддерживает меньшее количество контактов.
Рекомендуется использовать режим SWD, когда размер вашей платы ограничен. Для этого требуется меньше контактов, и, конечно же, на печатной плате требуется мало места! Например, вы можете выбрать небольшой 5-жильный терминал с шагом 2,54 шага в качестве интерфейса моделирования.
3.Интерфейс RDI
Remote Debug Interface (Интерфейс удаленной отладки), стандартный интерфейс отладки, предложенный ARM, в основном используется для моделирования микросхем ARM. Поскольку отладочные интерфейсы, используемые каждым производителем IDE, независимы, оборудование не может выполнять кроссплатформенную отладку.
Многие производители IDE в настоящее время постепенно принимают стандартный RDI в качестве интерфейса отладки эмулятора ARM, что делает возможной кроссплатформенную аппаратную отладку.
EasyJTAG использует стандартный интерфейс отладки RDI, поэтому его можно использовать в любой среде отладки IDE, которая использует стандартный интерфейс RDI, например ADS1 от ARM.2 / EWARM от IAR 3.30.
4. эмулятор JLINK
JLINK - это общий инструмент разработки, который можно использовать на таких платформах, как KEIL, IAR и ADS. Скорость, эффективность и функции очень хороши. Он считается самым мощным среди многих эмуляторов.
5. Эмулятор ULINK
ULINK - эмулятор, выпущенный компанией ARM / KEIL. Обновленную версию, эмуляторы ULINK2 и ULINK Pro, можно найти в Интернете. ULINK / ULINK2 может взаимодействовать с программным обеспечением Keil для реализации функции моделирования и может использоваться только в программном обеспечении Keil, добавляя поддержку последовательной отладки (SWD), поддержку часов возврата и функции прокси в реальном времени.
Инженеры-разработчикимогут легко выполнять отладку на кристалле (с использованием встроенных JTAG, SWD и OCDS) и программирование Flash на целевом оборудовании, комбинируя отладчик RealView MDK и ULINK2.
Но следует отметить, что ULINK - это эмулятор, разработанный компанией KEIL, предназначенный для использования на платформе KEIL, и не может использоваться в ADS и IAR.
6. Эмулятор ST-LINK
ST-LINK - эмулятор микросхем серий STMicroelectronics STM8 и STM32. Основные функции стандартного интерфейса SWIM и стандартного интерфейса JTAG / SWD, указанного в ST-LINK / V2:
Функция программирования: может записывать и записывать FLASH ROM, EEPROM, AFR и т. Д.; Функция моделирования
: поддерживает различные методы отладки, такие как работа на полной скорости, пошаговая отладка, отладка точки останова и т. Д., А также может просматривать статус ввода-вывода, переменные данные и т. Д .;
Производительность моделирования: используйте интерфейс USB2.0 для отладки моделирования, пошаговой отладки, отладки точки останова, высокой скорости отклика;
Производительность программирования: используйте интерфейс USB2.0 для загрузки SWIM / JTAG / SWD, скорость загрузки высокая;
Отладчики JTAG и SWD - предпочтительный способ взаимодействия с устройствами в SJSU-Dev2, поскольку они предоставляют два основных преимущества.
SJSU-Dev2 использует программы OpenOCD и GDB для вышеуказанных целей, но у этой комбинации есть одно предостережение: у GDB нет чистого способа принять STDIN с клавиатуры.
SWD расшифровывается как Serial Wire Debug и является предпочтительным решением для SJSU-Dev2 из-за
из-за меньшего количества выводов по сравнению с JTAG.SWD использует два контакта для отладки, SWCLK
, опорный вывод тактовой частоты и SWDIO
, вывод ввода / вывода данных. Некоторый
платы разработки будут опускать префикс SW
для экономии места и будут просто отображать CLK
и DIO
.
JTAG также может использоваться в SJSU-Dev2, но имеет гораздо больше контактов, таких как следующие TDI
, TMS
, TCK
и TDO
.
При использовании обоих стандартов вам потребуется подключить перемычку между Контакты SWD на устройстве отладчика и отладочной плате.
В этом примере в качестве примера используется синяя таблетка STM32F10x, но это руководство также может использоваться для любой другой платы разработки, пока отладочные контакты доступны как соединения.
Если у вас нет деталей, вы можете купить их на Amazon по этим ссылкам:
Примечание
Существуют и другие типы отладчиков, например отладчики Segger. отладчики. Они также будут работать с SJSU-Dev2, но они, как правило, более дорого.
Заземление ( GND
) должно быть выполнено между отладчиком и
Совет по развитию, чтобы устройства могли обмениваться данными.
Опасность
ДВОЙНОЙ И ТРОЙНОЙ ПРОВЕРЬТЕ СОЕДИНЕНИЯ! Неправильные подключения могут привести к сломать плату, отладчик или, возможно, ваш компьютер.
Подключите перемычки от контактов GND
, TDI
, TMS
, TCK
и TDO
к JTAG
отладчик в заголовки на одноименной плате разработки.
Подключите перемычки от GND
, SWDIO
и SWDCLK
к контактам на плате. Если
плата поддерживает как SWD
, так и JTAG
, как это делают многие платы для рук, тогда
соедините штифты следующим образом:
SWDIO
-> TMS
SWDCLK
-> TCK
K4x USB и сегментный ЖК-дисплей |
|
i.Микроконтроллеры MX RT Crossover |
|
K6x Ethernet |
|
K2x USB |
|
Серия KE Cortex-M4 / M0 + |
|
K1x Основной |
|
LPC5500 Cortex-M33 |
|
LPC1100 Cortex-M0 + / M0 |
|
LPC1500 Cortex-M3 |
|
LPC800 Cortex-M0 + |
|
K8x Secure |
|
| |
K32 L серии Cortex-M4 / M0 + |
|
Серия KL Cortex-M0 + |
|
Серия КМ Cortex-M0 + |
|
Сегментный ЖК-дисплей K3x |
|
Серия KV Cortex-M4 / M0 + / M7 |
|
Измерение K5x |
|
K0x начального уровня |
|
Графический ЖК-дисплей K7x |
|
LPC54000 Cortex-M4 |
|