ESP32 + Black Magic Probe = debug SWD en Wi-Fi !

Magazine
Marque
Hackable
Numéro
46
Mois de parution
janvier 2023
Spécialité(s)


Résumé

Dans Hackable 40 [1], nous avons fait connaissance avec la Black Magic Probe, un outil de mise au point faisant fonctionner un serveur GDB et permettant de se passer totalement d'OpenOCD pour contrôler l'exécution d'un code sur un microcontrôleur ARM. Le buzz récent autour du Flipper Zero, un « multi-tool pour geeks », ainsi que quelques connaissances qui se reconnaîtront m'ont fait me pencher sur le « Wi-Fi Debugger Module » de ce périphérique...


Body

Le Flipper Zero [2] semble être un outil vraiment très intéressant, puisqu'il regroupe un grand nombre de fonctionnalités sous la forme d'un petit boîtier équipé d'un écran LCD présentant une interface « rigolote », avec une mascotte de dauphin (d'où le nom). Le Flipper Zero sait faire de la communication sub-GHz (433 MHz principalement), de la RFID 125 kHz, du NFC (+ Mifare Classic inclus), du Bluetooth, de l'infrarouge, du 1-Wire, de l'USB, de l'authentification U2F, etc. Le tout avec un firmware open source [3] s'exécutant sur un microcontrôleur STM32WB55RG (ARM Cortex-M4 + Cortex-M0+) et une communauté qui semble extrêmement active. Et, sans surprise, le produit est absolument indisponible après la campagne de financement participatif sur KickStarter et les livraisons de l'été dernier.

Mais le point qui nous intéresse ici n'est pas tant cet adorable gadget que le module permettant de le programmer et de mettre au point son firmware. Le Flipper Zero ne dispose pas de connectivité Wi-Fi par lui-même, mais les développeurs ont eu l'excellente idée de rendre l'outil de développement, ou plus exactement la sonde SWD/JTAG, compatible avec un réseau sans fil. Ainsi, le Wi-Fi Debugger Module [4] est un circuit qui se connecte sur la tranche du Flipper Zero et offre une solution de flashage et de mise au point. Mais plus intéressant encore, ce circuit repose sur un ESP32 avec un firmware basé sur FreeRTOS où le code de la Black Magic Probe est une application.

À cette date, je n'ai pas de Flipper Zero, faute de m'être réveillé assez tôt sur le sujet. Le module ne m'est donc pas d'une grande utilité en lui-même, mais présente une solution intéressante en guise de système de programmation et de mise au point. Dans l'article précédent sur la Black Magic Probe ou BMP [1], nous avons pu voir comme il était agréable de fusionner un ensemble connecteur SWD + sonde + OpenOCD + GDB en un montage unique faisant fonctionner directement un serveur GDB. Avec une telle configuration, il suffisait de demander au GDB local de se connecter en USB/série au serveur de la BMP pour programmer la flash de la cible, exécuter les codes pas-à-pas ou encore placer des points d'arrêt pour vérifier le contenu de la SRAM, des variables ou des registres.

Le module imaginé par les créateurs du Flipper Zero va plus loin. Il permet non seulement de faire de même via une liaison USB, mais aussi, et surtout à travers le réseau (via Wi-Fi). Plus besoin d'un câble et d'un ordinateur à proximité de la cible, il suffit de brancher le module et de tout faire à distance. Car, oui, cette solution n'est absolument pas spécifique au Flipper Zero et fonctionnera parfaitement pour toutes cibles disposant d'un connecteur SWD (ou Serial Wire Debug en version longue).

Mieux encore, non seulement le schéma du module Flipper Zero est disponible [5], mais il est parfaitement reproductible avec une carte de développement ESP32-S2 comme le Lolin/Wemos S2 Mini [6] qu'on trouvera sans problème sur les sites habituels pour moins de 4 € [7].

bmp flipperdevboard-s

Le « Wi-Fi Debugger Module » du Flipper Zero fait office de debugger et de programmeur pour le périphérique, et remplace le classique outil ST-LINK de STM (qui peut également être utilisé). Bien entendu, à cette date, le module est tout autant en rupture de stock que le Flipper Zero lui-même...

1. Le montage

