Difference between revisions of "ST-Link"
(18 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | [[Category:STM32]] [[Category: | + | [[Category:STM32]][[Category:STM32 Hardware]][[Category:ST-Link]]{{metadesc|ST-Link STM32 Flash and Debugging tool}} |
− | + | There's a number of different ways to flash [[STM32]] devices. One of these is to use [[ST]]'s own [[ST-Link]] devices using the [[Serial Wire Debug]] (aka [[SWD]]) protocol. | |
− | There's a number of different ways to flash [[STM32]] devices. One of these is to use [[ST]]'s own [[ | ||
[[File:STLink.jpg|400px]] | [[File:STLink.jpg|400px]] | ||
− | There are multiple benefits of using one of these [[ | + | There are multiple benefits of using one of these [[ST-Link]] devices rather than a plain serial dongle: |
# The device need not be restarted in flash mode ([[Boot0]]) | # The device need not be restarted in flash mode ([[Boot0]]) | ||
# Programs can be debugged on the device | # Programs can be debugged on the device | ||
− | The official [[ | + | The official [[ST-Link]] as seen above are relatively cheap (< $20) and there are Chinese copies available (haven't tried those). |
The most common option are these: | The most common option are these: | ||
Line 16: | Line 15: | ||
[[File:STLink-v2 (Chinese knock off).jpg|400px]] | [[File:STLink-v2 (Chinese knock off).jpg|400px]] | ||
− | They are Chinese knock offs and they run the official [[ | + | [[File:ST-Link Bunch.jpg|400px]] |
+ | |||
+ | They are Chinese knock offs and they run the official [[ST-Link]] firmware. | ||
+ | |||
+ | We are also running on a [[DIY ST-Link V2.1]] device. | ||
+ | |||
+ | == Hardware Analysis == | ||
+ | |||
+ | [[ST]] does not make schematics or source code available for the official ST-Link devices, which is a pity (and a someone odd business decision). However, they '''do''' publish a partial schematics since a built-in ST-Link device is included in all their development boards, a partial schematics is available. | ||
+ | |||
+ | [[File:ST-Link V2.png|800px]] | ||
+ | |||
+ | From the schematics we can see that the ST-Link device is build around a STM32F103CBT6 which is the 128 kB Flash version. | ||
+ | |||
+ | PC13 and PC14 (and possibly PC15 in the future) appears to be working as a means for the firmware to identify the "version" of the hardware. On above schematics, PC13 is pulled low with a resistor while PC14 (and PC15) are left floating. | ||
+ | |||
+ | A voltage divider splitting +3.3 V in half is connected to PA0 and labelled AIN_1. The ST-Link devices are capable of measuring the target processor supply voltage and this is probably a workaround of the development boards (which know their supply voltage already). | ||
+ | |||
+ | The "output" pins of the ST-Link V2 are as follows: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Pin | ||
+ | ! Label | ||
+ | ! Remarks | ||
+ | |- | ||
+ | | PA0 | ||
+ | | AIN_1 | ||
+ | | Probably meant as an analog input, measuring the supply voltage on the target device. On the development boards, the supply voltage is well known, so this pin is connected to a voltage divider splitting the supply voltage in half (1.65V or thereabouts). | ||
+ | |- | ||
+ | | PA5 | ||
+ | | T_JTCK | ||
+ | | Target Clock | ||
+ | |- | ||
+ | | PA6 | ||
+ | | T_JTDO | ||
+ | | | ||
+ | |- | ||
+ | | PA7 | ||
+ | | T_JTDI | ||
+ | | | ||
+ | |- | ||
+ | | PA10 | ||
+ | | T_SWO | ||
+ | | Target trace debugging. This pin is unconnected on the Chinese clone ST-Links, which is annoying. | ||
+ | |- | ||
+ | | PA12 | ||
+ | | T_SWDIO_IN | ||
+ | | On development boards connected via a 100 Ohm resistor to PA14 | ||
+ | |- | ||
+ | | PA13 | ||
+ | | T_JTCK | ||
+ | | | ||
+ | |- | ||
+ | | PA14 | ||
+ | | T_JTMS | ||
+ | | | ||
+ | |- | ||
+ | | PB0 | ||
+ | | T_NRST | ||
+ | | | ||
+ | |- | ||
+ | | PB1 | ||
+ | | T_JRST | ||
+ | | Labelled but not connected to anything | ||
+ | |} | ||
+ | |||
+ | == More Reading == | ||
+ | |||
+ | Github user lujji have done a number of interesting writeups on ST-Link devices, reverse engineering the ST-Link firmware and adding trace (SWO) support to the cheap Chinese ST-Link devices. | ||
+ | |||
+ | * [https://lujji.github.io/blog/stlink-clone-trace/ Adding Trace support to ST-Link clones] | ||
+ | * [https://lujji.github.io/blog/reverse-engineering-stlink-firmware Reverse-engineering ST-Link firmware part 1] | ||
+ | * [https://lujji.github.io/blog/reverse-engineering-stlink-firmware-part2 Reverse-engineering ST-Link firmware part 2] |
Latest revision as of 01:08, 15 December 2022
There's a number of different ways to flash STM32 devices. One of these is to use ST's own ST-Link devices using the Serial Wire Debug (aka SWD) protocol.
There are multiple benefits of using one of these ST-Link devices rather than a plain serial dongle:
- The device need not be restarted in flash mode (Boot0)
- Programs can be debugged on the device
The official ST-Link as seen above are relatively cheap (< $20) and there are Chinese copies available (haven't tried those).
The most common option are these:
They are Chinese knock offs and they run the official ST-Link firmware.
We are also running on a DIY ST-Link V2.1 device.
Hardware Analysis
ST does not make schematics or source code available for the official ST-Link devices, which is a pity (and a someone odd business decision). However, they do publish a partial schematics since a built-in ST-Link device is included in all their development boards, a partial schematics is available.
From the schematics we can see that the ST-Link device is build around a STM32F103CBT6 which is the 128 kB Flash version.
PC13 and PC14 (and possibly PC15 in the future) appears to be working as a means for the firmware to identify the "version" of the hardware. On above schematics, PC13 is pulled low with a resistor while PC14 (and PC15) are left floating.
A voltage divider splitting +3.3 V in half is connected to PA0 and labelled AIN_1. The ST-Link devices are capable of measuring the target processor supply voltage and this is probably a workaround of the development boards (which know their supply voltage already).
The "output" pins of the ST-Link V2 are as follows:
Pin | Label | Remarks |
---|---|---|
PA0 | AIN_1 | Probably meant as an analog input, measuring the supply voltage on the target device. On the development boards, the supply voltage is well known, so this pin is connected to a voltage divider splitting the supply voltage in half (1.65V or thereabouts). |
PA5 | T_JTCK | Target Clock |
PA6 | T_JTDO | |
PA7 | T_JTDI | |
PA10 | T_SWO | Target trace debugging. This pin is unconnected on the Chinese clone ST-Links, which is annoying. |
PA12 | T_SWDIO_IN | On development boards connected via a 100 Ohm resistor to PA14 |
PA13 | T_JTCK | |
PA14 | T_JTMS | |
PB0 | T_NRST | |
PB1 | T_JRST | Labelled but not connected to anything |
More Reading
Github user lujji have done a number of interesting writeups on ST-Link devices, reverse engineering the ST-Link firmware and adding trace (SWO) support to the cheap Chinese ST-Link devices.