Flashrom est un outil pour lire et écrire les mémoires flash. Il supporte de nombreux modèles de Flash, et de programmateurs.
Dans cet article, nous allons transformer une carte Bluepill (peu onéreuse) en programmateur Flash pour FlashROM.
En réalité, nous allons compiler un firmware Bluepill qui implémentera le protocole "serprog" de FlashROM
Builder stm32-vserprog firmware
Commençons par builder le firmware vserprog pour bluepill depuis le dépot Git
$ git clone --recurse-submodules https://github.com/dword1511/stm32-vserprog.git
$ cd stm32-vserprog/
$ make BOARD=stm32-bluepill
... Et flasher la bluepill.
Flasher la Bluepill
Maintenant que nous avons builé l'image, on peut flasher via n'importe quelle méthote
- Si vous avez un bootloader DFU
Dans mon cas, j'utilise dfu-util, car j'ai un bootloader sur ma carte.
(Le flashage d'un firmware sur bluepill est hors scope de cet article)
$ dfu-util -a 0 -s 0x08002000:leave:force -D stm32-vserprog.bin
On pense bien a débrancher et rebrancher la bluepill pour que le nouveau firmware soit lancé.
NB/
Vérifier que le firmware fonctionne
Lorsque l'on branche la BluePill avec le nouveau firmware, le système la détecte comme ca:
$ dmesg
[ 1042.651920] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1042.651926] usb 3-2: Product: STM32 virtual serprog for flashrom
[ 1042.651929] usb 3-2: Manufacturer: dword1511.info
[ 1042.651933] usb 3-2: SerialNumber: 384C4E00101347536C950300
$ lsusb
[olivier@psx stm32-vserprog]$ lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 002: ID 0483:5740 STMicroelectronics Virtual COM Port
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Le "Product: STM32 virtual serprog for flashrom" nous indique bien que la Bluepill fonctionne correctement avec le nouveau firmware SerProg.
Test avec flashrom
# Install flashrom on arch
$ pacman -S flashrom
# ensure it supports serprog device
$ flashrom -L | grep serprog
# Test flashrom with Bluepill/serprog interface
$ flashrom -p serprog:dev=/dev/ttyACM0:9600 -r test.bin
Exemple: Flash d'un PN25F04
Voila le brochage de le la Flash que nous allons essayer de flasher:

Et voila comment il faut la connecter à la BluePill
BluePill PA4 ---- SPI chip SS (CS#)
BluePill PA5 ---- SPI chip SCLK (CLK)
BluePill PA6 ---- SPI chip MISO (DO)
BluePill PA7 ---- SPI chip MOSI (DI)
BluePill 3V3 ---- SPI chip VCC (VCC)
BluePill GND ---- SPI chip GND (VSS)
NB: Ce chipset n'est pas supporté par FlashROM de base.
Il vous faudra appliquer un patch (voir dan les Liens)
Liens
- Firmware serprog pour BluePill
https://github.com/dword1511/stm32-vserprog - Patch FlashRom pour PN25N0x
https://www.mail-archive.com/flashrom@flashrom.org/msg14225.html - Comment reflasher la PN25N04 de l'adaptateur BT BK8000L
https://kovo-blog.blogspot.com/2017/11/bk8000l-change-name.html