Interface HDMI I2CDriver
Hazard3-Doom comprend une interface interactive de diagnostic I2C inspirée de I2CDriver de James Bowman. Le firmware I2CDriver original est écrit en MyForth. Hazard3-Doom réutilise le contrôleur I2C SAO FPGA déjà présent dans le projet pour les transactions de bus et affiche une interface de type I2CDriver via le chemin HDMI indexé 320x200 existant.
La fonctionnalité est principalement implémentée par :
src/i2cdriver_hdmi.c
src/i2cdriver_hdmi.h
src/sao_console.c
Le moniteur résident doit être reconstruit et rechargé après modification de ces fichiers. Aucune nouvelle synthèse FPGA n’est nécessaire pour des changements logiciels uniquement de l’interface HDMI I2CDriver tant que le bitstream en cours fournit déjà le pont SAO compatible et l’interface HDMI indexée directe.
Démarrer l’interface
Revenez d’abord au moniteur résident. Si Doom est en cours d’exécution, appuyez
sur Ctrl-X. Entrez ensuite l’une des commandes :
i2c gui
ou :
sao gui
Un lancement réussi affiche :
Starting I2CDriver HDMI...
I2CDriver HDMI active. S scan, P probe, R read, W write, X recover, 1/4 speed, C clear, Q exit.
L’affichage HDMI passe à l’écran Hazard3 I2CDriver. Tant que l’interface est active, les frappes UART contrôlent l’application HDMI plutôt que l’invite de commande normale du moniteur.
Commandes
Touche |
Opération |
Description |
|---|---|---|
|
Analyse |
Sonde les adresses I2C 7 bits normales |
|
Sonde |
Demande une adresse hexadécimale 7 bits et teste si elle répond par ACK. |
|
Lecture de registre |
Demande une adresse de périphérique et un registre 8 bits, puis effectue une lecture d’un octet avec START répété. |
|
Écriture de registre |
Demande une adresse de périphérique, un registre 8 bits et un octet de données, puis écrit ce registre. |
|
Récupération |
Lance l’opération de récupération du bus du pont SAO FPGA. Utilisez-la lorsque SDA/SCL ou une cible semble bloquée. |
|
100 kHz |
Sélectionne le débit I2C normal de 100 kHz. |
|
400 kHz |
Sélectionne le mode rapide. Avec une horloge système Hazard3 à 50 MHz, le diviseur entier produit environ 403 kHz. |
|
Effacer |
Efface la carte thermique, l’historique des transactions et la trace logique. Cela ne réinitialise pas un périphérique I2C connecté. |
|
Quitter |
Rend le contrôle UART au moniteur résident et restaure le bus SAO à 100 kHz. |
|
Quitter |
Touche de sortie alternative lorsque l’interface graphique est active. |
|
Annuler/quitter |
Annule une invite d’opérande. Lorsqu’aucune invite n’est active, |
Invites hexadécimales
P, R et W collectent directement les opérandes hexadécimaux dans
l’interface HDMI. Ne saisissez pas de préfixe 0x.
Sonder l’adresse 0x54 :
P
54
Enter
Lire le registre 0x00 du périphérique 0x54 :
R
5400
Enter
Écrire la valeur 0x80 dans le registre 0x04 du périphérique 0x54 :
W
540480
Enter
Pendant la saisie des opérandes, Backspace/Delete modifie l’entrée, Enter exécute une commande complète et Esc l’annule.
Avertissement
W modifie l’état du périphérique connecté. Consultez la documentation des
registres de la cible avant toute écriture. Les lectures peuvent également
avoir des effets de bord sur les périphériques possédant des registres
read-to-clear ou de type FIFO.
Carte thermique des adresses
La carte thermique couvre visuellement tout l’espace d’adressage 7 bits, mais
la plage d’analyse normale va de 0x08 à 0x77. Les adresses hors de cette
plage sont réservées ou inadaptées à l’opération d’analyse ordinaire.
Une adresse qui répond par ACK reçoit une chaleur maximale puis s’atténue progressivement. Les périphériques récemment actifs restent ainsi visibles sans marquer définitivement les réponses anciennes.
Un périphérique hors de la plage d’analyse peut toujours être testé
explicitement lorsque l’API de sonde SAO sous-jacente le permet. Ne supposez pas
qu’un périphérique à une adresse réservée apparaîtra dans les résultats de S.
Journal des transactions
Le journal des transactions à droite enregistre les opérations récentes de
l’interface, notamment sonde, lecture, écriture, récupération, analyse et
changements de vitesse. Ce journal est un état de diagnostic local ; C
l’efface sans modifier le périphérique connecté.
Trace logique
Le panneau HDMI inférieur affiche SDA et SCL sous forme de trace logique de transaction. Cette trace est synthétisée à partir des transactions initiées par Hazard3 via le pont SAO. Elle est utile pour visualiser la structure du protocole, par exemple :
START
address + WRITE ACK
register ACK
repeated START
address + READ ACK
data master NACK
STOP
Pour l’analyse S, l’implémentation actuelle conserve la trace de sonde de la
dernière adresse ayant répondu par ACK. Si un périphérique répond à 0x54, la
trace conservée représente START, l’octet d’adresse 0xA8 avec ACK, puis STOP.
La trace n’est pas une capture électrique des fronts SDA/SCL. L’API SAO de haut niveau indique également un résultat global de transaction plutôt que la phase d’octet exacte ayant généré un NACK ; une trace logique multi-octets en échec ne permet donc pas toujours d’identifier précisément la position de l’ACK manquant.
État de la capture passive
L’I2CDriver original possède une implémentation de capture passive sensible au
timing dans firmware/capture.fs. Hazard3-Doom n’implémente actuellement pas
le sniffer passif correspondant en logiciel.
Un véritable analyseur passif devrait être implémenté en logique FPGA, en échantillonnant SDA et SCL indépendamment du CPU Hazard3 et en plaçant les événements/timestamps décodés dans une FIFO. L’interface HDMI en C pourrait ensuite afficher ces données capturées. Tant qu’une telle FIFO n’existe pas, le pied de page décrit volontairement l’affichage comme du trafic initié plutôt que comme une capture passive.
Récupération du bus
X appelle l’opération de récupération existante du pont SAO plutôt que de
bit-banger manuellement SDA/SCL depuis le C. Le timing électrique et la propriété
restent ainsi dans le contrôleur de bus FPGA.
Utilisez la récupération lorsqu’un périphérique a été interrompu au milieu d’une transaction, que SDA reste à l’état bas ou que le bus ne répond plus après un branchement à chaud. Un bus sain ne nécessite normalement pas de récupération.
Présentation HDMI
L’interface effectue le rendu d’une image indexée 320x200 et la téléverse vers le framebuffer EBR interne inactif via le chemin direct des registres HDMI. Le logiciel choisit la banque opposée au framebuffer interne actif puis demande une permutation pendant le blanking vertical. C’est le même concept de double buffering que celui utilisé par le chemin de présentation rapide de Doom.
Quitter l’interface graphique ne reconstruit pas l’image visible avant son entrée. La dernière image de l’analyseur peut rester sur HDMI jusqu’à ce que Doom ou une autre opération vidéo du moniteur présente une nouvelle image. L’invite UART du moniteur est l’indication faisant autorité que l’interface est bien terminée.
Capture d’écran Web Serial
La console Web Serial du navigateur peut capturer l’écran HDMI I2CDriver actuel lorsque l’interface graphique en cours implémente la négociation de capacité de capture. L’interface intercepte les octets de contrôle réservés avant le traitement normal des touches/invites ; une requête d’écran n’est donc pas interprétée comme une commande I2C.
Les modes de source de capture actuels peuvent être sérialisés en 320x200 ou
400x240. Chaque pixel H3SNIP1 est un index de palette 8 bits. Les 16
entrées de palette de l’interface sont transmises en premier et les entrées
restantes valent zéro.
Voir Console Web Serial et capture d’écran HDMI pour la requête de capacité 0x1c, l’ACK 0x06, la
requête de capture 0x1d, les tailles de charge utile, le format RGB332, le
comportement de timeout et la reconstruction PNG.
Workflow de build et de test
Pour des modifications logicielles uniquement de l’implémentation HDMI I2CDriver :
./scripts/build.sh
./scripts/load-firmware.sh ./build/hazard3-boot-monitor.elf
Avant de tester l’interface graphique, confirmez le chemin SAO normal :
sao info
sao scan
i2c gui
Une séquence de validation utile dans l’interface est :
S
P 54 Enter
4
S
1
Q
Remplacez 54 par un périphérique connu sur le bus SAO connecté.
Si i2c gui est signalé comme commande inconnue, la carte exécute un ancien
moniteur résident même si un ELF plus récent existe sur disque. Reconstruisez et
chargez build/hazard3-boot-monitor.elf avant de dépanner l’interface elle-même.
Relation avec I2CDriver amont
Cette fonctionnalité porte le modèle d’interaction utile plutôt que de traduire chaque fonction matérielle spécifique de la carte originale. La version Hazard3-Doom couvre actuellement l’analyse maître active, la sonde, les lectures et écritures de registre d’un octet, la chaleur d’activité, l’historique des transactions, les traces logiques, la récupération du bus et la sélection 100/400 kHz.
Les mesures analogiques propres à la carte I2CDriver originale, le matériel de résistances pull-up commutables, le protocole binaire hôte et la véritable capture passive ne sont pas fournis implicitement par cette interface C.
I2CDriver est distribué sous licence BSD 3-Clause. Conservez les éléments d’attribution/licence tiers du projet lors de la copie ou de la redistribution de code qui en dérive.