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/03/30 12:50] – move aluminium kingkevin | jtag [2017/04/13 12:10] – [Baite] add v2a kingkevin | ||
---|---|---|---|
Line 74: | Line 74: | ||
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). | ||
- | ==== aluminium ==== | + | ==== ST-LINK V2 aluminium ==== |
- | This [[http:// | + | These adapters come in a small dongle sized aluminium case. |
- | It supports SWD, and SWIM (for STM8), but not JTAG. | + | They supports SWD, and SWIM (for STM8), but not JTAG. |
- | They replaced the additional JTAG pins with power pins. | + | |
- | {{: | + | 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, |
- | {{: | + | 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, and it seems that USB still works well enough ;).\\ |
+ | 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, | ||
- | STM32F103C8 connection: | + | Several board versions exist and it is hard to know what you will get. |
- | ^ STM32F103C8 signal ^ STM32F103C8 pin ^ adapter pin ^ adapter signal ^ | + | Always check the pinout on the aluminium case since this also varies. |
- | | 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 | + | |
- | ==== BAITE ==== | + | === 2014-06-22 ST-LINK V2 === |
- | The first clone is a [[http:// | + | {{: |
- | It supports JTAG, SWD, and SWIM (for STM8). | + | {{: |
+ | {{: | ||
+ | |||
+ | I've also reversed the {{: | ||
+ | |||
+ | 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 === | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | From the outside this looks very similar to the previous one, except that the connector pinout is very different (except for power).\\ | ||
+ | No markings are on the board. | ||
+ | |||
+ | === 2016-01-18 MX-LINK V2 === | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | This one has an " | ||
+ | ==== Baite ==== | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | The [[http:// | ||
+ | |||
+ | The seem to use the same board also for several other programmers, | ||
- | {{: | ||
- | {{: | ||
- | {{: | ||
{{: | {{: | ||
{{: | {{: | ||
- | STM32F103C8 connection: | + | I've also reversed the board layout to get the {{:jtag: |
- | ^ 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 | | + | {{: |
- | | PA4 | 14 | 4 | JTCK/SWCLK | | + | |
- | | PB11 | 22 | 5 | SWIM | | + | There is a newer version marked as " |
- | | PA14 | 37 | 6 | JTMS/ | + | * all pads for the micro-controller are present (there is even solder mask between them) |
- | | USB GND | | 7 | GND | | + | * they added a SWD port |
- | | PA5 | 15 | 8 | JTDO | | + | * the STM32F103C8 has been replaced with a STM32F101CB, |
- | | PB6 | 42 | 9 | SWIM_RST | + | * the passives are smaller |
- | | PA6 | + | * the routing is horrible |
- | | PB12, | + | |
- | | PB5 | 41 | | LED | | + | ===== Black Magic Probe ===== |
+ | |||
+ | The [[https:// | ||
+ | Thus no need to have an OpenOCD server to control the SWJ adapter. | ||
+ | You can directly connect GDB to this adapter (over USB CDC ACM).\\ | ||
+ | It also comes with a UART port (over a second USB CDC ACM). | ||
+ | This is very useful while developing (for printf debugging). | ||
+ | |||
+ | The hardware comes with some disadvantages though: | ||
+ | * 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) | ||
+ | * it is quite expensive (> $50) | ||
+ | * it is always sold out (and V2.1 on pre-order will take a bit of time until it is available) | ||
+ | |||
+ | But because the firmware is open source it is possible to port it to other hardware, and [[https:// | ||
+ | It has been [[https:// | ||
+ | It has also been [[http:// | ||
+ | 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:// | ||
+ | <code bash> | ||
+ | git clone https:// | ||
+ | cd blackmagic | ||
+ | git submodule init | ||
+ | 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 | ||
+ | cd src | ||
+ | make clean | ||
+ | make PROBE_HOST=baite | ||
+ | </ | ||
+ | |||
+ | First we need to re-program the Baite dongle.\\ | ||
+ | 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: | ||
+ | |||
+ | ^ pin ^ signal ^ | ||
+ | | 1 (square) | ||
+ | | 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 DFU bootloader I used [[https:// | ||
+ | Since the flash is read/write protected you first need to clear these option bits. | ||
+ | |||
+ | <code bash> | ||
+ | # disable flash read protection | ||
+ | stm32flash -k / | ||
+ | # disable flash write protection | ||
+ | stm32flash -u / | ||
+ | # erase flash | ||
+ | stm32flash -o / | ||
+ | # flash DFU bootloader | ||
+ | stm32flash -w blackmagic/ | ||
+ | </ | ||
+ | |||
+ | Unplug and re-plug the Baite dongle and you should see the device in DFU bootlader mode. | ||
+ | Flash the main application firmware using dfu-util: | ||
+ | <code bash> | ||
+ | dfu-util -d 1d50:6017 -s 0x08002000: | ||
+ | </ | ||
+ | |||
+ | 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 dfu-util: | ||
+ | <code bash> | ||
+ | dfu-util -d 1d50:6018 -s 0x08002000: | ||
+ | </ | ||
+ | |||
+ | or short RX to ground (pin 5 and 7) to force the DFU bootloader start when plugin in the dongle (in case the main application is buggy). | ||
+ | |||
+ | Here is the new "BMP Baite" {{ : | ||
+ | ^ signal ^ pin ^ pin ^ signal ^ | ||
+ | | SRST | 1 | 2| +3.3V | | ||
+ | | +5V | 3 | 4 | JTCK/ | ||
+ | | RX | 5 (key) | 6 | JTMS/ | ||
+ | | GND | 7 | 8 | JTDO/ | ||
+ | | TX | 9 | 10 | JTDI | | ||
- | the adapter pins are protected with a 220 ohms resistor. | + | **note**: |
+ | 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=" | ||
+ | </ | ||
===== Altera USB-Blaster ===== | ===== Altera USB-Blaster ===== | ||
jtag.txt · Last modified: 2024/01/07 17:49 by 127.0.0.1