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