L'ESP32-S2 n'est pas un microcontrôleur choisi par hasard, puisque c'est, semble-t-il, le seul de la gamme Espressif (ESP8266, ESP32, ESP32-S2, ESP32-S3, ESP32-C3 et ESP32-C6) à proposer de l'USB OTG en plus de la classique connectivité Wi-Fi. Il ne dispose pas du Bluetooth ou de BLE, mais inclus 320 Ko de SRAM, 4 Mo de flash intégrés et 2 Mo de PSRAM intégrés, le tout construit autour d'un processeur Tensilica Xtensa LX7 à 270 MHz (+ un core RISC-V pour l'ULP (Ultra Low Power)). Le point clé est ici l'USB OTG afin de permettre le fonctionnement en USB CDC, rendant le montage accessible sous la forme d'un port série.

Pour reproduire le module Flipper Zero, un Lolin/Wemos S2 Mini dispose de toute la connectivité nécessaire :

  • IO1 et IO2 respectivement connectés aux lignes SWCLK et SWDIO ;
  • IO3, IO4 et IO5 connectés à des LED, via des résistances adaptées de (100 à 330 ohms selon la couleur) dont les anodes communes sont reliées au 3,3 volts ;
  • IO17 et IO18 formant respectivement RX et TX d'une liaison série « logicielle » (les lignes IO44 et IO43 de l'UART « physique » n'étant pas accessibles sur le S2) ;
  • IO0 correspond à la broche devant être mise à la masse pour activer le bootloader et reprogrammer la flash ;
  • EN étant la ligne de reset.

Ces deux dernières broches sont reliées à deux boutons-poussoirs sur la carte. On peut donc très simplement passer le S2 en mode programmation en maintenant enfoncé le bouton « 0 » et en appuyant brièvement sur celui marqué « RST ». Ce reset étant contrôlé manuellement, ceci nous vaut un message d'avertissement lors de la programmation, mais sans conséquence pour la bonne marche des opérations.

Le port série, via IO17 et IO18, s'avère être d'une grande importance, du moins avec la version testée du firmware (commit 74ef924 du 2 juin 2022), comme nous le verrons plus loin. Il est donc capital de relier ces deux lignes à un convertisseur USB/série (3,3 volts !), faute de quoi vous aurez bien du mal à régler les paramètres de connexion Wi-Fi.

Dans l'article sur la BMP dans le numéro 40, j'avais utilisé une carte STM Nucleo-F401RE pour transformer la partie ST-LINK par flashage du firmware BMP dans le STM32F103 s'y trouvant. L'autre partie de la carte étant le domaine du STM32F411 et les deux étant reliés directement sur le circuit imprimé (et deux cavaliers), nous n'avions pas eu besoin de parler de la connexion SWD.

Ici, nous comptons utiliser une sonde autre que la partie ST-LINK déjà interfacée. Il nous faut donc connecter le STM32F411 à la carte Wemos S2 Mini et retirer les cavaliers. Ceci se fera assez simplement via la nomenclature suivante :

  • Masse : broche 19 ;
  • SWCLK : broche 15 ;
  • SWDIO : broche 13 ;
  • SWO et RESET ne sont pas connectés.

Les désignations concernent le connecteur CN7 (Morpho dans le jargon STM), c'est celui qu'on voit à gauche lorsqu'on regarde la carte d'en haut avec le connecteur USB en haut et avec la sérigraphie lisible dans le bon sens.

Remarquez qu'avec une Raspberry Pi Pico, les choses sont plus simples, puisque le connecteur « DEBUG » est distinct et la question du branchement ne se pose donc pas.

2. Construction et flashage

L'assemblage du montage est relativement simple, puisque nous venons de l'évoquer à l'instant. Il vous suffira de connecter le convertisseur USB/série aux broches IO17 et IO18 du S2 et de faire de même avec IO1 et IO2 pour les signaux SWCLK et SWDIO sur la cible (plus la masse, bien entendu). Les LED peuvent être ajoutées, mais n'ont pas de réel usage pratique à mon sens. Notez qu'il s'agit normalement d'une unique LED RGB pouvant donc prendre plusieurs couleurs en fonction de l'état des trois broches, exactement comme la LED LD1 sur la partie ST-LINK/BMP de la carte Nucleo.

