Aller au contenu principal

DAPLink — Firmware interface

Le STM32F103 exécute le firmware DAPLink (branche release_letssteam). Il fait office d'interface entre l'ordinateur et le MCU applicatif (STM32WB55).

Fonctions

FonctionProtocoleDescription
ProgrammationUSB MSCDrag-and-drop d'un fichier .hex/.bin
DébogageUSB HID (CMSIS-DAP)Debug SWD du STM32WB55
Communication sérieUSB CDCPort série virtuel (REPL MicroPython)
Interface webUSB WebUSBInteraction directe depuis un navigateur
Flash externeI2C (0x3B)Accès à la mémoire W25Q64 (8 Mo)
Config persistanteI2C (0x3B)Lecture/écriture config zone (1 Ko)

Protocole I2C

Le STM32F103 est accessible via le bus I2C1 à l'adresse 0x3B.

Commandes

CommandeCodeDescription
WHO_AM_I0x01Identification (retourne 0x4C)
SET_FILENAME0x03Définir le nom de fichier (format 8.3)
GET_FILENAME0x04Lire le nom de fichier courant
CLEAR_FLASH0x10Effacer la mémoire flash W25Q64
WRITE_DATA0x11Écrire des données dans la flash
READ_SECTOR0x20Lire un secteur de 256 octets
WRITE_CONFIG0x30Écrire dans la config zone
READ_CONFIG0x31Lire la config zone
CLEAR_CONFIG0x32Effacer la config zone
STATUS0x80Lire l'état de la dernière opération
ERROR0x81Lire le code d'erreur

Constantes

ConstanteValeurDescription
Adresse I2C0x3BAdresse du DAPLink sur I2C1
MAX_WRITE_CHUNK30Octets max par commande WRITE_DATA
SECTOR_SIZE256Taille d'un secteur flash
MAX_SECTORS32768Nombre max de secteurs (8 Mo)
CONFIG_SIZE1024Taille de la config zone (1 Ko)
FILENAME_LEN8Longueur max du nom de fichier
EXT_LEN3Longueur max de l'extension

Architecture flash F103

ZoneAdresseTailleDescription
Bootloader0x08000000 — 0x0800BBFF47 KoBootloader DAPLink (jamais touché)
Config zone0x0800BC00 — 0x0800BFFF1 KoDonnées usine persistantes
Interface firmware0x0800C000 — 0x0801FBFF79 KoFirmware DAPLink
DAPLink settings0x0801FC00 — 0x0801FFFF1 KoParamètres DAPLink

API MicroPython

DaplinkFlash

from machine import I2C
from daplink_flash import DaplinkFlash

i2c = I2C(1)
flash = DaplinkFlash(i2c)
MéthodeDescription
device_id()Retourne WHO_AM_I (0x4C)
set_filename(name, ext)Définir le fichier (format 8.3)
get_filename()Retourne (name, ext)
clear_flash()Effacer toute la flash W25Q64
write(data)Écrire des données (bytes ou str)
write_line(text)Écrire une ligne (texte + \n)
read_sector(sector)Lire un secteur de 256 octets
read(length=None)Lire le fichier courant
clear_config()Effacer la config zone
write_config(data, offset=0)Écrire dans la config zone
read_config()Lire la config zone
busy()Retourne True si flash occupée

Exemple : écrire des données CSV

from machine import I2C
from daplink_flash import DaplinkFlash

i2c = I2C(1)
flash = DaplinkFlash(i2c)

flash.set_filename("DATA", "CSV")
flash.clear_flash()
flash.write_line("temperature;humidity")
flash.write_line("25.3;48.2")
flash.write_line("26.1;45.7")

content = flash.read()
print(content)

Les données sont ensuite accessibles via USB Mass Storage en branchant la carte à un ordinateur.

SteamiConfig

from machine import I2C
from daplink_flash import DaplinkFlash
from steami_config import SteamiConfig

i2c = I2C(1)
config = SteamiConfig(DaplinkFlash(i2c))
config.load()

print(f"Board: {config.board_name}")
print(f"Revision: {config.board_revision}")
Propriété / MéthodeDescription
load()Charger la config depuis la flash
save()Sauvegarder la config dans la flash
board_revisionNuméro de révision (int ou None)
board_nameNom de la carte (str ou None)
set_temperature_calibration(sensor, gain, offset)Stocker la calibration température
get_temperature_calibration(sensor)Lire la calibration température
apply_temperature_calibration(sensor_instance)Appliquer la calibration à un capteur

Capteurs supportés pour la calibration

CléCapteur
htsHTS221
magLIS2MDL
ismISM330DL
hidWSEN-HIDS
padWSEN-PADS

Format JSON de la config zone

{
"rev": 3,
"name": "STeaMi-01",
"tc": { "hts": { "g": 1.0, "o": -0.5 }, "pad": { "g": 1.0, "o": -1.73 } }
}

Mise à jour du firmware

Le firmware DAPLink peut être mis à jour via le mode maintenance :

  1. Maintenir le bouton Reset enfoncé pendant le branchement USB
  2. La carte apparaît comme un disque "MAINTENANCE"
  3. Glisser-déposer le fichier firmware .hex sur le disque
  4. La carte redémarre automatiquement

Pour une carte neuve sans DAPLink, l'installation initiale se fait via une sonde SWD (ST-Link ou Black Magic Probe) avec l'outil DapLink-EasyFlash :

  1. Connecter la sonde SWD aux broches SWCLK/SWDIO du port debug
  2. Connecter la carte via USB
  3. Lancer DapLink-EasyFlash

L'outil effectue automatiquement :

  • Déverrouillage du RDP du STM32F103
  • Effacement de la flash
  • Flash du bootloader
  • Flash du firmware DAPLink

Fichiers firmware

ComposantLien
Bootloader STM32F103stm32f103xb_bl.bin
Firmware STeaMistm32f103xb_steami32_if.bin

Voir le README DapLink-EasyFlash pour les instructions détaillées et le câblage.

Installation de la stack radio (BLE/Thread/Zigbee)

La stack radio du STM32WB55 (FUS + firmware wireless) peut être installée via l'outil WebUSB steami-tools/webusb-wireless-stack :

  1. Connecter la carte via USB
  2. Ouvrir l'outil dans un navigateur Chromium
  3. Sélectionner le firmware wireless souhaité (BLE Stack, Thread, Zigbee, etc.)
  4. Flasher via WebUSB

Les firmwares disponibles incluent :

  • BLE Stack full — Stack Bluetooth complète
  • BLE Stack light — Stack Bluetooth allégée
  • Thread — Support OpenThread
  • Zigbee — Support Zigbee
  • Combinés — BLE + Thread, BLE + Zigbee
attention

L'installation de la stack radio nécessite un navigateur Chromium (Chrome, Edge). Firefox et Safari ne supportent pas le Web USB.

Voir aussi