jtag
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
jtag [2016/01/13 09:02] – [Altera USB-Blaster (clone)] kingkevin | jtag [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: | |
- | 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: | + | 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 | + | 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 |
- | JTAG adapters can go from cheap (<5$) to expensive (> | + | |
- | ===== 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 | ||
- | These are the main JTAG adapters | + | ====== SWJ adapters |
- | ==== ST-Link v2 (clone) | + | These are the main SWJ adapters I am using. |
+ | |||
+ | ===== ST-Link v2 ===== | ||
The [[http:// | The [[http:// | ||
+ | It supports JTAG, SWD, and SWIM (for STM8). | ||
- | I have two cheap clones: | + | These SWJ adapters |
- | * one from [[http:// | + | |
- | {{: | + | |
- | {{: | + | |
- | {{: | + | |
- | {{: | + | |
- | {{: | + | |
- | * one [[http:// | + | |
- | {{: | + | |
- | {{: | + | |
- | {{: | + | |
- | {{: | + | |
- | + | ||
- | These devices use the Serial Wire Debug (SWD) protocol. | + | |
- | 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. | + | |
- | + | ||
- | These JTAG adapter | + | |
And ironically enough I in turn use them to program and debug STM32F1xx ARM Cortex M3 micro-controllers. | And ironically enough I in turn use them to program and debug STM32F1xx ARM Cortex M3 micro-controllers. | ||
Line 40: | Line 28: | ||
This has only to be done once, before the device is plugged in to be used: | This has only to be done once, before the device is plugged in to be used: | ||
<code bash> | <code bash> | ||
- | echo -n 'STM32F1xx ARM Cortex M3 micro-controllers' | sudo tee -a / | + | echo -n 'ST-Link V2 SWJ adapter' | sudo tee -a / |
echo -n ' | echo -n ' | ||
sudo udevadm control --reload-rules | sudo udevadm control --reload-rules | ||
Line 67: | Line 55: | ||
</ | </ | ||
- | ==== Altera | + | I am using cheap clones. |
+ | |||
+ | |||
+ | ==== BAITE ==== | ||
+ | |||
+ | The first clone is a [[http:// | ||
+ | It supports JTAG, SWD, and SWIM (for STM8). | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | STM32F103C8 connection: | ||
+ | ^ STM32F103C8 signal ^ STM32F103C8 pin ^ adapter pin ^ adapter signal ^ | ||
+ | | PA7 | 17 | 1 | JRST | | ||
+ | | AMS1117 | | 2 | 3V3 | | ||
+ | | USB VCC | | 3 | 5V | | ||
+ | | PA4 | 14 | 4 | JTCK/SWCLK | | ||
+ | | PB11 | 22 | 5 | SWIM | | ||
+ | | PA14 | 37 | 6 | JTMS/SWDIO | | ||
+ | | USB GND | | 7 | GND | | ||
+ | | PA5 | 15 | 8 | JTDO | | ||
+ | | PB6 | 42 | 9 | SWIM_RST | | ||
+ | | PA6 | 16 | 10 | JTDI | | ||
+ | | PB12,PB14 | 25,27 | | 100 ohms | | ||
+ | | PB5 | 41 | | LED | | ||
+ | |||
+ | the adapter pins are protected with a 220 ohms resistor. | ||
+ | |||
+ | ==== aluminium ==== | ||
+ | |||
+ | This [[http:// | ||
+ | It supports SWD, and SWIM (for STM8), but not JTAG. | ||
+ | They replaced the additional JTAG pins with power pins. | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | STM32F103C8 connection: | ||
+ | ^ STM32F103C8 signal ^ STM32F103C8 pin ^ adapter pin ^ adapter signal ^ | ||
+ | | PB6 | 42 | 1 | RST | | ||
+ | | PB14 | 27 | 2 | SWDIO | | ||
+ | | USB GND | | 3 | GND | | ||
+ | | USB GND | | 4 | GND | | ||
+ | | PB8/PB11 | 45/22 | 5 | SWIM | | ||
+ | | PA5/PB13 | 15/26 | 6 | SWCLK | | ||
+ | | LDO VCC | | 7 | 3.3V | | ||
+ | | LDO VCC | | 8 | 3.3V | | ||
+ | | USB VCC | | 9 | 5V | | ||
+ | | USB VCC | | 10 | 5V | | ||
+ | | PA9 | 30 | current source | ||
+ | |||
+ | ===== Altera USB-Blaster ===== | ||
The [[https:// | The [[https:// | ||
Line 156: | Line 200: | ||
Info : stm32f1x.cpu: | Info : stm32f1x.cpu: | ||
</ | </ | ||
- | ===== tricks ===== | ||
- | ==== scan chain ==== | + | ===== SEGGER J-Link ===== |
+ | |||
+ | The [[http:// | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | It supports JTAG, SWD, SWO, RTCK, and voltage reference. | ||
+ | That makes it the most complete JTAG adapter I have. | ||
+ | |||
+ | ====== tricks ====== | ||
+ | |||
+ | ===== scan chain ===== | ||
JTAG devices are called Test Access Points (TAP). | JTAG devices are called Test Access Points (TAP). | ||
Line 167: | Line 223: | ||
Thus it sometimes is useful to just list the TAPs available on a chain to know which devices are present. | Thus it sometimes is useful to just list the TAPs available on a chain to know which devices are present. | ||
- | This is easily done with urJTAG: | + | This is easily done with urJTAG |
<code bash> | <code bash> | ||
jtag | jtag | ||
Line 213: | Line 269: | ||
Warn : AUTO auto1.tap - use "jtag newtap auto1 tap -irlen 5 -expected-id 0x16410041" | Warn : AUTO auto1.tap - use "jtag newtap auto1 tap -irlen 5 -expected-id 0x16410041" | ||
Warn : gdb services need one or more targets defined | Warn : gdb services need one or more targets defined | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | While the ST-Link v2 is mainly meant to be used as SWD adapter, it also supports JTAG. Both are implemented with the High Level Adapter (HLA) driver. But it seems scan chain is [[http:// | ||
+ | <code bash> | ||
+ | openocd --file interface/ | ||
+ | |||
+ | Open On-Chip Debugger 0.10.0-dev-00189-g554313b (2016-01-12-16: | ||
+ | Licensed under GNU GPL v2 | ||
+ | For bug reports, read | ||
+ | http:// | ||
+ | hla_jtag | ||
+ | adapter speed: 100 kHz | ||
+ | Info : clock speed 100 kHz | ||
+ | Error: BUG: current_target out of bounds | ||
</ | </ |
jtag.txt · Last modified: 2024/01/07 17:49 by 127.0.0.1