C'est donc l'aspect logiciel qui sera le point le plus important ici. Pour construire le firmware, vous aurez besoin de l'environnement ESP-IDF, que nous avons déjà traité dans les pages du magazine (numéro 34 [8]) en version 4.0. Nous en sommes à présent à la version 4.3.4, mais peu de choses ont énormément changé concernant l'installation ou l'utilisation pratique.

bmpflip s2mini-s 0

La carte (ou module) Wemos/LOLIN S2 Mini est l'équivalent du D1 mini (ESP8266) en termes d'encombrement, mais construit autour d'un ESP32-S2. Un cousin éloigné du classique ESP32 incluant de l'USB OTG et une flash+psram intégrées dans le microcontrôleur.

Si vous êtes sous Windows, il existe un installer qui fera tout le travail à votre place (dépendances incluses). Celui-ci est disponible sur le site de téléchargement d'Espressif [9].

Sous GNU/Linux et macOS, la procédure sera un peu moins automatisée et nécessitera l'installation d'un certain nombre de prérequis. Là encore, une page dédiée du site d'Espressif décrira la procédure en détail [10].

Passée l'étape des prérequis, l'installation en elle-même se résume à invoquer le script adéquat en spécifiant les différentes plateformes pour lesquelles on souhaite développer. Ici, ceci se résumerait potentiellement à :

$ cd kkpart
$ git clone --recursive https://github.com/espressif/esp-idf.git
$ cd esp-idf
$ ./install.sh esp32s2

Bien entendu, mieux vaudra ne pas se limiter au seul ESP32-S2 et opter pour l'installation de l'ensemble des plateformes en spécifiant simplement all. Notez que, depuis peu, le script d'installation est également décliné en une version pour le shell Fish, si vous aimez la simplicité et les choses multicolores qui piquent les yeux.

Le travail de l'installeur consiste, en grande part, à télécharger, désarchiver et copier les chaînes de compilation pour les différentes architectures (dans ~/.espressif sur un système GNU/Linux). Rien n'est effectivement installé dans le système ou ne nécessite de permissions du super-utilisateur. Cette souplesse vous obligera cependant à initialiser l'environnement dans le terminal avant utilisation, en invoquant source export.sh dans le répertoire esd-idf (là encore, une déclinaison Fish existe, ainsi que pour les interpréteurs de commandes Windows) :

$ source export.sh
Setting IDF_PATH to '/home/denis/ESP32/esp-idf'
Detecting the Python interpreter
Checking "python" ...
Python 3.7.3
"python" has been detected
Adding ESP-IDF tools to PATH...
Not using an unsupported version of tool
  openocd-esp32 found in PATH: 0.11.0.
Using Python interpreter in /home/denis/.espressif/
  python_env/idf4.4_py3.7_env/bin/python
Checking if Python packages are up to date...
Python requirements from /home/denis/ESP32/esp-idf/
  requirements.txt are satisfied.
Added the following directories to PATH:
  /home/denis/ESP32/esp-idf/components/esptool_py/esptool
  /home/denis/ESP32/esp-idf/components/espcoredump
[...]
  /home/denis/ESP32/esp-idf/tools
Done! You can now compile ESP-IDF projects.
Go to the project directory and run:
 
  idf.py build

Comme le message de fin le précise, vous pouvez ensuite vous rendre dans le répertoire de votre projet et utiliser la commande idf.py pour procéder à différentes opérations, dont la construction.

Le firmware du module de développement du Flipper Zero est disponible sur GitHub [11] et pourra être cloné, puis directement construit avec :

$ git clone --recursive \
  https://github.com/flipperdevices/blackmagic-esp32-s2.git
remote: Enumerating objects: 2006, done.        
remote: Total 2006 (delta 0), reused 0 (delta 0), pack-reused 2006        
Réception d'objets: 100% (2006/2006), 2.73 MiB | 13.75 MiB/s, fait.
Résolution des deltas: 100% (1172/1172), fait.
Chemin de sous-module 'components/tinyusb/tinyusb/tools/uf2/hidapi' :
  'a6a622ffb680c55da0de787ff93b80280498330f' extrait
Chemin de sous-module 'components/tinyusb/tinyusb/lib/CMSIS_5' :
  '20285262657d1b482d132d20d755c8c330d55c1f' extrait
 
