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 13:38] – [aluminium] kingkevin | jtag [2018/01/06 12:08] – [Altera USB-Blaster] add clones kingkevin | ||
---|---|---|---|
Line 68: | Line 68: | ||
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 82: | Line 82: | ||
One trick to get this ridiculously low price is to use STM32F101 micro-controllers. | One trick to get this ridiculously low price is to use STM32F101 micro-controllers. | ||
Compared to the STM32F103 micro-controllers they offer less functionalities, | 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, | + | 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, |
+ | 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, | 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, | ||
Line 108: | Line 111: | ||
{{: | {{: | ||
- | From the outside this looks very similar to the previous one, except that the connector pinout is very different (except for power).\\ | + | 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. | No markings are on the board. | ||
Line 118: | Line 121: | ||
This one has an " | This one has an " | ||
- | ==== BAITE ==== | + | ==== Baite ==== |
- | The first clone is a [[http:// | + | {{: |
- | It supports JTAG, SWD, and SWIM (for STM8). | + | {{: |
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | The [[http:// | ||
+ | |||
+ | They 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 | | 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. | + | {{: |
+ | {{: | ||
+ | There is a newer version marked as " | ||
+ | * 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, | ||
+ | * the passives are smaller | ||
+ | * the routing is horrible | ||
+ | |||
+ | ===== 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 expensive (> $50), but this price is quite reasonable since it supports the project | ||
+ | * it was sold out for quite some time, encouraging me to look for an alternative | ||
+ | |||
+ | 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 [[# | ||
+ | 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 | ||
+ | git checkout baite-platform | ||
+ | # if you are usgin GCC >= 7 | ||
+ | git cherry-pick 2ebcffa2a4911090b43c36594dae6b58d4bb2f27 | ||
+ | make | ||
+ | cd src | ||
+ | make clean | ||
+ | make PROBE_HOST=baite | ||
+ | </ | ||
+ | |||
+ | Now we need to re-flash 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) | 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:// | ||
+ | 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 the DFU bootloader | ||
+ | stm32flash -w src/ | ||
+ | # flash the main firmware | ||
+ | stm32flash -w src/ | ||
+ | </ | ||
+ | |||
+ | 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' | ||
+ | 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). | ||
+ | Verification during flashing ensured the whole firmware has been written successfully. | ||
+ | |||
+ | 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 (if you can bring dfu-util to ignore the size restriction): | ||
+ | <code bash> | ||
+ | dfu-util -d 1d50:6018 -s 0x08002000: | ||
+ | </ | ||
+ | |||
+ | Here is the new "BMP Baite" {{ : | ||
+ | ^ signal ^ pin ^ pin ^ signal ^ | ||
+ | | SRST | 1 | 2| +3.3V | | ||
+ | | +5V | 3 | 4 | JTCK/SWCLK | | ||
+ | | RX | 5 (key) | 6 | JTMS/SWDIO | | ||
+ | | GND | 7 | 8 | JTDO/ | ||
+ | | 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=" | ||
+ | </ | ||
===== 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 236: | Line 325: | ||
</ | </ | ||
+ | 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 ===== | ||
jtag.txt · Last modified: 2024/01/07 17:49 by 127.0.0.1