This project deprecates previous serprog-stm32vcp
project,
which uses STMicro's proprietary firmware library. Most functions are the same.
Fully open-source: now with libopencm3
instead of STMicro's proprietary firmware library.
Affordable and simple hardware:
Hardware full-duplex SPI with DMA, multiple clock speeds available (default at the one closest to but under 10MHz), e.g. on STM32F103 targets:
2 status LEDs (controlled with 1 GPIO):
flashrom
"serprog" protocol:
flashrom
wiki)..inf
file of other CDC drivers, not confirmed).Firmware is interrupt-free except for low-level USB handling -- robust, easy to debug and modify.
Fast:
flashrom
's calibration time).Supports 25 and 26 series SPI flash chips. 45 series flash chips have different pinouts. Thus for the V2 PCB mentioned above, you will need an adapter.
stm32flash
and the gcc-arm-none-eabi
toolchain.On Debian, simply do the following:
sudo apt-get install stm32flash gcc-arm-none-eabi
NOTE: some systems may require installing newlib
(e.g. libnewlib-arm-none-eabi
) manually. See #27.
Clone and compile.
Simply type (change the board name accordingly, for details see the header of the Makefile
or just type make
):
git clone --recurse-submodules https://github.com/dword1511/stm32-vserprog.git
make BOARD=stm32-vserprog-v2
Program.
Connect the USB-to-UART bridge to your computer first. Then connect TXD and RXD lines to your STM32 board with wires. On V2 or V3 boards mentioned above, connect BOOT0 (labeled BT0 on boards) to the 3.3V output of the USB-to-UART bridge. For other boards, find the BOOT0 jumper or ISP switch, put it into high or enabled. On some boards, you will also need to ensure BOOT1 is pulled low. Then, connect your STM32 board to your computer via USB to power it up. Finally, type:
make BOARD=stm32-vserprog-v2 flash-uart
Done!
Throw the USB-to-UART bridge away and enjoy. Do not forget to pull BOOT0 low before resetting or replugging the board.
The following assumes Linux platform, and that the programmer appears as /dev/ttyACM0
.
To read a flash chip:
flashrom -p serprog:dev=/dev/ttyACM0:4000000 -r file-to-save.bin
flashrom
will ask you to choose a chip, add something like:-c SST25VF040B
This is because sometimes different devices with distinct timing requirements can only be distinguished by the device code,
however currently flashrom
will not read it as it is not returned by the RDID
command.
To erase a flash chip:
flashrom -p serprog:dev=/dev/ttyACM0:4000000 -E
flashrom
version,
but if you try a second pass, everything will be alright. Seems that the first block needs more delay to be erased.To write a flash chip:
flashrom -p serprog:dev=/dev/ttyACM0:4000000 -w file-to-load.bin
Error: Cannot open serial port: Device or resource busy
", please try to stop or remove ModemManager
.flashrom
version. Do not forget to power the flash chip itself if operating on a breadboard or prototype board.flashrom
's output. I appreciate your feedback.