$ cd blackmagic-esp32-s2
$ idf.py build
[...]
-- Building ESP-IDF components for target esp32s2
[...]
# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs,data,nvs,0x9000,24K,
phy_init,data,phy,0xf000,4K,
factory,app,factory,0x10000,2M,
nvs_storage,data,nvs,0x210000,100K,
[...]
-- IDF version: v4.4.1
-- FW date: 13-09-2022
-- FW commit: c4aefda
-- FW branch: dev
-- FW branch num: 123
-- FW version: 0.0.2
-- BM version: v1.7.1-284-g7307f08
[...]
esptool.py v3.3-dev
Creating esp32s2 image...
Merged 2 ELF sections
Successfully created esp32s2 image.
[...]

Notez que le firmware est composé d'un ensemble de modules (BMP [12], M*Lib [13], et TinyUSB [14]) et que, de ce fait, l'option --recursive est indispensable (ou cloner le dépôt normalement et faire git submodule update --init --recursive ensuite).

ATTENTION : Le dépôt Git contient un fichier sdkconfig correspondant à la configuration du SDK pour ce projet ESP-IDF. Celle-ci est déjà parfaitement adaptée à la construction du firmware et ne nécessite pas de modification (via idf.py menuconfig). Pire encore, l'utilisation de idf.py set-target esp32s2, pour définir la cible, aura pour effet de réinitialiser cette configuration et le contenu de sdkconfig. Ceci n'est pas nécessaire, le projet est déjà configuré pour ESP32-S2. Si vous comptez jouer avec les paramètres, voire porter le projet sur un autre modèle d'ESP32, faites une copie du sdkconfig pour pouvoir revenir facilement en arrière en cas de problème (ou simplement utiliser git checkout sdkconfig).

Si l'opération de construction se déroule avec succès, ce qui devrait être le cas, vous retrouverez dans build/ le firmware binaire :

$ ls build/blackmagic.*
build/blackmagic.bin
build/blackmagic.elf
build/blackmagic.map

Vous pourrez alors connecter votre S2 Mini en USB et le basculer en mode programmation via les boutons « RST » et « 0 ». Celui-ci devrait alors apparaître dans le système comme un périphérique USB CDC (dmesg) :

usb 2-2.4.4: Product: ESP32-S2
usb 2-2.4.4: Manufacturer: Espressif
usb 2-2.4.4: SerialNumber: 0
cdc_acm 2-2.4.4:1.0: ttyACM2: USB ACM device

Si toutes les permissions sont correctement configurées (ce qui sort totalement du cadre de cet article), il vous suffira d'invoquer une nouvelle fois idf.py en spécifiant le périphérique en question :

$ idf.py -p /dev/ttyACM2 flash
esptool.py v3.3-dev
Serial port /dev/ttyACM2
Connecting....
Chip is ESP32-S2FNR2
Features: WiFi, Embedded Flash 4MB,
  Embedded PSRAM 2MB, ADC and temperature
  sensor calibration in BLK2 of efuse V1
Crystal is 40MHz
MAC: 84:f7:03:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
[...]
Writing at 0x0003a972... (11 %)
Writing at 0x0003b634... (11 %)
Writing at 0x0003d00a... (12 %)
Writing at 0x0003e574... (12 %)
Writing at 0x00040302... (12 %)
Writing at 0x00041091... (13 %)
Writing at 0x00041bf4... (13 %)
Writing at 0x00042849... (14 %)
[...]
WARNING: ESP32-S2FNR2 chip was placed into
download mode using GPIO0. esptool.py can
not exit the download mode over USB. To run
the app, reset the chip manually.
[...]
FAILED: CMakeFiles/flash
[...]
ninja: build stopped: subcommand failed.
ninja failed with exit code 1

Le flashage semble se conclure sur une erreur, mais ce n'est absolument pas le cas (c'est le problème dont je parlais en tout début d'article). En réalité, l'ESP-S2 ne peut simplement pas être redémarré via USB CDC comme ce serait le cas avec un ESP32 et le contrôle de flux de la puce USB/série (DTR et/ou RTS). Ninja signale l'erreur, mais le message n'est en réalité qu'un avertissement vous demandant de redémarrer vous-même le microcontrôleur. Chose qu'on fera dans la foulée sans discuter.

