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 [2017/04/25 14:07] – kingkevin | jtag [2020/06/21 06:27] – [SEGGER J-Link] mention clone kingkevin | ||
---|---|---|---|
Line 61: | Line 61: | ||
{{: | {{: | ||
{{: | {{: | ||
- | {{: | ||
{{: | {{: | ||
{{: | {{: | ||
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' | The BOM doesn' | ||
- | The original adapter | + | The original adapter |
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). | ||
- | ==== ST-LINK V2 aluminium | + | ==== mini ST-LINK V2 ==== |
These adapters come in a small dongle sized aluminium case. | These adapters come in a small dongle sized aluminium case. | ||
They supports SWD, and SWIM (for STM8), but not JTAG. | They supports SWD, and SWIM (for STM8), but not JTAG. | ||
+ | Also the RST signal (required for SWIM) is not controllable as SRST in SWD mode (at least not by OpenOCD). | ||
- | At $2.5 they are the cheapest | + | For less than $2, they are the cheapest |
- | One trick to get this ridiculously low price is to use STM32F101 micro-controllers. | + | I also like to use them as development board when I just need a USB dongle |
- | Compared to the STM32F103 micro-controllers they offer less functionalities, | + | |
- | 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' | + | |
- | 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 | + | |
- | Several | + | Numerous |
- | Always check the pinout on the aluminium case since this also varies. | + | Always check the pinout on the aluminium case and on the PCB since this also varies. |
+ | Here are the board variants I got, in chronological order. | ||
=== 2014-06-22 ST-LINK V2 === | === 2014-06-22 ST-LINK V2 === | ||
Line 97: | Line 92: | ||
{{: | {{: | ||
- | I' | + | I've reversed the {{: |
+ | |||
+ | One trick to get this ridiculously low price is to use STM32F101 micro-controllers. | ||
+ | Compared to the STM32F103 micro-controllers they offer less functionalities, | ||
+ | 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' | ||
+ | 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, | ||
One other nice trick they used is to have twos LEDs on the same pin (PA9): | One other nice trick they used is to have twos LEDs on the same pin (PA9): | ||
Line 105: | Line 108: | ||
* 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). | * 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 | + | === alternative pinout |
{{: | {{: | ||
Line 121: | Line 124: | ||
This one has an " | This one has an " | ||
+ | |||
+ | === SWDIO/SWCLK swap === | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | This variant uses an STM32F103. | ||
+ | It seems this micro-controller got so popular that it is now cheaper than the STM32F101 (with less features). | ||
+ | The annoying details of this variant is that the SWDIO and SWCLK signal described on the pinout engraved in the aluminium case are swapped. | ||
+ | This shows again the importance of also checking the pinout on the board itself, else you can waste a couple of hours debugging. | ||
+ | |||
+ | === QFN === | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | This variant uses an STM32F103 in the UFQFN-48 package. | ||
+ | This is just a couple of cents cheaper than the more traditional TQFP-48 package, but this is enough en mass to change the footprint on the board. | ||
+ | |||
+ | === MINI ST-Link V2E === | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | Instead on an STM32F103, this dongle uses a [[http:// | ||
+ | I've seen pin compatible alternatives (ST STM8S003 vs Nuvoton N76E003), even architecture compatible (ST STM32F103 vs GigeDevice GD32F103), but they always had some differences (architecture, | ||
+ | The CS32F103 seems like a complete clone of the STM32F103 (exact same pinout, architecture, | ||
+ | So far I could not not see any difference (I tested flash, USB, SWD). | ||
+ | I guess this micro-controller is so popular that it was just a question of time until it was ripped-off. | ||
+ | To check if this is a complete clone you could decapsulate the chip and compare the silicon die, or check the errata behaviour (I can't imagine they re-implemented it themselves, up to the mistakes). | ||
+ | The next step would be to have a CS32F103 chip in a package marked as STM32F103. | ||
+ | |||
+ | == GC == | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | Most ST-LINK minis which I get now use the CKS32 chip. | ||
+ | I'm a bit sad because the CS32F103C8 really only has the advertised 64 KB of flash, while the STM32F103C8 actually has 128 KB (e.g. what the STM32F103CB has), and when you have a lot of debugging strings in your firmware, you very soon reach the limit of the 64 KB. | ||
+ | Thus, on my quest to find ST-LINK minis with STM32F103 (e.g. where the ground pin is not between SWDIO and SWCLK) I landed on this one. | ||
+ | Sadly it also does not use a STM32F103, but a STM32GC102C8. | ||
+ | I have no idea what this chip is. | ||
+ | The GC series does not exist (at least ST doesn' | ||
+ | I'm not sure if this was to save cost, because this is the first board I see with 2 ESD protections (one for USB, the other for SWDIO/SWCLK in addition to the inline protection resistors, and none for RST/SWIM). | ||
+ | |||
==== Baite ==== | ==== Baite ==== | ||
Line 130: | Line 182: | ||
The [[http:// | The [[http:// | ||
- | The seem to use the same board also for several other programmers, | + | They seem to use the same board also for several other programmers, |
{{: | {{: | ||
Line 141: | Line 193: | ||
{{: | {{: | ||
- | There is a newer version marked as " | + | There is a newer version marked as " |
* all pads for the micro-controller are present (there is even solder mask between them) | * all pads for the micro-controller are present (there is even solder mask between them) | ||
* they added a SWD port | * they added a SWD port | ||
Line 159: | Line 211: | ||
* the ARM Cortex SWJ connector uses a small header (not very dupont-wire friendly) | * the ARM Cortex SWJ connector uses a small header (not very dupont-wire friendly) | ||
* the separate UART is not always populated (UART is also available on the SWJ connector) | * the separate UART is not always populated (UART is also available on the SWJ connector) | ||
- | * it is quite expensive (> $50) | + | * it is expensive (> $50), but this price is quite reasonable since it supports the project |
- | * it is always | + | * it was sold out for quite some time, encouraging me to look for an alternative |
- | But because | + | Because |
It has been [[https:// | It has been [[https:// | ||
It has also been [[http:// | It has also been [[http:// | ||
Line 168: | Line 220: | ||
This has less power pins (who needs 2xGND, 2x5V, 3x3.3V anyway), but provides enough function pins to add UART (and SRST). | 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://sourceforge.net/p/blackmagicdebug/mailman/ | + | To build the firmware ([[https://github.com/blacksphere/blackmagic/pull/274|patch]] integration pending): |
<code bash> | <code bash> | ||
- | git clone https:// | + | git clone https:// |
cd blackmagic | cd blackmagic | ||
git submodule init | git submodule init | ||
git submodule update | git submodule update | ||
- | wget -O 0001-add-new-platform-Baite-ST-Link-V2-clone.patch " | ||
- | patch -p1 < 0001-add-new-platform-Baite-ST-Link-V2-clone.patch | ||
make | make | ||
cd src | cd src | ||
Line 182: | Line 232: | ||
</ | </ | ||
- | First we need to re-program | + | Now we need to re-flash the Baite dongle.\\ |
As you can see on the {{: | As you can see on the {{: | ||
But on the back of the board you can find test points so to program the device using the serial bootloader: | But on the back of the board you can find test points so to program the device using the serial bootloader: | ||
Line 198: | Line 248: | ||
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 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 DFU bootloader | + | To flash the Black Magic firmware |
Since the flash is read/write protected you first need to clear these option bits. | Since the flash is read/write protected you first need to clear these option bits. | ||
Line 208: | Line 258: | ||
# erase flash | # erase flash | ||
stm32flash -o / | stm32flash -o / | ||
- | # flash DFU bootloader | + | # flash the DFU bootloader |
- | stm32flash -w blackmagic/ | + | stm32flash -w blackmagic_dfu.bin |
- | </ | + | # flash the main firmware |
- | + | stm32flash | |
- | Unplug and re-plug the Baite dongle and you should see the device in DFU bootlader mode. | + | |
- | Flash the main application | + | |
- | <code bash> | + | |
- | dfu-util -d 1d50: | + | |
</ | </ | ||
Line 221: | Line 267: | ||
The adapter should be running the main application and two USB CDC ACM ports will appear. | 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 dfu-util: | + | You can re-flash the device from the main application using the DFU bootloader with: |
<code bash> | <code bash> | ||
- | dfu-util -d 1d50:6018 -s 0x08002000: | + | python2 ../ |
</ | </ | ||
- | or short RX to ground | + | 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 | ||
+ | STM32F103C8 micro-controllers often have 128 kB of flash though, thus it is still possible | ||
Here is the new "BMP Baite" {{ : | Here is the new "BMP Baite" {{ : | ||
Line 243: | Line 291: | ||
</ | </ | ||
===== Altera USB-Blaster ===== | ===== Altera USB-Blaster ===== | ||
+ | |||
+ | {{ : | ||
The [[https:// | The [[https:// | ||
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:// | ||
- | 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. | ||
- | |||
- | {{: | ||
- | {{: | ||
- | {{: | ||
- | {{: | ||
:!: be aware that here the VCC{TARGET} pin has to be connected to a reference voltage used for the JTAG communication, | :!: be aware that here the VCC{TARGET} pin has to be connected to a reference voltage used for the JTAG communication, | ||
Line 267: | Line 308: | ||
</ | </ | ||
- | To be able to use it I had to recompile OpenOCD for the USB-Blaster to use libftdi (probable | + | 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 clone http:// | ||
Line 331: | Line 372: | ||
Info : stm32f1x.cpu: | Info : stm32f1x.cpu: | ||
</ | </ | ||
+ | |||
+ | 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). | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | ==== PIC USB-Blaster ==== | ||
+ | |||
+ | This one uses a Microchip PIC18F14 micro-controller and has no buffer (thus only supporting 5 V signals). | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | ==== 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). | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | I also reversed the {{: | ||
+ | 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. | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
===== SEGGER J-Link ===== | ===== SEGGER J-Link ===== | ||
- | The [[http://www.aliexpress.com/item/ | + | The [[https://www.segger.com/jlink_base.html|SEGGER J-Link]] |
+ | That makes it one of the most complete JTAG adapter. | ||
+ | The differences between the versions are documented [[https://wiki.segger.com/ | ||
+ | |||
+ | There are plenty of different J-Link v8 and v9 clones available, from light version with the minimum number of components, to full version with all features. | ||
+ | But v8 and v9 are not supported anymore by J-Link, meaning no new feature will be added to them. | ||
+ | Instead I recommend to get the [[https:// | ||
+ | |||
+ | Here pictures from devices not from official distributors, | ||
+ | |||
+ | They come in the same case: | ||
{{: | {{: | ||
{{: | {{: | ||
- | {{: | ||
- | It supports | + | Here a J-Link v8 with large passives: |
- | That makes it the most complete | + | |
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | Here a J-Link v8 with smaller and a bit less passives: | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | Here a light J-Link v9. | ||
+ | v9 uses a STM32F205 (providing 20 MHz JTAG/15 MHz SWD) while v8 uses a AT91SAM7S (providing 10 MHz JTAG/4 MHz SWD): | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | Here a J-Link v10. | ||
+ | This is currently the only version being developed on. | ||
+ | It uses a NXP LPC4337 which supports | ||
+ | In addition to the others, it adds cJTAG support: | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | ===== Texas Instruments XDS100v3 ===== | ||
+ | |||
+ | The [[http:// | ||
+ | |||
+ | Note: this adapter uses the [[http:// | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | ===== DISTORTEC JTAG-lock-pick Tiny 2 ===== | ||
+ | |||
+ | The [[http:// | ||
+ | {{: | ||
+ | {{: | ||
====== tricks ====== | ====== tricks ====== | ||
jtag.txt · Last modified: 2024/01/07 17:49 by 127.0.0.1