Je n'aime pas le HDMI. Bien qu’il s’agisse d’une interface assez populaire, je trouve que des éléments cruciaux de celle-ci sont étrangers à ce que représentent les pirates informatiques. D'après moi, il parvient à être propriétaire tout en intégrant une grande partie de l'ancien. Il n'a pas d'alternative native comme DisplayPort, donc les implémentations portables ont tendance à souffrir en termes de puissance ; la situation des connecteurs est intéressante et la Fondation HDMI a fait des choses étranges ; en particulier, ils sont plutôt hostiles à la technologie open source.
Cet article n'est cependant pas le lieu pour de tels sentiments, d'autant plus que je les ai suffisamment exprimés dans l'article DisplayPort. Nous, les hackers, méritons de pouvoir gérer les interfaces sur lesquelles nous tombons, et je crois fermement en cela plus qu'en mon droit à l'animosité envers le HDMI.
L'interface HDMI est très importante partout où vous regardez, en partie parce que c'est l'interface créée par les entreprises impliquées dans le multimédia pour les entreprises impliquées dans le multimédia. Au fil des années, nous l'avons eu, cela a été plus que suffisant pour pratiquement tout ce que nous faisons en matière de vidéo, à l'exception des résolutions les plus élevées.
Il est également relativement simple à câbler, à pirater et même à bitbang. Passons en revue ce qui le motive.
Le noyau
HDMI est, à la base, trois paires différentielles pour les données, plus une paire pour les synchroniser et les lier dans l'obscurité. C'est une interface numérique, même si elle est amusante. Cela le rend bien plus adapté aux transmissions vidéo à plus grande distance que les interfaces comme VGA, et tant que vous vous en tenez à des résolutions relativement basses, HDMI n'aura pas autant de demandes en termes de disposition de PCB que DisplayPort, grâce aux vitesses de liaison HDMI. mise à l'échelle proportionnellement à la résolution d'affichage.
En ce qui concerne les composants internes, le HDMI n'est pas si loin du VGA ou du LVDS, alias FPD-Link – c'est toujours un flux constant de couleurs, respectant VSYNC et HSYNC. Cependant, contrairement au LVDS, les bits ne sont pas transmis directement : chaque couleur de 8 bits est transformée en un paquet de 10 bits. Ce schéma a été hérité du DVI et le HDMI s'en est principalement inspiré, bien que les choses deviennent plus compliquées avec les dernières générations HDMI.
Vous verrez les trois paires différentielles appelées D0/D1/D2, mais elles correspondent en pratique à peu près aux flux de données de couleur bleue, verte et rouge. Cela dit, vous ne pouvez pas simplement les déconnecter tous et reproduire l'effet de couleur manquant du câble VGA – il se passe bien plus encore. HSYNC et VSYNC apportent un peu d'espace vide, des intervalles où aucune donnée de pixel n'est transmise, et HDMI met des éléments plus utiles dans ces intervalles – comme l'audio, ce que DVI ne pouvait pas faire, ainsi que certains messages de contrôle, comme ceux signalant HSYNC et VSYNC.
HDMI est raisonnablement simple. Si vous souhaitez déterminer la fréquence d'horloge d'une liaison HDMI, calculez l'horloge des pixels pour votre résolution (comme mentionné dans l'article RVB parallèle), puis multipliez-la par 10, en raison de l'emballage et de l'encodage à effectuer ; c'est ainsi que le signal HDMI sur un Raspberry Pi parvient à brouiller le WiFi à une résolution très spécifique. Cette simplicité facilite grandement la mise en œuvre dans votre propre projet, que vous utilisiez un FPGA ou un Pi Pico.
Canaux latéraux
Il y a quelques broches supplémentaires que vous verrez dans le brochage d’un connecteur HDMI. C'est bien plus amusant que vous ne le pensez, et je ne parle même pas de l'I2C comme certains pourraient le deviner. Pour commencer, il y a le plus simple : il s'appelle HPD et il s'agit simplement d'une détection de connexion à chaud. La tradition veut qu'un écran HDMI doit tirer le HPD jusqu'à 5 V avec une résistance de 10k ; J'ai réussi à y introduire simplement du 5 V, mais il est sans aucun doute préférable de s'en tenir aux spécifications.
Ensuite, oui, il y a I2C, SDA et SCL que nous connaissons et aimons tous. Leur niveau est passé à 5 V, mais avec seulement deux FET et quatre résistances, vous pouvez le traiter comme une interface I2C à toutes fins utiles. Sur les ordinateurs Intel et AMD, vous pouvez exploiter très facilement cette interface I2C sous Linux, même si votre GPU (externe ou interne) est assez moderne, et effectuer des tâches allant du piratage matériel à la conduite d'un petit écran OLED I2C 128 × 64 séparé. Les pilotes propriétaires Nvidia sont interdits car ils n'exposent pas l'interface, et il en va de même pour Windows, à moins que vous n'acceptiez de payer un peu pour une suite logicielle de quelqu'un qui a procédé à l'ingénierie inverse des interfaces internes.
I2C vous donne accès à EDID, un blob de données de configuration d'affichage standardisé par VESA et assez piratable, ainsi qu'à DDC – une interface exposée à I2C qui vous permet de contrôler votre moniteur par programme. Oui, si vous utilisez Linux, il existe de nombreux utilitaires qui vous permettent d'allumer ou d'éteindre votre moniteur, de changer d'entrée, de contrôler la luminosité et le contraste, ainsi qu'une tonne d'autres fonctionnalités que vous trouverez habituellement sur l'écran de votre écran. menu si souvent difficile à naviguer.
Ensuite, il y a la fonctionnalité moins connue mais plutôt amusante appelée CEC (Consumer Electronics Control). Il s'agit d'un bus de données multipoint à une broche pour contrôler le câble HDMI, vous permettant de faire des choses comme régler les curseurs de volume sur votre récepteur équipé HDMI, changer de chaîne ou bien plus encore. L'interface et le protocole sont standardisés, mais une tonne de commandes spécifiques à l'appareil ne le sont pas ; cela dit, c'est un trésor de rétro-ingénierie.
Une autre broche amusante est la broche 14, connue sous le nom de HEAC. Vous avez peut-être entendu parler d'Ethernet sur HDMI et de HDMI ARC (Audio Return Channel), et cette broche est utilisée pour les deux, avec la broche HPD qui a une double fonction. Enfin et surtout, vous obtenez une broche qui transporte 5 V, soi-disant à 50 mA. La limite de 50 mA n'est pas toujours respectée, comme vous pouvez le deviner, mais elle est néanmoins suffisante pour alimenter pas mal de choses.
Piratage à gogo
HDMI est assez simple et très abondant, vous pouvez donc faire plus qu'assez de choses amusantes avec. Pour commencer, les projets qui produisent du HDMI ou qui vous aident à produire du HDMI ne manquent pas. Des cœurs IP FPGA open source à l'astuce Pi Pico PIO qui pousse désormais 1080p, des ASIC amusants qui nous aident à piloter des écrans DSI aux convertisseurs HDMI vers LVDS locaux, pris en charge par FPGA ou non.
La chaîne I2C et la CEC obtiennent de temps en temps leurs minutes de gloire. Il peut arriver qu'un circuit intégré d'un produit expose un chargeur de démarrage sur le canal I2C, comme l'a fait Amazon Fire TV Stick. Si vous êtes prêt à parcourir le labyrinthe qu'est DDC (ou à réutiliser l'une des bibliothèques existantes), vous pouvez créer un clavier matériel pour contrôler les configurations de votre moniteur. Et, comme un Raspberry Pi a le support CEC exposé à nous, simples mortels, un Pi connecté à votre téléviseur peut vous aider à contrôler tout ce qui y est connecté, comme nous l'avons vu. [Victor] faites – vous pouvez également implémenter CEC sur un ATTiny ou sur un PIC pour tous vos besoins en matière de mod de divertissement à domicile !
L'abondance du matériel HDMI s'applique également aux cartes de capture, ce qui est merveilleux car elles constituent un outil utile pour les pirates informatiques – nous en avons même vu des open source, à seulement 10 $, et vous pouvez également construire un KVM à moindre coût. Si les câbles HDMI ne sont pas assez longs pour vous, il existe de nombreuses solutions HDMI vers IP, et nous voyons des pirates informatiques jouer avec de temps en temps.
Il existe également la partie HDMI connue sous le nom de HDCP, une norme de cryptage vidéo qui, en pratique, signifie que votre écran sera noir si votre matériel n'est pas compatible HDCP. Le facteur d’irritation en fait bien sûr un bastion intéressant pour les pirates informatiques. Cela dit, vous n'avez pas besoin d'un FPGA : si vous souhaitez simplement que votre matériel fonctionne ensemble sans problèmes de compatibilité, il existe des répartiteurs HDMI que vous pouvez vous procurer sur les marchés de l'Est, qui suppriment le HDCP sur leur entrée et oublient facilement de le réappliquer sur l'un ou les deux. de leurs sorties. Et si votre séparateur est plus consciencieux que cela, vous pouvez toujours le forcer à faire un faux pas.
Apprendre encore plus…
Si vous souhaitez pirater le HDMI ou en savoir plus sur ce qui le motive, il existe une bonne quantité de ressources que nous avons couvertes et même écrites nous-mêmes, et encore plus de ressources sur le Web au sens large. Les connecteurs et câbles HDMI sont disponibles partout où vous regardez, et si vous recevez des demandes de NDA ou des conditions d'adhésion lors de l'achat de vos puces équipées de HDMI en Occident, vous pouvez toujours vous tourner vers les marchés de l'Est.
Le HDMI n’est pas sur le point de quitter nos foyers, et tant qu’il est là, vous méritez de savoir comment le pirater. Ce n'est pas la seule interface qui soit étonnamment importante – en fait, la prochaine fois, nous devrions jeter un œil à l'interface DSI, étonnamment propriétaire mais dans la poche de tout le monde, et un trésor qui attend d'être exploré.