3. Paramétrage du Wi-Fi

La procédure standard pour configurer le module consiste normalement à se connecter au point d'accès Wi-Fi qu'il propose par défaut sous le nom « blackmagic » (canal 1, mot de passe « iamwitcher », spécifié dans main/network.c), puis d'accéder à l'interface web pour basculer en mode station/client Wi-Fi et en spécifiant les paramètres du point d'accès à utiliser. Pour une raison mystérieuse, ceci ne fonctionne pas et la page web en question affiche un message d'erreur :

bmp webwifi-s

Fort heureusement, nous avons eu la présence d'esprit de connecter l'interface série logicielle du S2 Mini et pouvons donc accéder (115200 bps 8N1) à cette dernière, où nous découvrons une ligne de commandes (REPL) permettant de configurer différents éléments :

         ____       BLACK
        /   /\      MAGIC
       /   /\ \
      (   / \ \     '
     _/ (___/ /_    . '
    ( _____._.__ )   ,'o
    // / 'o' |    O .
   // / '   ' |\   ,,,
  // /\ '     '| \_/''/
// / )______/\   \_/
//   \ (       ) `---'
\\___/ |      \
\( \ |       \
/ \_@ |        )
\    , |        \
/ / / |        /
\ \    :    /\ /
  \ \ \ : / |\)
   \ / |\/| |
   / /   | |-
   \    /|__|
    \ / |''|
     \ \ --
      \/
   
>: ?
!                    - alias for device_info
?                    - alias for help
config_get           - show current config
config_set_wifi_mode - set Wi-Fi mode, AP (own access point) or STA
                       (join another network), requires a reboot to apply
config_set_ap_pass   - set AP mode password, requires a reboot to apply
config_set_ap_ssid   - set AP mode SSID, requires a reboot to apply
config_set_sta_pass - set STA mode password, requires a reboot to apply
config_set_sta_ssid - set STA mode SSID, requires a reboot to apply
device_info          - show device info (mac, fw version, chip info, etc)
factory_reset        - reset config (clears NVS storage)
gpio_get             - get gpio level
gpio_set             - set gpio level
help                 - show this help
led                  - set led color
nvs_dump             - show all NVS contents
ping                 - answers pong
reboot               - reboot device
wifi_ap_clients      - list AP mode clients
wifi_ip              - show current ip, mask and gateway
wifi_sta_info        - show STA mode network info
wifi_scan            - scan all available Wi-Fi networks (takes some time)
>:

En dehors du logo qui est du plus bel effet, nous avons là une interface dont l'aide peut être affichée avec ? et qui va nous permettre de configurer le Wi-Fi. De base avec le firmware fraîchement flashé, nous sommes en mode point d'accès :

>: config_get
ap_ssid: blackmagic
ap_pass: iamwitcher
sta_ssid: blackmagic
sta_pass: iamwitcher
wifi_mode: AP

Nous pouvons, à l'aide de quelques commandes, paramétrer tout cela :

>: config_set_sta_ssid "mon_SSID"
OK
Reboot to apply
 
>: config_set_sta_pass "Phrase2Passe"
OK
Reboot to apply
 
>: config_set_wifi_mode STA
OK
Reboot to apply
 
>: reboot
SW REBOOT

Notez également que la commande wifi_scan vous permettra d'obtenir une liste des points d'accès visibles à proximité. Si reboot ne fonctionne pas, utilisez simplement le bouton « RST » du S2 Mini. Une fois le redémarrage effectué, l'ESP32 devra normalement s'être connecté au point d'accès et avoir obtenu une adresse IP. Choses que vous pouvez vérifier facilement via la console série avec :

>: wifi_sta_info
74:ac:b9:xx:xx:xx 3ch -43dBm bgn
OK
 
>: wifi_ip
ip:   192.168.0.164
mask: 255.255.255.0
gw:   192.168.0.100

Un service mDNS sera également mis en service, vous permettant d'accéder au montage via son nom d'hôte, blackmagic.local, vous évitant d'utiliser l'adresse IP pouvant potentiellement changer selon votre configuration DHCP. En cas de problème, il faudra vérifier l'exactitude des paramètres et éventuellement tester une autre version du firmware (c'est celui de développement qui est utilisé ici). Vous pouvez également obtenir des informations sur le périphérique avec :

