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 revision
Previous revision
Next revisionBoth sides next revision
jtag [2017/03/30 12:42] – add MB936 kingkevinjtag [2019/02/11 18:24] – [SEGGER J-Link] kingkevin
Line 61: Line 61:
 {{:jtag:mb936_case-front.jpg?0x150|case front}} {{:jtag:mb936_case-front.jpg?0x150|case front}}
 {{:jtag:mb936_case-back.jpg?0x150|case back}} {{:jtag:mb936_case-back.jpg?0x150|case back}}
-{{:jtag:mb936_internal-front.jpg?0x150|internal front}} 
 {{:jtag:mb936_internal-front2.jpg?0x150|internal front}} {{:jtag:mb936_internal-front2.jpg?0x150|internal front}}
 {{:jtag:mb936_internal-back.jpg?0x150|internal back}} {{:jtag:mb936_internal-back.jpg?0x150|internal back}}
Line 68: Line 67:
 It comes in the same box, with the same cables, the enclosure is the same, even the board name has been taken over (MB936), but the board isn't the same. It comes in the same box, with the same cables, the enclosure is the same, even the board name has been taken over (MB936), but the board isn't the same.
 The BOM doesn't match with the [[http://www.st.com/resource/en/bill_of_materials/st-link_v2_bom.zip|original]].\\ The BOM doesn't match with the [[http://www.st.com/resource/en/bill_of_materials/st-link_v2_bom.zip|original]].\\
-The original adapter come with ESD protection, protection resistors, and a transceiver to allow operating with target signal levels of 1.65V to 5.5V.+The original adapter comes with ESD protection, protection resistors, and a transceiver to allow operating with target signal levels of 1.65V to 5.5V.
 This is completely missing on the clone since the connector pins are directly connected to the micro-controller. This is completely missing on the clone since the connector pins are directly connected to the micro-controller.
 Thus it only supports target signal levels of 3.3V and sometimes 5V since the pins are 5V tolerant. Thus it only supports target signal levels of 3.3V and sometimes 5V since the pins are 5V tolerant.
Line 74: Line 73:
 For $9 you can't expect more, and if you want a cheap adapter I recommend the other ones (see below). For $9 you can't expect more, and if you want a cheap adapter I recommend the other ones (see below).
  
-==== BAITE ====+==== ST-LINK V2 aluminium ====
  
-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+These adapters come in a small dongle sized aluminium case. 
-It supports JTAG, SWD, and SWIM (for STM8).+They supports SWD, and SWIM (for STM8), but not JTAG. 
 + 
 +At $2.5 they are the cheapest clones you can find.\\ 
 +One trick to get this ridiculously low price is to use STM32F101 micro-controllers. 
 +Compared to the STM32F103 micro-controllers they offer less functionalities, like USB ... yet this is a USB dongle! 
 +Well this is because these micro-controllers use the same die, but if not all STM32F103 feature tests pass after production they get packages as STM32F101, but it seems that USB still works well enough. 
 +At least this is my guess. 
 +It would be interesting to check if the other STM32F103 peripherals normally not present on the STM32F101 work as well, but I wouldn't rely on these. 
 +After all, they are probably marked as STM32F101 for a good reason.\\ 
 +Similarly the STM32F103C8 is only rated having 64 kB of flash because it didn't pass the flash test, compared to the 128 kB for the STM32F103CB, but they very often have more (you can verify by read/writing and check for errors). 
 + 
 +Several board versions exist and it is hard to know what you will get. 
 +Always check the pinout on the aluminium case since this also varies. 
 + 
 +=== 2014-06-22 ST-LINK V2 === 
 + 
 +{{:jtag:alu_dongle_front.jpg?0x100|}} 
 +{{:jtag:alu_board_front.jpg?0x100|}} 
 +{{:jtag:alu_board_back.jpg?0x100|}} 
 + 
 +I've also reversed the {{:jtag:alu.pdf|schematic}} for this board. 
 + 
 +One other nice trick they used is to have twos LEDs on the same pin (PA9): 
 +  * when the pin is set to output high, only one LED lights up 
 +  * when the pin is set to output low, the other LED light up 
 +  * when set to input floating, both LEDs are off 
 +  * when PWM output is used, you can mix the two colors (red and blue) quite well due to the persistence of vision (also because the LEDs are next to each other and the small hole in the case is in the center). 
 + 
 +=== swapped === 
 + 
 +{{:jtag:reverse-gnd_case-front.jpg?0x100|}} 
 +{{:jtag:reverse-gnd_internal-front.jpg?0x100|}} 
 +{{:jtag:reverse-gnd_internal-back.jpg?0x100|}} 
 + 
 +From the outside this looks very similar to the previous one, except that the connector pinout is very different (except for power) and there is only one LED.\\ 
 +No markings are on the board. 
 + 
 +=== 2016-01-18 MX-LINK V2 === 
 + 
 +{{:jtag:mx-link__case-front.jpg?0x100|}} 
 +{{:jtag:mx-link__internal-front.jpg?0x100|}} 
 +{{:jtag:mx-link__internal-back.jpg?0x100|}} 
 + 
 +This one has an "M" logo instead of the ST logo, probably corresponding to the "MX-LINK V2" marking on the board. 
 + 
 +==== Baite ==== 
 + 
 +{{:jtag:baite_dongle_front.jpg?0x100|dongle front}} 
 +{{:jtag:baite_dongle_back.jpg?0x100|dongle back}} 
 +{{:jtag:baite_board_front.jpg?0x100|board front}} 
 +{{:jtag:baite_board_back.jpg?0x100|board front}} 
 + 
 +The [[http://betemcu.cn/|Baite]] [[https://www.aliexpress.com/store/product/Best-Quality-ST-Link-stlink-V2-for-STM8S-STM8L-STM32-Cortex-M0-Cortex-M3-SWIM-JTAG/213957_32676015777.html|ST-Link V2]] is my favorite clone since it supports JTAG, SWD, and SWIM (for STM8)
 + 
 +They seem to use the same board also for several other programmers, and since the pinout is not on the case I've decided to make my own sticker.
  
-{{:jtag:dsc02404.jpg?0x100|device front}} 
-{{:jtag:dsc02405.jpg?0x100|device back}} 
-{{:jtag:dsc02403.jpg?0x100|PCB front}} 
 {{:jtag:dsc02406.jpg?0x100|pinout sticker}} {{:jtag:dsc02406.jpg?0x100|pinout sticker}}
 {{:jtag:st-link_v2_baite.svg?0x100|pinout}} {{:jtag:st-link_v2_baite.svg?0x100|pinout}}
  
-STM32F103C8 connection: +I've also reversed the board layout to get the {{:jtag:baite.pdf|schematic}}. 
-^ STM32F103C8 signal ^ STM32F103C8 pin ^ adapter pin ^ adapter signal ^ +The connector pins are all protected with 220 ohms resistors.
-| 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.+{{:jtag:baite-v2a-board_front.jpg?0x100|board front}} 
 +{{:jtag:baite-v2a-board_back.jpg?0x100|board front}}
  
-==== aluminium ====+There is a newer version marked as "V2A" (under the crystal), but the {{:jtag:baite-v2a.pdf|schematic}} is pretty much the same with the following changes: 
 +  * all pads for the micro-controller are present (there is even solder mask between them) 
 +  * they added a SWD port 
 +  * the STM32F103C8 has been replaced with a STM32F101CB, but they are treating it as a STM32F103 (like the other cheap dongles) 
 +  * the passives are smaller 
 +  * the routing is horrible
  
-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. +===== Black Magic Probe =====
-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}} +The [[https://github.com/blacksphere/blackmagic/wiki|Black Magic Probe]] (aka. BMP) is a quite nice SWJ adapter because it comes with an embedded GDB server. 
-{{:jtag:dsc02408.jpg?0x100|device back}} +Thus no need to have an OpenOCD server to control the SWJ adapter
-{{:jtag:dsc02415.jpg?0x100|PCB front}} +You can directly connect GDB to this adapter (over USB CDC ACM).\\ 
-{{:jtag:dsc02410.jpg?0x100|PCB back}}+It also comes with a UART port (over a second USB CDC ACM). 
 +This is very useful while developing (for printf debugging).
  
-STM32F103C8 connection+The hardware comes with some disadvantages though
-^ STM32F103C8 signal ^ STM32F103C8 pin ^ adapter pin ^ adapter signal ^ +  * the ARM Cortex SWJ connector uses a small header (not very dupont-wire friendly) 
-| PB6 | 42 | 1 | RST | +  * the separate UART is not always populated (UART is also available on the SWJ connector) 
-| PB14 | 27 | 2 | SWDIO | +  * it is expensive (> $50), but this price is quite reasonable since it supports the project 
-| USB GND |  | 3 | GND | +  * it was sold out for quite some time, encouraging me to look for an alternative
-| 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  | LED |+
  
 +Because the firmware is open source it is possible to port it to other hardware, and [[https://github.com/blacksphere/blackmagic/wiki/Debugger-Hardware|people already did it]].\\
 +It has been [[https://medium.com/@paramaggarwal/converting-an-stm32f103-board-to-a-black-magic-probe-c013cf2cc38c|ported]] on the [[stm32f1xx#blue_pill|blue pill]], but I don't find this board as handy as a dongle.\\
 +It has also been [[http://blog.linuxbits.io/2016/02/15/cheap-chinese-st-link-v-2-programmer-converted-to-black-magic-probe-debugger/|ported]] to the [[#st-link_v2_aluminium|ST-Link V2 clone]], but then there is no additional UART anymore.\\
 +So I decided to port it to the [[#baite|baite]].
 +This has less power pins (who needs 2xGND, 2x5V, 3x3.3V anyway), but provides enough function pins to add UART (and SRST).
 +
 +To build the firmware ([[https://github.com/blacksphere/blackmagic/pull/274|patch]] integration pending):
 +<code bash>
 +git clone https://github.com/tsaitgaist/blackmagic.git
 +cd blackmagic
 +git submodule init
 +git submodule update
 +make
 +cd src
 +make clean
 +make PROBE_HOST=baite
 +</code>
 +
 +Now we need to re-flash the Baite dongle.\\
 +As you can see on the {{:jtag:baite.pdf|schematic}} the JTAG and SWD pins of the micro-controller are not connected (there even are no pads on the board for the pins to be soldered on).
 +But on the back of the board you can find test points so to program the device using the serial bootloader:
 +
 +^ pin ^ signal ^
 +| 1 (square) | RX |
 +| 2 | TX |
 +| 3 | BOOT0 |
 +| 4 | +5V |
 +| 5 | GND |
 +
 +Use any USB to UART converter and connect the corresponding pins to this port.
 +Don't power the Baite dongle over USB since it might then boot the normal application.
 +Instead let the USB to UART converter power it.
 +To start the serial bootloader when powering the dongle you need to set BOOT0 high by connecting it to +3.3V or DTR (or any high signal present on the USB to UART converter).
 +
 +To flash the Black Magic firmware I used [[https://sourceforge.net/p/stm32flash/wiki/Home/|stm32flash]].
 +Since the flash is read/write protected you first need to clear these option bits.
 +
 +<code bash>
 +# 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 blackmagic_dfu.bin -v /dev/ttyUSB0
 +# flash the main firmware
 +stm32flash -w blackmagic.bin -v -S 0x08002000 /dev/ttyUSB0
 +</code>
 +
 +Unplug and re-plug the Baite dongle.
 +The adapter should be running the main application and two USB CDC ACM ports will appear.
 +
 +You can re-flash the device from the main application using the DFU bootloader with:
 +<code bash>
 +python2 ../scripts/stm32_mem.py blackmagic.bin
 +</code>
 +
 +Note: Since this adapter is based on an STM32F103C8 micro-controller with 64 kB of flash the DFU bootloader only advertises 56 kB of flash available for the main application.
 +Because the blackmagic firmware exceeds this size it will not be possible to flash it through if the DFU software doesn't ignore this restriction (i.e. ''dfu-util'').
 +STM32F103C8 micro-controllers often have 128 kB of flash though, thus it is still possible to flash the blackmagic firmware using the serial bootloader (at address 0x08002000, with verification enbaled ot ensured the whole firmware has been written successfully) or ''stm32_mem''.
 +
 +Here is the new "BMP Baite" {{ :jtag:bmp_baite.pdf |pinout}}:
 +^ signal ^ pin ^ pin ^ signal ^
 +| SRST | 1 | 2| +3.3V |
 +| +5V | 3 | 4 | JTCK/SWCLK |
 +| RX | 5 (key) | 6 | JTMS/SWDIO |
 +| GND | 7 | 8 | JTDO/TRACESWO |
 +| TX | 9 | 10 | JTDI |
 +
 +**note**: the RX pin is pulled up by a 620 ohms resistor. Thus the TX connected to BMP Baite must by strong enough to drive it low (e.g. not like with the CH340 USB to UART converter).
 +
 +If you connect SRST to the target NRST, it is even possible to reset the target board without having to press on the on-board reset button (of there is any):
 +<code bash>
 +gdb --eval-command="target extended-remote /dev/ttyACM0" --eval-command="monitor hard_srst" --eval-command="quit"
 +</code>
 ===== Altera USB-Blaster ===== ===== Altera USB-Blaster =====
 +
 +{{ :jtag:dsc02418.jpg?0x150|device front}}
  
 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.
 It is often used to flash FPGA, but is a general purpose JTAG adapter. It is often used to flash FPGA, but is a general purpose JTAG adapter.
- 
-I have a cheap [[http://www.aliexpress.com/item/Free-shipping-New-Mini-Usb-Blaster-Cable-For-CPLD-FPGA-NIOS-JTAG-Altera-Programmer-in-stock/806527241.html|Rev.c clone]]. 
-The original uses FTDI FT245 and MAX CPLD chips. 
-This one uses a Silicon Labs C8051F321 micro-controller and a 74LVC125 quad buffer, but there are many other clone variants. 
- 
-{{:jtag:dsc02418.jpg?0x100|device front}} 
-{{:jtag:dsc02419.jpg?0x100|device back}} 
-{{:jtag:dsc02420.jpg?0x100|PCB front}} 
-{{:jtag:dsc02424.jpg?0x100|PCB back}} 
  
 :!: be aware that here the VCC{TARGET} pin has to be connected to a reference voltage used for the JTAG communication, generally provided by the target device on the board (often 3.3V or 1.8V). :!: be aware that here the VCC{TARGET} pin has to be connected to a reference voltage used for the JTAG communication, generally provided by the target device on the board (often 3.3V or 1.8V).
Line 152: Line 256:
 </code> </code>
  
-To be able to use it I had to recompile OpenOCD for the USB-Blaster to use libftdi (probable because it's a clone).+To be able to use it I had to recompile OpenOCD for the USB-Blaster to use libftdi (maybe because it's a clone).
 <code bash> <code bash>
 git clone http://git.code.sf.net/p/openocd/code openocd-code git clone http://git.code.sf.net/p/openocd/code openocd-code
Line 216: Line 320:
 Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
 </code> </code>
 +
 +The original uses FTDI FT245 and MAX CPLD chips.
 +There are numerous clone variants, with various quality and voltage support.
 +
 +==== SiLabs USB-Blaster ====
 +
 +This one uses a Silicon Labs C8051F321 micro-controller and a 74LVC125 quad buffer (for signal voltages from 1.65 to 3.6 V).
 +
 +{{:jtag:mini_silabs_front.jpg?0x150|SiLabs USB-Blaster front}}
 +{{:jtag:mini_silabs_back.jpg?0x150|SiLabs USB-Blaster back}}
 +
 +==== PIC USB-Blaster ====
 +
 +This one uses a Microchip PIC18F14 micro-controller and has no buffer (thus only supporting 5 V signals).
 +
 +{{:jtag:mini_pic_front.jpg?0x150|PIC USB-Blaster front}}
 +{{:jtag:mini_pic_back.jpg?0x150|PIC USB-Blaster back}}
 +
 +==== ARMJISHU USB-Blaster ====
 +
 +This one uses a ST STM32F101 (as a STM32F103 with USB support) micro-controller and a 74HC244 octal-buffer (for signal voltages from 2.0 to 6.0 V).
 +
 +{{:jtag:mini_stm32_front.jpg?0x150|ARMJISHU USB-Blaster front}}
 +{{:jtag:mini_stm32_back.jpg?0x150|ARMJISHU USB-Blaster back}}
 +
 +I also reversed the {{:jtag:bus_blaster-stm32.pdf|schematic}}.
 +It shows that the hardware can also drive the signals (at 3.3 V) in case Vcc_target is not connected, and you can add an uSD card slot or SPI flash.
 +I don't know if these features are supported in software.
 +
 +{{:jtag:mini_stm32_front-board.jpg?0x150|ARMJISHU board USB-Blaster front}}
 +{{:jtag:mini_stm32_back-board.jpg?0x150|ARMJISHU board USB-Blaster back}}
  
 ===== SEGGER J-Link ===== ===== 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 [[https://www.segger.com/jlink_base.html|SEGGER J-Link]] supports JTAG, SWD, SWO, RTCK, and voltage reference (or provide 3.3V). 
 +That makes it one of the most complete JTAG adapter. 
 + 
 +There are plenty of different J-Link clones available, from light version with the minimum number of components, to full version with all features. 
 + 
 +The come in the same case:
  
 {{:jtag:imag0403.jpg?0x150|device front}} {{:jtag:imag0403.jpg?0x150|device front}}
 {{:jtag:imag0404.jpg?0x150|device back}} {{:jtag:imag0404.jpg?0x150|device back}}
-{{:jtag:imag0406.jpg?0x150|PCB front}} 
  
-It supports JTAG, SWD, SWO, RTCK, and voltage reference+Here a J-Link v8 with large passives: 
-That makes it the most complete JTAG adapter I have.+ 
 +{{:jtag:jlink-v8-large-front.jpg?0x150|board front}} 
 +{{:jtag:jlink-v8-large-back.jpg?0x150|board back}} 
 + 
 +Here a J-Link v8 with smaller and a bit less passives: 
 + 
 +{{:jtag:jlink-v8-thin-front.jpg?0x150|board front}} 
 +{{:jtag:jlink-v8-thin-back.jpg?0x150|board back}} 
 + 
 +Here a light J-Link v9 (v9 uses a fast High-Speed STM32F205 instead of the v8 Full-Speed AT91SAM7S): 
 + 
 +{{:jtag:jlink-v9-front.jpg?0x150|board front}} 
 +{{:jtag:jlink-v9-back.jpg?0x150|board back}} 
 +===== Texas Instruments XDS100v3 ===== 
 + 
 +The [[http://processors.wiki.ti.com/index.php/XDS100|XDS100v3]] supports cJTAG (aka. IEEE 1149.7or SWD alternative)but I did not have the opportunity to test it yet
 + 
 +{{:jtag:xds100v3_case.jpg?0x150|device}} 
 +{{:jtag:xds100v3_front.jpg?0x150|board front}} 
 +{{:jtag:xds100v3_back.jpg?0x150|board back}} 
 + 
 +===== DISTORTEC JTAG-lock-pick Tiny 2 ===== 
 + 
 +The [[http://www.distortec.com/jtag-lock-pick-tiny-2/|JTAG-lock-pick Tiny 2]] is just a very fast (using a FT232H chip), and compact (although it could be even more compact if the component were on both sides) JTAG adapter supporting 1.4V to 5.5V signals (using a CPLD), RTCK, SRST, and TRST.
  
 +{{:jtag:jtag-lockpick_front.jpg?0x150|board front}}
 +{{:jtag:jtag-lockpick_back.jpg?0x150|board back}}
 ====== tricks ====== ====== tricks ======
  
jtag.txt · Last modified: 2024/01/07 17:49 by 127.0.0.1