Analyseur logique USB : décoder UART, I2C et SPI avec PulseView
Tuto analyseur logique USB 8 canaux : installer PulseView, décoder l'UART d'un Arduino, l'I2C d'un capteur et le SPI d'une flash. Clone ou Saleae ?
Un analyseur logique USB, c'est un petit boîtier qui enregistre l'état haut ou bas de plusieurs fils à la fois et les affiche sur votre ordinateur. Avec le logiciel libre PulseView, il traduit ces signaux en octets lisibles : texte d'un port série, registres d'un capteur, commandes d'une mémoire flash. Un modèle 8 canaux à environ 20 € suffit pour apprendre, à condition de bien régler l'échantillonnage.
Ce tutoriel installe PulseView sur Windows, Linux ou macOS, puis propose trois exercices reproductibles sur du matériel qui vous appartient : un Arduino, un capteur I2C et une mémoire flash SPI.
Analyseur logique vs oscilloscope
Les deux instruments affichent des signaux dans le temps, mais ils ne répondent pas à la même question.
| Analyseur logique | Oscilloscope | |
|---|---|---|
| Ce qu'il mesure | Haut ou bas (0/1) | La tension réelle, en continu |
| Nombre de voies | 8, 16 ou plus | 2 ou 4 en général |
| Durée d'enregistrement | Longue (secondes, voire minutes) | Courte |
| Décodage de protocoles | Natif (UART, I2C, SPI, CAN…) | Selon le modèle, souvent en option |
| Question type | « Qu'est-ce que ces puces se disent ? » | « Ce signal est-il propre ? » |
| Prix d'entrée | ≈ 20 € | ≈ 300 € et plus |
Pour lire ce qui circule sur un bus série, l'analyseur logique est le bon outil. L'oscilloscope devient indispensable quand on soupçonne un problème électrique : fronts lents, parasites, niveaux de tension incorrects.
Le principe à retenir pour l'analyseur : il échantillonne. Il regarde chaque fil à intervalles réguliers. Échantillonnez au moins 4 fois, et idéalement 10 fois, plus vite que le signal le plus rapide, sinon des fronts passent entre deux mesures et le décodage échoue.
Installer PulseView/sigrok (pilotes fx2lafw)
sigrok est une suite libre d'outils pour instruments de mesure. PulseView est son interface graphique. La plupart des analyseurs 8 voies bon marché reposent sur une puce Cypress FX2. sigrok les pilote avec fx2lafw, un firmware libre chargé dans l'appareil à chaque branchement. Il n'y a rien à flasher de façon permanente. Ces modules sont donnés pour 8 voies à 24 MHz maximum. En pratique, le débit réel dépend du nombre de voies actives et du port USB.
Windows
- Téléchargez l'installeur PulseView sur la page de téléchargement de sigrok. Le projet recommande les versions nightly, plus à jour que la dernière version stable, 0.4.2.
- Branchez l'analyseur.
- Lancez Zadig, fourni avec l'installeur et accessible depuis le menu Démarrer.
- Sélectionnez l'analyseur dans la liste. Selon le modèle et l'état du firmware, il peut s'afficher sous un nom générique ou « fx2lafw ». Choisissez le pilote WinUSB et installez-le. Si la liste est vide, cochez Options → List All Devices, puis sélectionnez uniquement l'analyseur.
- Si PulseView ne trouve toujours pas l'appareil, recommencez l'étape Zadig. La documentation de sigrok indique que certains appareils changent d'identifiant USB une fois le firmware chargé et demandent donc le pilote deux fois.
Linux
Les paquets des distributions conviennent :
sudo apt install pulseview sigrok-cli sigrok-firmware-fx2lafw
sigrok-cli --scan
sigrok-cli --scan doit lister un appareil fx2lafw. S'il n'apparaît pas, débranchez et rebranchez l'analyseur pour que les règles d'accès USB (udev) s'appliquent. Consultez sinon la page Linux de sigrok. Si les paquets de votre distribution sont trop anciens, le projet propose aussi une version AppImage de PulseView.
macOS
Téléchargez l'image disque nightly sur la page de téléchargement. Elle est compilée pour les processeurs Intel : sur un Mac Apple Silicon, elle passe par Rosetta 2. Aucun pilote n'est à installer. Les recettes Homebrew existantes ne sont pas maintenues par le projet, qui recommande ses propres binaires.
Premier lancement
Dans PulseView, cliquez sur la liste des appareils, choisissez fx2lafw puis Scan for devices. L'analyseur apparaît avec ses voies D0 à D7. Réglez le nombre d'échantillons (samples) et le taux d'échantillonnage dans la barre d'outils, puis cliquez sur Run.
Branchez toujours la masse (GND) de l'analyseur sur la masse du circuit avant les voies de signal. Sans masse commune, les mesures n'ont aucun sens.
Exercice 1 : décoder l'UART d'un Arduino
L'UART est le port série le plus simple : un fil par sens, pas d'horloge. Les deux côtés s'accordent à l'avance sur une vitesse en bauds. C'est aussi lui qu'on cherche en priorité sur un appareil qu'on démonte, comme l'explique notre guide UART c'est quoi ? Trouver le port série d'un appareil.
Le montage (Arduino Uno ou Nano) :
| Analyseur | Arduino |
|---|---|
| GND | GND |
| D0 | Broche 1 (TX) |
Le programme :
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Bonjour PulseView");
delay(500);
}
La capture :
- Taux d'échantillonnage : 1 MHz, largement plus de 10 fois 9600 bauds. Nombre d'échantillons : 1 M, soit une seconde.
- Cliquez sur Run. Des paquets de créneaux apparaissent sur D0 toutes les 500 ms.
- Ajoutez le décodeur : icône Add protocol decoder, tapez
UART. Réglez TX sur D0, Baud rate sur 9600, le format sur 8N1 (8 bits de données, pas de parité, 1 bit d'arrêt), puis l'affichage (data format) sur ascii.
Le texte « Bonjour PulseView » s'affiche au-dessus des créneaux, caractère par caractère.
Pour aller plus loin : passez à Serial.begin(115200), gardez le décodeur à 9600, et observez les caractères incohérents qui apparaissent. C'est exactement ce que l'on voit face à un appareil inconnu dont on ignore la vitesse. Mesurez ensuite la durée du bit le plus court avec les curseurs de PulseView : 1 / durée donne le débit en bauds.
Exercice 2 : I2C d'un capteur
L'I2C relie un microcontrôleur à plusieurs composants avec deux fils, SCL (horloge) et SDA (données). Chaque composant a une adresse. Nous utilisons un capteur BME280 (température, humidité, pression), très répandu sur de petites cartes à quelques euros. Vérifiez que votre module accepte le 5 V : beaucoup intègrent un régulateur, mais pas tous. Sinon, utilisez une carte en 3,3 V.
Le montage :
| Analyseur | Arduino Uno | BME280 |
|---|---|---|
| GND | GND | GND |
| D1 | A5 (SCL) | SCL |
| D2 | A4 (SDA) | SDA |
Alimentez le capteur en VIN/VCC selon votre module.
Le programme lit le registre d'identification de la puce, à l'adresse 0xD0. Sur un BME280, il contient toujours 0x60, selon la fiche technique de Bosch.
#include <Wire.h>
const uint8_t ADDR = 0x76; // 0x77 sur certains modules
void setup() {
Serial.begin(9600);
Wire.begin();
}
void loop() {
Wire.beginTransmission(ADDR);
Wire.write(0xD0); // registre "chip id"
Wire.endTransmission();
Wire.requestFrom(ADDR, (uint8_t)1);
if (Wire.available()) {
Serial.println(Wire.read(), HEX); // attendu : 60
}
delay(1000);
}
La capture :
- Taux d'échantillonnage : 2 MHz ou plus. L'I2C de l'Arduino tourne à 100 kHz par défaut.
- Déclencheur (trigger) : front descendant sur D2 (SDA), pour démarrer la capture au début d'une transaction.
- Ajoutez le décodeur I²C : SCL sur D1, SDA sur D2.
Vous lisez la conversation en clair : Start, Address write: 76, Data write: D0, Start repeat ou Stop, Address read: 76, Data read: 60, Stop.
Si rien ne répond (NACK après l'adresse), essayez l'adresse 0x77. Et si votre capteur renvoie 0x58, c'est un BMP280, son cousin sans mesure d'humidité. C'est une confusion fréquente chez les vendeurs.
Exercice 3 : SPI d'une mémoire flash
Le SPI est plus rapide que l'I2C. Il utilise quatre fils : CS (sélection), SCK (horloge), MOSI (maître vers esclave) et MISO (esclave vers maître). On le retrouve sur les mémoires flash qui stockent le firmware de la plupart des objets connectés. Les observer est la première étape avant d'en extraire le contenu.
Attention aux tensions : les mémoires flash SPI courantes, comme les Winbond W25Qxx, fonctionnent en 3,3 V. Ne les reliez pas directement aux broches 5 V d'un Arduino Uno. Utilisez une carte en 3,3 V, par exemple une carte à base d'ESP32 ou de RP2040, ou un convertisseur de niveaux.
Le montage (adaptez les numéros de broches SPI à votre carte) :
| Analyseur | Signal SPI |
|---|---|
| GND | GND |
| D3 | CS |
| D4 | SCK |
| D5 | MOSI |
| D6 | MISO |
Le programme envoie la commande standard 0x9F (JEDEC ID) et lit trois octets : le fabricant, le type et la capacité.
#include <SPI.h>
const int CS_PIN = 5; // à adapter à votre carte
void setup() {
Serial.begin(115200);
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
SPI.begin();
}
void loop() {
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
digitalWrite(CS_PIN, LOW);
SPI.transfer(0x9F);
uint8_t m = SPI.transfer(0);
uint8_t t = SPI.transfer(0);
uint8_t c = SPI.transfer(0);
digitalWrite(CS_PIN, HIGH);
SPI.endTransaction();
Serial.printf("%02X %02X %02X\n", m, t, c);
delay(1000);
}
Serial.printf existe sur les cartes ESP32 et RP2040. Sur d'autres cartes, remplacez-le par trois Serial.print(…, HEX).
La capture :
- Horloge SPI à 1 MHz, donc échantillonnage à 8 MHz ou plus. Si l'analyseur perd des données, désactivez les voies inutilisées (D0–D2, D7) pour réduire le débit USB.
- Déclencheur : front descendant sur D3 (CS).
- Ajoutez le décodeur SPI (CS = D3, CLK = D4, MOSI = D5, MISO = D6, mode 0), puis empilez dessus le décodeur SPI flash.
PulseView affiche Read JEDEC ID et les trois octets. Sur une puce Winbond, le premier vaut EF, l'identifiant du fabricant. Comparez les deux autres avec la fiche technique de votre puce pour retrouver sa capacité.
C'est le même geste, observer avant d'agir, que l'on applique ensuite à la mémoire d'un appareil que l'on possède et que l'on étudie.
Clone 8 canaux vs Saleae : lequel acheter ?
| Clone 8 voies (fx2lafw) | Saleae Logic 8 | |
|---|---|---|
| Prix | ≈ 10–25 € | 499 $ (relevé octobre 2026) |
| Échantillonnage numérique | Jusqu'à 24 MHz annoncés, moins en pratique sur 8 voies | 100 MS/s |
| Entrées analogiques | Non | Oui (10 MS/s) |
| Logiciel | PulseView / sigrok (libre) | Logic 2 (Saleae), très abouti |
| Protection des entrées | Variable selon le fabricant | Documentée |
| Décodeurs | Plus de 100 dans sigrok | Nombreux, plus extensions |
Notre avis :
- Pour apprendre, pour les CTF hardware et pour la plupart des objets du quotidien, le clone suffit largement. UART, I2C et SPI lents représentent l'essentiel de ce que vous croiserez au début.
- Le Saleae vaut son prix si vous déboguez du matériel professionnellement : bus rapides, signaux analogiques, logiciel plus confortable, fiabilité. Saleae propose aussi des remises pour les étudiants, les enseignants et les amateurs, selon sa page dédiée.
- Ce qu'il ne faut pas faire : utiliser un clone avec le logiciel Saleae. Logic 2 ne prend en charge que le matériel Saleae, et PulseView fait le travail légalement et gratuitement.
Notre analyseur logique 8 voies, à 19,90 €, est un module de ce type, compatible sigrok et PulseView. Il reviendra bientôt en boutique : inscrivez-vous pour être prévenu. Pour mettre ces gestes en pratique sur un défi conçu pour cela, sans rien souder, notre puzzle Firmware Dump, prévu pour 2028, est en liste d'attente. Le reste du matériel est dans la boutique.
Questions fréquentes
Un analyseur logique à 20 € suffit-il pour débuter ?
Oui, pour l'UART, l'I2C et le SPI lents à modérés, soit l'essentiel de l'apprentissage et de nombreuses cartes du quotidien. Ses limites apparaissent sur les bus rapides, au-delà de quelques mégahertz, et sur les signaux analogiques.
Quel taux d'échantillonnage choisir ?
Au moins 4 fois, idéalement 10 fois, la fréquence du signal le plus rapide. Par exemple 1 MHz pour un UART à 115 200 bauds, 2 à 4 MHz pour un I2C à 400 kHz, 8 MHz ou plus pour un SPI à 1 MHz.
Puis-je brancher l'analyseur sur une carte en 5 V ?
Beaucoup de modules 8 voies acceptent les niveaux 3,3 V et 5 V, mais vérifiez la fiche de votre modèle. Ne dépassez jamais la tension indiquée et reliez toujours la masse de l'analyseur à celle du circuit.
Le logiciel Saleae Logic 2 fonctionne-t-il avec un clone ?
Non. Utilisez PulseView et sigrok, libres et gratuits, qui prennent en charge ces modules grâce au firmware fx2lafw.