>: !
mac_wifi_sta:            84f703f4d78e
mac_wifi_ap:             84f703f4d78f
mac_eth:                 86f703f4d78f
idf_version:             v4.4.1
blackmagic_version:      v1.7.1-284-g7307f08
firmware_commit:         c4aefda
firmware_branch:         dev
firmware_branch_num:     123
firmware_version:        0.0.2
firmware_build_date:     12-09-2022
chip_model:              ESP32-S2
chip_cores:              1
chip_revision:           0
chip_feature_emb_flash:  false
chip_feature_wifi_bgn:   true
chip_feature_ble:        false
chip_feature_bt:         false
chip_feature_IEEE802154: false

Vous pouvez aussi jeter un œil à l'interface web, toujours active, présentant diverses informations, dont la liste des processus FreeRTOS actifs :

bmp webPS-s

4. Utilisation avec un STM32F401 et un RP2040

Nous avons à présent un module accessible via le LAN et nous pouvons donc tester le fonctionnement du serveur GDB Black Magic Probe. Celui-ci est accessible via la liaison USB/série, exactement comme c'est le cas avec la BMP classique que nous connaissons déjà. Nous allons d'ailleurs utiliser le même code simpliste, pour STM32F401, que la dernière fois :

$ arm-none-eabi-gdb build/blinkF401.elf
Copyright (C) 2021 Free Software Foundation, Inc.
[...]
Reading symbols from build/blinkF401.elf...
(gdb)
 
(gdb) target extended-remote /dev/ttyACM2
Remote debugging using /dev/ttyACM2
 
(gdb) monitor swdp_scan
Available Targets:
No. Att Driver
1      STM32F40x M4
 
(gdb) attach 1
Attaching to program:
~/SRC/C/STM/blinkF401/build/blinkF401.elf, Remote target
HAL_GetTick () at Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:325
325       return uwTick;
 
(gdb) b main
Breakpoint 1 at 0x80005be: file Core/Src/main.c, line 73.
Note: automatically using hardware breakpoints for read-only addresses.
 
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: ~/SRC/C/STM/blinkF401/build/blinkF401.elf
 
Breakpoint 1, main () at Core/Src/main.c:73
73        HAL_Init();
 
(gdb)

Très classiquement, nous lançons GDB pour traiter le fichier blinkF401.elf (compilé avec les symboles de debug), spécifions la cible distante en précisant le premier port série fourni par le S2 Mini et nous nous attachons à la cible après avoir scanné les périphériques SWD présents. S'en suit la mise en place d'un point d'arrêt et une nouvelle exécution du programme qui s'arrête automatique sur main().

Ceci n'a rien de bien exceptionnel, si ce n'est par le fait que nous nous passons de la nécessité d'exécuter OpenOCD en parallèle pour servir d'interface avec GDB. Ce qui est très intéressant, en revanche, est de pouvoir faire exactement la même chose via le réseau :

$ arm-none-eabi-gdb build/blinkF401.elf
Copyright (C) 2021 Free Software Foundation, Inc.
[...]
Reading symbols from build/blinkF401.elf...
(gdb)
 
(gdb) target extended-remote blackmagic.local:2345
Remote debugging using blackmagic.local:2345
 
(gdb) monitor swdp_scan
(gdb) attach 1
(gdb) b main
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: ~/SRC/C/STM/blinkF401/build/blinkF401.elf
 
Breakpoint 1, main () at Core/Src/main.c:73
73        HAL_Init();
 
(gdb)

Nous obtenons le même comportement que précédemment, mais en Wi-Fi ! Notez que nous avons spécifié le nom d'hôte de l'ESP32, chose bien plus pratique que d'utiliser son adresse IP. Un nom d'hôte que vous ne pouvez changer qu'en modifiant les sources (network.c), puisqu'il n'existe pas d'option de configuration pour cet élément. Il pourrait être intéressant de faire et de soumettre cette modification, voire de compléter automatiquement le nom avec le numéro de série de l'ESP32S2 (ou son adresse MAC). Ceci est également valable pour le numéro de port TCP utilisé par défaut, défini dans network-gdb.c.

