Dans cette série d'articles, nous allons :

  • Découvrir la famille de processeurs Espressif ESP32-S3
  • Déployer les différents outils pour programmer et debugger ces microcontrôleurs
  • Tenter d'utiliser TinyGo pour compiler et exécuter notre premier programme
    NB: A date, le support des ESP32-S3 sur TinyGo est encore en phase de developpement. Il est donc possible que nous n'arrivions pas jusqu'a cette étape 😄

Caractéristiques techniques ESP32-S3

Quelques informations sur les ESP32-S3 :

CaractéristiqueDétail
CPUDouble cœur Xtensa® LX7 (cadencé jusqu'à 240 MHz)
Architecture32 bits, optimisée pour l'efficacité énergétique
Mémoire512 KB de SRAM interne, support pour PSRAM externe
Wi-FiWi-Fi 4 (802.11 b/g/n)
BluetoothBluetooth 5.0 (BLE + Bluetooth Mesh)
Accélération IAInstructions SIMD pour optimiser les algorithmes de Machine Learning (accélération IA légère)
Cryptographie matérielleAES, SHA, RSA, ECC, Random Number Generator (TRNG)
SécuritéBoot sécurisé, chiffrement de flash, signature numérique, HMAC, Secure Debug
Interface USBContrôleur USB OTG intégré (peut agir comme périphérique ou hôte)
Périphériques standardsSPI, I2C, I2S, UART, CAN, PWM, ADC, DAC, SD/MMC, Ethernet MAC
Capacités de traitement parallèleDeux cœurs indépendants pour tâches multitâches (FreeRTOS natif)
GPIOsJusqu’à 45 broches GPIO (beaucoup multiplexées avec fonctions spéciales)
DMAPlusieurs canaux DMA pour des transferts rapides de données
Mode Deep SleepTrès basse consommation, idéal pour l'IoT sur batterie
Mémoire FlashInterface pour NOR/NAND Flash externe (via SPI)
USB-JTAG intégréDébogage sans matériel externe via le port USB
Taille et PackagingDisponibles en modules (ESP32-S3-WROOM, ESP32-S3-WROVER) et en puces individuelles

Carte de développement

J'ai choisi une carte ESP32-S3 avec écran LCD 800x480:
Elle dispose de connecteurs USB, I2C, CAN Bus, UART, Chargeur de batterie, Sd Card, ce qui ouvre de nombreuses possibilités, le tout pour moins de 60 Euros.

Les premiers pas

Mes premiers objectifs ont été de :

  • Comment alimenter électriquement la carte
  • Comment programmer la carte
  • Comment accéder à une interface série pour échanger des messages

La carte ESP32-S3-Touch-LCD-7 dispose de deux ports USB-C.
La commande linux "lsusb" nous donne des indications sur les deux ports USB:

// Port USB marqué "USB"
$ lsusb
Bus 001 Device 012: ID 303a:1001 Espressif USB JTAG/serial debug unit

// Port USB marqué "UART1"
$ lsusb
Bus 001 Device 013: ID 1a86:55d3 QinHeng Electronics USB Single Serial

On a bien un port USB pour un usage mixte JTAG et UART, et un second port pour accéder à une UART. Les deux ports USB permettent d'alimenter électriquement la carte et l'écran.

Pour le moment, nous n'avons pas besoin d'en savoir plus.

Flasher un firmware

Le programme "esptool.py" (package Arch esptool) permet (entre autres) de :

  • Lire, écrire, effacer la mémoire et la flash.
  • Lecture du chip_id, flash_id, mac from OTP Rom (One Time Programmable)

Plusieurs firmwares sont disponibles dans le package de sources/sdk de démonstration:
(https://files.waveshare.com/wiki/ESP32-S3-Touch-LCD-7/ESP32-S3-Touch-LCD-7-Demo.zip)

Exemple d'utilisation d'esptool pour flasher un des firmwares d'exemple:

$ esptool.py   --chip=esp32s3   --port /dev/ttyACM0   write_flash   0x0000  ~/Downloads/tmp/ESP32-S3-Touch-LCD-7-Demo/Firmware/UART_Test.bin 

Pour vérifier le bon fonctionnement du firmware flashé, on lance un terminal série et on reboote la carte avec le bouton RESET:

$ picocom /dev/ttyACM0  -b 115200
 CPU0
SP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DOUT, clock div:1
load:0x3fce2820,len:0x1918
load:0x403c8700,len:0x4
load:0x403c8704,len:0xe5c
load:0x403cb700,len:0x303c
entry 0x403c893c    <<<< Démarrage de l'application
*****************Fin des messages du bootloader *******************
*****************Début des messages de l'application **************
I (27) boot: ESP-IDF v5.3.1 2nd stage bootloader
I (27) boot: compile time Nov 15 2024 14:13:22
I (27) boot: Multicore bootloader
I (30) boot: chip revision: v0.2
I (34) qio_mode: Enabling default flash chip QIO

On peut voir ci dessus les 11 premieres lignes du bootloader, puis les messages de l'application.

Conclusions

Ces premiers tests nous ont permis de :

  • Avoir un apperçu des possibilités de la plateforme ESP32S3
  • Prendre en main la carte de développement
  • Flash d'un firmware de démonstration avec l'outil esptool
  • Recevoir des messages de l'application de démo .
  • Visualiser les messages du bootloader avant le démarrage de l'application