diff --git a/README.md b/README.md index e21a292..67a3328 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,72 @@ # DirtyJTAG -DirtyJTAG is a JTAG adapter firmware for $2 STM32 development boards ("blue pill"/"black pill" STM32F103-based ARM boards). The DirtyJTAG project was created to find an alternative to the obsolete (but cheap) LPT Wiggler cables, and expensive USB JTAG probes. +DirtyJTAG is a JTAG adapter firmware for $2 ST-Link clones and generic STM32 development boards ("blue pill"/"black pill" STM32F103-based ARM boards). The DirtyJTAG project was created to find an alternative to the obsolete (but cheap) LPT Wiggler cables, and expensive USB JTAG probes. -DirtyJTAG is dirty and dirt cheap, but is not fast nor a perfect implementation of the JTAG protocol. Yet it is a bit less than 500 sloccount lines, therefore it is easily understandable and hackable. +DirtyJTAG is dirty and dirt cheap, but is not fast nor a perfect implementation of the JTAG protocol. Yet it is around 500 sloccount lines, therefore it is easily understandable and hackable. DirtyJTAG is supported in mainline UrJTAG, see the [Installing UrJTAG with DirtyJTAG support](#installing-urjtag-with-dirtyjtag-support) section. If you prefer OpenOCD to UrJTAG, I suggest using Zoobab's fork of Versaloon firmware, which is available [on his GitHub repository](https://github.com/zoobab/versaloon). -## How to flash DirtyJTAG on a "Blue Pill" board +## Complete instructions for installing DirtyJTAG on a $2 chinese ST-Link clone -Download a pre-built version of the firmware (available [on the release page](https://github.com/jeanthom/dirtyjtag/releases)) or build the firmware yourself (instructions provided below). Install [stlink](https://github.com/texane/stlink), then use this command : +The $2 chinese ST-Link clones that you can find on Aliexpress/eBay are based on a STM32F103 chip. They can be repurposed into a JTAG adapter using the DirtyJTAG firmware. However, due to the limited number of GPIO available to the user, only the bare minimum JTAG pins are available : `TDI/TDO/TMS/TCK` (no `SRST` or `TRST`). + +### Taking apart the adapter + +Press firmly the USB connector on a flat surface while holding the outer aluminium casing. This will release the PCB from its casing. + +![Tearing down an ST-Link programmer](docs/img/stlinkv2-teardown.gif) + +### Install DirtyJTAG firmware + +In order to install a newer firmware, you will need a SWD programmer. I chose to use another $2 ST-Link programmer. Connect them together like this : + +![Two ST-Link clones connected together](docs/img/stlinkv2-programming.svg) + +Do not plug your ST-Link (target) in a USB port yet. Install [stlink](https://github.com/texane/stlink) on your computer, and download a compiled release of DirtyJTAG for ST-Link adapters ([available here](https://github.com/jeanthom/dirtyjtag/releases)). Enter this command to program the STM32 : + +``` +st-flash write /path/to/dirtyjtag-stlink.bin 0x8000000 +``` + +If for some reason the flashing process fails because the reported flash size is 0, [there is a fix](https://github.com/texane/stlink/issues/172#issuecomment-347887271). + +### Using your *brand new* DirtyJTAG dongle with a JTAG target + +This is the new pinout for your DirtyJTAG dongle. You may want to glue it to the case for pratical reasons. + +![ST-Link v2 pinout with DirtyJTAG firmware](docs/img/stlinkv2-pinout.svg) + +Install [UrJTAG with DirtyJTAG support](#installing-urjtag-with-dirtyjtag-support). Plug your DirtyJTAG dongle, and check with the `lsusb` command that a new device with `0x1209/0xC0CA` as its USB VID/PID has appeared. + +``` +$ jtag +UrJTAG 0.10 # +Copyright (C) 2002, 2003 ETC s.r.o. +Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors + +UrJTAG is free software, covered by the GNU General Public License, and you are +welcome to change it and/or distribute copies of it under certain conditions. +There is absolutely no warranty for UrJTAG. + +warning: UrJTAG may damage your hardware! +Type "quit" to exit, "help" for help. + +jtag> cable dirtyjtag +jtag> detect + +``` + +## Installing DirtyJTAG on a standard STM32 developement board + +The procedure is the same as above : download a pre-built version of the firmware (available [on the release page](https://github.com/jeanthom/dirtyjtag/releases)) or build the firmware yourself (instructions provided below). Install [stlink](https://github.com/texane/stlink), then use this command : ``` st-flash write /path/to/dirtyjtag.bin 0x8000000 ``` -## Pinout +The `bluepill` build of DirtyJTAG has the following pinout : | STM32 | JTAG | |-------|------| @@ -27,7 +77,7 @@ st-flash write /path/to/dirtyjtag.bin 0x8000000 | PA4 | TRST | | PA5 | SRST | -Pin definition can be modified in `src/jtag.c`. +If needed, pin definition can be modified in `src/jtag.c`. ## USB VID and PID @@ -102,10 +152,15 @@ git submodule update Then you can build the firmware : ``` -make bin +make bin PLATFORM=bluepill ``` -Your freshly compiled firmware will appear as `src/dirtyjtag.bin`. +Currently there are two platforms : + + * bluepill : Default build setting + * stlinkv2 : Chinese ST-Link clone with specific pinout + +Once the build is completed, your freshly compiled firmware will be available in `src/dirtyjtag.bin`. ## Inspiration diff --git a/docs/img/stlinkv2-pinout.svg b/docs/img/stlinkv2-pinout.svg new file mode 100644 index 0000000..8af7d9d --- /dev/null +++ b/docs/img/stlinkv2-pinout.svg @@ -0,0 +1,713 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TCK + + + + + + + GND + + + + + + + TDO + + + + + + + 3V3 + + + + + + + 5V + + + + + + + 3V3 + + + + + + + 5V + + + + + + + GND + + + + + + + TMS + + + + + + + TDI + + + + + diff --git a/docs/img/stlinkv2-programming.svg b/docs/img/stlinkv2-programming.svg new file mode 100644 index 0000000..85491e4 --- /dev/null +++ b/docs/img/stlinkv2-programming.svg @@ -0,0 +1,1069 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/img/stlinkv2-teardown.gif b/docs/img/stlinkv2-teardown.gif new file mode 100644 index 0000000..859fb04 Binary files /dev/null and b/docs/img/stlinkv2-teardown.gif differ