Nous pouvons donc tranquillement manipuler et analyser notre code, mais aussi reflasher le firmware sur la cible :

(gdb) load
Loading section .isr_vector, size 0x194 lma 0x8000000
Loading section .text, size 0xee8 lma 0x8000194
Loading section .rodata, size 0x10 lma 0x800107c
Loading section .ARM, size 0x8 lma 0x800108c
Loading section .init_array, size 0x4 lma 0x8001094
Loading section .fini_array, size 0x4 lma 0x8001098
Loading section .data, size 0xc lma 0x800109c
Start address 0x08000fb8, load size 4264
Transfer rate: 9 KB/sec, 426 bytes/write.
(gdb)

Et donc avoir un cycle de développement et de mise au point beaucoup plus efficace qu'en utilisant tout autre matériel encombrant.

Ces manipulations ont également été réalisées avec une cible Raspberry Pi Pico et son microcontrôleur RP2040, avec exactement les mêmes opérations et les mêmes résultats. Je vous ferai grâce cependant ici des sorties console, qui n'apporteraient pas grand-chose de plus à l'article. D'autres microcontrôleurs peuvent être certainement utilisés de la même manière, comme ceux de Nordic par exemple, mais je n'ai testé ici que le STM32 et le RP2040.

bmpflip montage-s

Le montage final est un peu une salade de câbles, mais ce n'est que pour la phase de test et de développement. Le convertisseur USB/série n'est plus utile une fois le firmware configuré pour fonctionner en station Wi-Fi et les LED sur la platine à essais, qui ne présentent que peu d'intérêt, pourront également être éliminées.

Conclusion

