|
|
|
@ -1,54 +1,72 @@
|
|
|
|
|
HOWTO
|
|
|
|
|
=====
|
|
|
|
|
STMicroelectronics Stlink Tools
|
|
|
|
|
===============================
|
|
|
|
|
|
|
|
|
|
[![Build Status](https://travis-ci.org/xor-gate/stlink.svg?branch=travis)](https://travis-ci.org/xor-gate/stlink)
|
|
|
|
|
|
|
|
|
|
## HOWTO
|
|
|
|
|
|
|
|
|
|
First, you have to know there are several boards supported by the software.
|
|
|
|
|
Those boards use a chip to translate from USB to JTAG commands. The chip is
|
|
|
|
|
called stlink and there are 2 versions:
|
|
|
|
|
. STLINKv1, present on STM32VL discovery kits,
|
|
|
|
|
. STLINKv2, present on STM32L discovery and later kits.
|
|
|
|
|
|
|
|
|
|
2 different transport layers are used:
|
|
|
|
|
. STLINKv1 uses SCSI passthru commands over USB,
|
|
|
|
|
. STLINKv2 uses raw USB commands.
|
|
|
|
|
* STLINKv1, present on STM32VL discovery kits,
|
|
|
|
|
* STLINKv2, present on STM32L discovery and later kits.
|
|
|
|
|
|
|
|
|
|
Common requirements
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
Two different transport layers are used:
|
|
|
|
|
|
|
|
|
|
* STLINKv1 uses SCSI passthru commands over USB
|
|
|
|
|
* STLINKv2 uses raw USB commands.
|
|
|
|
|
|
|
|
|
|
## Common requirements
|
|
|
|
|
|
|
|
|
|
. libusb-1.0 (You probably already have this, but you'll need the
|
|
|
|
|
development version to compile)
|
|
|
|
|
. pkg-config
|
|
|
|
|
|
|
|
|
|
IF YOU HAVE AN STLINKv1
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
## For STLINKv1
|
|
|
|
|
|
|
|
|
|
The STLINKv1's SCSI emulation is very broken, so the best thing to do
|
|
|
|
|
is tell your operating system to completely ignore it.
|
|
|
|
|
|
|
|
|
|
Options (do one of these before you plug it in)
|
|
|
|
|
*) modprobe -r usb-storage && modprobe usb-storage quirks=483:3744:i
|
|
|
|
|
or *)1. add "options usb-storage quirks=483:3744:i" to /etc/modprobe.conf
|
|
|
|
|
*)2. modprobe -r usb-storage && modprobe usb-storage
|
|
|
|
|
or *)1. cp stlink_v1.modprobe.conf /etc/modprobe.d
|
|
|
|
|
*)2. modprobe -r usb-storage && modprobe usb-storage
|
|
|
|
|
|
|
|
|
|
IF YOU HAVE AN STLINKv2
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
* `modprobe -r usb-storage && modprobe usb-storage quirks=483:3744:i`
|
|
|
|
|
* or *)1. add "options usb-storage quirks=483:3744:i" to /etc/modprobe.conf
|
|
|
|
|
* *)2. modprobe -r usb-storage && modprobe usb-storage
|
|
|
|
|
* or *)1. cp stlink_v1.modprobe.conf /etc/modprobe.d
|
|
|
|
|
* *)2. modprobe -r usb-storage && modprobe usb-storage
|
|
|
|
|
|
|
|
|
|
## For STLINKv2
|
|
|
|
|
|
|
|
|
|
You're ready to go :)
|
|
|
|
|
|
|
|
|
|
COMPILING
|
|
|
|
|
~~~~~~~~~
|
|
|
|
|
## Build from sources
|
|
|
|
|
|
|
|
|
|
### Autotools
|
|
|
|
|
|
|
|
|
|
This project was converted to Autotools by a well meaning individual. The
|
|
|
|
|
following steps will build the project for you.
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ ./autogen.sh
|
|
|
|
|
$ ./configure
|
|
|
|
|
$ make
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### CMake
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ mkdir build && cd build
|
|
|
|
|
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
|
|
|
|
|
$ make
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Using the gdb server
|
|
|
|
|
|
|
|
|
|
USING THE GDBSERVER
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
To run the gdb server: (you do not need sudo if you have set up
|
|
|
|
|
permissions correctly)
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ make && [sudo] ./st-util
|
|
|
|
|
|
|
|
|
|
There are a few options:
|
|
|
|
@ -68,13 +86,15 @@ There are a few options:
|
|
|
|
|
st-util will continue listening for connections after disconnect.
|
|
|
|
|
-n, --no-reset
|
|
|
|
|
Do not reset board on connection.
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The STLINKv2 device to use can be specified in the environment
|
|
|
|
|
variable STLINK_DEVICE on the format <USB_BUS>:<USB_ADDR>.
|
|
|
|
|
variable STLINK_DEVICE on the format `<USB_BUS>:<USB_ADDR>`.
|
|
|
|
|
|
|
|
|
|
Then, in your project directory, someting like this...
|
|
|
|
|
(remember, you need to run an _ARM_ gdb, not an x86 gdb)
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ arm-none-eabi-gdb fancyblink.elf
|
|
|
|
|
...
|
|
|
|
|
(gdb) tar extended-remote :4242
|
|
|
|
@ -87,50 +107,56 @@ Transfer rate: 1 KB/sec, 560 bytes/write.
|
|
|
|
|
(gdb)
|
|
|
|
|
...
|
|
|
|
|
(gdb) continue
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Have fun!
|
|
|
|
|
|
|
|
|
|
Resetting the chip from GDB
|
|
|
|
|
===========================
|
|
|
|
|
## Resetting the chip from GDB
|
|
|
|
|
|
|
|
|
|
You may reset the chip using GDB if you want. You'll need to use `target
|
|
|
|
|
extended-remote' command like in this session:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
(gdb) target extended-remote localhost:4242
|
|
|
|
|
Remote debugging using localhost:4242
|
|
|
|
|
0x080007a8 in _startup ()
|
|
|
|
|
(gdb) kill
|
|
|
|
|
Kill the program being debugged? (y or n) y
|
|
|
|
|
(gdb) run
|
|
|
|
|
Starting program: /home/whitequark/ST/apps/bally/firmware.elf
|
|
|
|
|
Starting program: /home/whitequark/ST/apps/bally/firmware.elf
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Remember that you can shorten the commands. `tar ext :4242' is good enough
|
|
|
|
|
for GDB.
|
|
|
|
|
|
|
|
|
|
Setting up udev rules
|
|
|
|
|
=====================
|
|
|
|
|
## Setting up udev rules
|
|
|
|
|
|
|
|
|
|
For convenience, you may install udev rules file, 49-stlinkv*.rules, located
|
|
|
|
|
in the root of repository. You will need to copy it to /etc/udev/rules.d,
|
|
|
|
|
and then either reboot or execute
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ udevadm control --reload-rules
|
|
|
|
|
$ udevadm trigger
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Udev will now create a /dev/stlinkv2_XX or /dev/stlinkv1_XX file, with the appropriate permissions.
|
|
|
|
|
This is currently all the device is for, (only one stlink of each version is supported at
|
|
|
|
|
any time presently)
|
|
|
|
|
|
|
|
|
|
Running programs from SRAM
|
|
|
|
|
==========================
|
|
|
|
|
## Running programs from SRAM
|
|
|
|
|
|
|
|
|
|
You can run your firmware directly from SRAM if you want to. Just link
|
|
|
|
|
it at 0x20000000 and do
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
(gdb) load firmware.elf
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
It will be loaded, and pc will be adjusted to point to start of the
|
|
|
|
|
code, if it is linked correctly (i.e. ELF has correct entry point).
|
|
|
|
|
|
|
|
|
|
Writing to flash
|
|
|
|
|
================
|
|
|
|
|
## Writing to flash
|
|
|
|
|
|
|
|
|
|
The GDB stub ships with a correct memory map, including the flash area.
|
|
|
|
|
If you would link your executable to 0x08000000 and then do
|
|
|
|
@ -138,8 +164,7 @@ If you would link your executable to 0x08000000 and then do
|
|
|
|
|
then it would be written to the memory.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FAQ
|
|
|
|
|
===
|
|
|
|
|
## FAQ
|
|
|
|
|
|
|
|
|
|
Q: My breakpoints do not work at all or only work once.
|
|
|
|
|
|
|
|
|
@ -161,20 +186,21 @@ Q: Load command does not work in GDB.
|
|
|
|
|
A: Some people report XML/EXPAT is not enabled by default when compiling
|
|
|
|
|
GDB. Memory map parsing thus fail. Use --enable-expat.
|
|
|
|
|
|
|
|
|
|
Currently known working combinations of programmer and target
|
|
|
|
|
=============================================================
|
|
|
|
|
## Currently known working combinations of programmer and target
|
|
|
|
|
|
|
|
|
|
STLink v1 (as found on the 32VL Discovery board)
|
|
|
|
|
|
|
|
|
|
Known Working Targets:
|
|
|
|
|
Known working targets:
|
|
|
|
|
|
|
|
|
|
* STM32F100xx (Medium Density VL)
|
|
|
|
|
* STM32F103 (according to jpa- on ##stm32)
|
|
|
|
|
|
|
|
|
|
No information:
|
|
|
|
|
|
|
|
|
|
* everything else!
|
|
|
|
|
|
|
|
|
|
STLink v2 (as found on the 32L and F4 Discovery boards)
|
|
|
|
|
Known Working Targets:
|
|
|
|
|
STLink v2 (as found on the 32L and F4 Discovery boards), known working targets:
|
|
|
|
|
|
|
|
|
|
* STM32F030F4P6 (custom board)
|
|
|
|
|
* STM32F0Discovery (STM32F0 Discovery board)
|
|
|
|
|
* STM32F100xx (Medium Density VL, as on the 32VL Discovery board)
|
|
|
|
@ -192,8 +218,8 @@ Known Working Targets:
|
|
|
|
|
* STM32L152RB (STM32L-Discovery board, custom board)
|
|
|
|
|
* STM32F051R8T6 (STM320518-EVAL board)
|
|
|
|
|
|
|
|
|
|
STLink v2-1 (as found on the Nucleo boards)
|
|
|
|
|
Known Working Targets:
|
|
|
|
|
STLink v2-1 (as found on the Nucleo boards), known working targets:
|
|
|
|
|
|
|
|
|
|
* STM32F401xx (STM32 Nucleo-F401RE board)
|
|
|
|
|
* STM32F030R8T6 (STM32 Nucleo-F030R8 board)
|
|
|
|
|
* STM32F072RBT6 (STM32 Nucleo-F072RB board)
|
|
|
|
|