CuVoodoo

the sorcery of copper

User Tools

Site Tools


jtag

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revisionBoth sides next revision
jtag [2016/02/12 09:59] – add st-link v2 stm32 pinout kingkevinjtag [2016/02/17 10:22] – fix JTAG to SWJ, restructure kingkevin
Line 1: Line 1:
-Here I will describe my experiences with JTAG and how I use it. +JTAG is a technology to test integrated circuits, mostly micro-controllers and CPUs
- +It allows to do hardware debugging: read/write memory, control I/Osand debug running code.\\ 
-JTAG is a technology to test electronics+SWD is a more modern version of JTAG and only requires 2 pins instead of 4[+1].\\ 
-It allows to do hardware debugging: test I/Oflash firmwares, step through assembly code...+SWJ is a combination of Serial Wire Debug (SWD) and JTAG. 
 +But they provide the same logical functions.
  
 On one side this functionality must be included in the target device. On one side this functionality must be included in the target device.
-Most 32 bits micro-controllers and SoCs have it.\\ +The Debug Port is often called JTAG-DP for JTAG and SW-DP for SWD
-On the other side you need a JTAG adapter so the host can speak to the device using the JTAG protocol. +SWJ capable device include and often combine both, as the SWD signal pins SWDIO and SWCLK re-use the JTAG signal pin JTMS and JTCK (backwards compatible).
-JTAG adapters can go from cheap (<5$to expensive (>1000$), depending on the quality of the hardware and software.+
  
-===== JTAG adapters =====+Most 32 bits micro-controllers and SoCs have one of both (or both).\\ 
 +On the other side you need a SWJ adapter so the host can speak to the device using the JTAG and/or SWD protocol. 
 +SWJ adapters can go from cheap (<5$) to expensive (>1000$), depending on the quality of the hardware and software.
  
-These are the main JTAG adapters I am using.+====== SWJ adapters ======
  
-==== ST-Link v2 (clone) ====+These are the main SWJ adapters I am using. 
 + 
 +===== ST-Link v2 =====
  
 The [[http://www.st.com/web/catalog/tools/FM146/CL1984/SC724/SS1677/PF251168|ST-LINK/V2]] is from STMicroelectronics, and is very convenient to flash their STM8 and STM32 micro-controllers, such as the [[stm32f1xx|STM32 F1 series]]. The [[http://www.st.com/web/catalog/tools/FM146/CL1984/SC724/SS1677/PF251168|ST-LINK/V2]] is from STMicroelectronics, and is very convenient to flash their STM8 and STM32 micro-controllers, such as the [[stm32f1xx|STM32 F1 series]].
 +It supports JTAG, SWD, and SWIM (for STM8).
 +
 +These SWJ adapters are based STM32F1xx ARM Cortex M3 micro-controllers.
 +And ironically enough I in turn use them to program and debug STM32F1xx ARM Cortex M3 micro-controllers.
 +
 +First add the rules for normal users to be able to access the device (udev rule based on the VID and PID shown by lsusb).
 +This has only to be done once, before the device is plugged in to be used:
 +<code bash>
 +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
 +</code>
 +  
 +To connect to STM32F1xx ARM Cortex M3 micro-controllers I use OpenOCD:
 +<code bash>
 +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
 +</code>
 +
 +I am using cheap clones.
 +
 +
 +==== BAITE ====
 +
 +The first clone is a [[http://www.aliexpress.com/item/Free-Shipping-1SET-ST-Link-st-link-V2-for-STM8S-STM8L-STM32-Cortex-M0-Cortex-M3/1758613434.html|BAITE]] ST-Link V2.
 +It supports JTAG, SWD, and SWIM (for STM8).
  
-I have two cheap clones: 
-  * one from [[http://www.aliexpress.com/item/Free-Shipping-1SET-ST-Link-st-link-V2-for-STM8S-STM8L-STM32-Cortex-M0-Cortex-M3/1758613434.html|BAITE]] 
 {{:jtag:dsc02404.jpg?0x100|device front}} {{:jtag:dsc02404.jpg?0x100|device front}}
 {{:jtag:dsc02405.jpg?0x100|device back}} {{:jtag:dsc02405.jpg?0x100|device back}}
Line 25: Line 69:
 {{:jtag:st-link_v2_baite.svg?0x100|pinout}} {{:jtag:st-link_v2_baite.svg?0x100|pinout}}
  
 +STM32F103C8 connection:
 ^ STM32F103C8 signal ^ STM32F103C8 pin ^ adapter pin ^ adapter signal ^ ^ STM32F103C8 signal ^ STM32F103C8 pin ^ adapter pin ^ adapter signal ^
 | PA7 | 17 | 1 | JRST | | PA7 | 17 | 1 | JRST |
Line 41: Line 86:
 the adapter pins are protected with a 220 ohms resistor. the adapter pins are protected with a 220 ohms resistor.
  
-  * one [[http://www.aliexpress.com/item/Hot-Sale-1PCS-ST-LINK-Stlink-ST-Link-V2-Mini-STM8-STM32-Simulator-Download-Programmer-Programming/32343514985.html|more generic]]+==== aluminium ==== 
 + 
 +This [[http://www.aliexpress.com/item/Hot-Sale-1PCS-ST-LINK-Stlink-ST-Link-V2-Mini-STM8-STM32-Simulator-Download-Programmer-Programming/32343514985.html|one]] comes in aluminium case. 
 +It supports SWD, and SWIM (for STM8), but not JTAG. 
 +They replaced the additional JTAG pins with power pins. 
 {{:jtag:dsc02407.jpg?0x100|device front}} {{:jtag:dsc02407.jpg?0x100|device front}}
 {{:jtag:dsc02408.jpg?0x100|device back}} {{:jtag:dsc02408.jpg?0x100|device back}}
Line 47: Line 97:
 {{:jtag:dsc02410.jpg?0x100|PCB back}} {{:jtag:dsc02410.jpg?0x100|PCB back}}
  
 +STM32F103C8 connection:
 ^ STM32F103C8 signal ^ STM32F103C8 pin ^ adapter pin ^ adapter signal ^ ^ STM32F103C8 signal ^ STM32F103C8 pin ^ adapter pin ^ adapter signal ^
 | PB6 | 42 | 1 | RST | | PB6 | 42 | 1 | RST |
Line 60: Line 111:
 | PA9 | 30 | current source  | LED | | PA9 | 30 | current source  | LED |
  
-These devices use the Serial Wire Debug (SWD) protocol. +===== Altera USB-Blaster =====
-This is newer variant of JTAG which requires only 2 signal lines instead of 4+. +
-But but aware, they both have different pinouts on the connector. +
-The second one offers 2 more power ports at the expense of JTAG TDI and TDO/SWO. +
- +
-These JTAG adapters are based STM32F1xx ARM Cortex M3 micro-controllers. +
-And ironically enough I in turn use them to program and debug STM32F1xx ARM Cortex M3 micro-controllers. +
- +
-First add the rules for normal users to be able to access the device (udev rule based on the VID and PID shown by lsusb). +
-This has only to be done once, before the device is plugged in to be used: +
-<code bash> +
-echo -n 'STM32F1xx ARM Cortex M3 micro-controllers' | 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 +
-</code> +
-   +
-To connect to STM32F1xx ARM Cortex M3 micro-controllers I use OpenOCD: +
-<code bash> +
-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 +
-</code> +
- +
-==== Altera USB-Blaster (clone) ====+
  
 The [[https://www.buyaltera.com/PartDetail?partId=1212940|USB-Blaster]] is from Altera. The [[https://www.buyaltera.com/PartDetail?partId=1212940|USB-Blaster]] is from Altera.
Line 188: Line 201:
 </code> </code>
  
-==== SEGGER J-Link (clone) ====+===== SEGGER J-Link =====
  
 The [[http://www.aliexpress.com/item/FREE-SHIPPING-V8-ARM-Emulator-supports-ARM7-ARM9-ARM11-Cortex-M3-core-ADS-IAR-STM32-Emulator/32262570128.html|O-Link-ARM V8]] is a [[https://www.segger.com/jlink_base.html|SEGGER J-Link]] clone. The [[http://www.aliexpress.com/item/FREE-SHIPPING-V8-ARM-Emulator-supports-ARM7-ARM9-ARM11-Cortex-M3-core-ADS-IAR-STM32-Emulator/32262570128.html|O-Link-ARM V8]] is a [[https://www.segger.com/jlink_base.html|SEGGER J-Link]] clone.
Line 199: Line 212:
 That makes it the most complete JTAG adapter I have. That makes it the most complete JTAG adapter I have.
  
-===== tricks =====+====== tricks ======
  
-==== scan chain ====+===== scan chain =====
  
 JTAG devices are called Test Access Points (TAP). JTAG devices are called Test Access Points (TAP).
jtag.txt · Last modified: 2024/01/07 17:49 by 127.0.0.1