Comme nous pouvons le voir, lorsqu'un nouveau projet est mis en route, ce n'est pas nécessairement le point sur lequel se concentre toute l'attention du public qui est le seul intéressant. Très souvent, ce genre d'initiative implique le développement d'outils et de projets satellites qui peuvent parfaitement être utilisés dans un autre contexte et un autre environnement. Ici, à défaut d'avoir pu mettre la main sur un Flipper Zero, nous avons découvert un outil de développement furieusement intéressant et polyvalent. Certes, l'aspect général n'est pas aussi « fini » que le module original, mais tout ceci reste cependant parfaitement fonctionnel (sachant que le port série logiciel n'est plus nécessaire une fois la configuration faite et que rien ne vous empêche de mettre cela dans un joli petit boîtier).

Je terminerai en précisant que les sources du firmware du module ont moins d'un an, avec une unique release (0.0.2) pour l'instant. Il reste donc beaucoup de choses à améliorer (comme les options de configuration du port GDB ou du nom d'hôte, par exemple) et peut-être souhaiterez-vous apporter votre pierre à l'édifice, sur ces points spécifiques (si je ne l'ai pas déjà fait), ou d'autres...

Références

[1] https://connect.ed-diamond.com/hackable/hk-040/black-magic-probe-deboguez-vos-codes-avec-facilite

[2] https://flipperzero.one/

[3] https://github.com/flipperdevices/flipperzero-firmware

[4] https://docs.flipperzero.one/development/hardware/wifi-debugger-module

[5] https://cdn.flipperzero.one/Flipper_Zero_WI-FI_Module_V1_Schematic.PDF

[6] https://www.wemos.cc/en/latest/s2/s2_mini.html

[7] https://fr.aliexpress.com/item/1005003145192016.html

[8] https://connect.ed-diamond.com/Hackable/hk-034/developpement-esp32-avec-le-nouveau-esp-idf-4.0

[9] https://dl.espressif.com/dl/esp-idf/?idf=4.4

[10] https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html#

[11] https://github.com/flipperdevices/blackmagic-esp32-s2

[12] https://github.com/flipperdevices/blackmagic

[13] https://github.com/P-p-H-d/mlib

[14] https://github.com/hathach/tinyusb



Article rédigé par

Par le(s) même(s) auteur(s)

Chroot n'est pas mort, il va d'ailleurs très bien... sous OpenBSD

Magazine
Marque
GNU/Linux Magazine
Numéro
273
Mois de parution
janvier 2025
Spécialité(s)
Résumé

Dans un précédent article [1], nous avons exploré la possibilité de créer des machines virtuelles « vierges » dans le but de tester des ports OpenBSD en cours de développement, en particulier pour nous assurer que les dépendances étaient correctement décrites et complètes. Tout ceci était motivé par le fait de devoir jongler entre différentes versions du système (current versus release ou stable). Si cette contrainte n'est pas là, les choses deviennent beaucoup plus simples à gérer et les VM peuvent être remplacées par quelque chose de bien plus léger : un simple environnement chrooté.

Mettre en place une surveillance domotique avec Raspberry Pi

Magazine
Marque
Hackable
Numéro
58
Mois de parution
janvier 2025
Spécialité(s)
Résumé

Lorsqu'on parle de domotique, on pense généralement aux capteurs et aux automatisations permettant de gérer facilement son habitation pour piloter son chauffage, simuler une présence, faire des économies d'énergie ou tout simplement améliorer son confort en se débarrassant des tâches fastidieuses et répétitives. Cependant, la sécurité est également un point important, qu'on soit sur place ou à distance, et dans ce cas précis, rien de tel que de mettre en place une vidéosurveillance.

Les derniers articles Premiums

Les derniers articles Premium

PostgreSQL au centre de votre SI avec PostgREST

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Dans un système d’information, il devient de plus en plus important d’avoir la possibilité d’échanger des données entre applications. Ce passage au stade de l’interopérabilité est généralement confié à des services web autorisant la mise en œuvre d’un couplage faible entre composants. C’est justement ce que permet de faire PostgREST pour les bases de données PostgreSQL.

La place de l’Intelligence Artificielle dans les entreprises

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

L’intelligence artificielle est en train de redéfinir le paysage professionnel. De l’automatisation des tâches répétitives à la cybersécurité, en passant par l’analyse des données, l’IA s’immisce dans tous les aspects de l’entreprise moderne. Toutefois, cette révolution technologique soulève des questions éthiques et sociétales, notamment sur l’avenir des emplois. Cet article se penche sur l’évolution de l’IA, ses applications variées, et les enjeux qu’elle engendre dans le monde du travail.

Petit guide d’outils open source pour le télétravail

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Ah le Covid ! Si en cette période de nombreux cas resurgissent, ce n’est rien comparé aux vagues que nous avons connues en 2020 et 2021. Ce fléau a contraint une large partie de la population à faire ce que tout le monde connaît sous le nom de télétravail. Nous avons dû changer nos habitudes et avons dû apprendre à utiliser de nombreux outils collaboratifs, de visioconférence, etc., dont tout le monde n’était pas habitué. Dans cet article, nous passons en revue quelques outils open source utiles pour le travail à la maison. En effet, pour les adeptes du costume en haut et du pyjama en bas, la communauté open source s’est démenée pour proposer des alternatives aux outils propriétaires et payants.

Sécurisez vos applications web : comment Symfony vous protège des menaces courantes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les frameworks tels que Symfony ont bouleversé le développement web en apportant une structure solide et des outils performants. Malgré ces qualités, nous pouvons découvrir d’innombrables vulnérabilités. Cet article met le doigt sur les failles de sécurité les plus fréquentes qui affectent même les environnements les plus robustes. De l’injection de requêtes à distance à l’exécution de scripts malveillants, découvrez comment ces failles peuvent mettre en péril vos applications et, surtout, comment vous en prémunir.

Les listes de lecture

7 article(s) - ajoutée le 01/07/2020
La SDR permet désormais de toucher du doigt un domaine qui était jusqu'alors inaccessible : la réception et l'interprétation de signaux venus de l'espace. Découvrez ici différentes techniques utilisables, de la plus simple à la plus avancée...
8 article(s) - ajoutée le 01/07/2020
Au-delà de l'aspect nostalgique, le rétrocomputing est l'opportunité unique de renouer avec les concepts de base dans leur plus simple expression. Vous trouverez ici quelques-unes des technologies qui ont fait de l'informatique ce qu'elle est aujourd'hui.
9 article(s) - ajoutée le 01/07/2020
S'initier à la SDR est une activité financièrement très accessible, mais devant l'offre matérielle il est parfois difficile de faire ses premiers pas. Découvrez ici les options à votre disposition et les bases pour aborder cette thématique sereinement.
Voir les 33 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous