Écrans que nous aimons pirater : RVB parallèle

Vous avez peut-être vu d’anciens panneaux d’affichage, de 3″ à 10″, avec des connecteurs FFC à 40 broches où chaque broche semble être utilisée pour un signal de données. Nous appelons ces écrans RVB parallèle, ou TTL RVB, ou DPI, et vous pouvez les trouver dans les projets MCU, Raspberry Pi et autres projets Linux SBC de plus grande puissance. Vous méritez de savoir quoi en faire – jetons un coup d’œil.

L’idée est simple : cette interface vous oblige à envoyer constamment un flux de pixels à l’écran, et vous devez envoyer ces pixels via un bus parallèle. Vous pouvez envoyer jusqu’à 8 bits par canal de couleur et par pixel, ce qui fait 24 bits, et le mode 24 bits est en effet la norme, mais en pratique, de nombreuses implémentations RVB parallèles ne se soucient pas de plus de 5 à 6 bits de couleur – deux types courants de liens RVB parallèles sont RGB565 et RGB666. L’interface RVB parallèle est une approche très simple pour envoyer des pixels à votre écran, et dans de nombreux cas, vous pouvez également convertir relativement facilement des interfaces RVB parallèles en interfaces LVDS ou VGA !

Si vous êtes nouveau dans ce domaine, le moyen le plus simple de piloter un écran RVB parallèle consiste à utiliser un Raspberry Pi, où l’interface RVB parallèle est connue sous le nom de DPI. C’est ainsi que fonctionnent les Pi HAT à écran 800 x 480 comme le Pimoroni HyperPixel : ils utilisent presque tous les GPIO de votre Pi, mais vous obtenez un écran raisonnablement haute résolution avec une faible empreinte énergétique, et vous n’avez besoin d’aucun intermédiaire. Les circuits intégrés non plus. Les FPGA et certains MCU de qualité supérieure ont également souvent une capacité de sortie RVB parallèle, et quelqu’un pourrait sûrement même utiliser le RP2040 PIO !

Au cours de la dernière décennie, le RVB parallèle a été de moins en moins utilisé, mais vous en rencontrerez toujours – peut-être que vous travaillez avec une vieille console de jeu comme la PSP et que vous aimeriez y mettre du cran, peut-être que vous jouez avec un affichage savoureux qui utilise le RVB parallèle, ou peut-être aimeriez-vous convertir le RVB parallèle en autre chose tout en le traitant avec respect ! Passons en revue ce qui fait fonctionner le RVB parallèle, les outils dont vous disposez pour travailler avec, ainsi que quelques trucs et astuces.

Le timing fait tout

Ainsi, vous disposez de trois couleurs primaires et de cinq à huit bits par couleur, nécessitant de 15 à 24 lignes parallèles – vous poussez les valeurs de bits de pixel à travers ces lignes, un pixel à la fois. Il existe également un signal d’horloge qui permet à l’écran de savoir quand il doit capturer l’état de ses entrées parallèles. Ce signal est appelé horloge de pixel, où chaque front montant d’horloge indique un nouveau pixel. La fréquence d’horloge est donc plus ou moins égale à la largeur des pixels de l’écran multipliée par la hauteur des pixels multipliée par le taux de rafraîchissement – ​​disons, pour 1 280 x 800 à un taux de rafraîchissement de 60 Hz, vous vous attendez à environ 62 MHz. Il y a également deux autres broches que vous devez remuer périodiquement – ​​HSYNC et VSYNC, qui signalent respectivement une ligne complète et un écran complet de pixels. Vous voulez en savoir plus ? Voici quelques supports de cours du MIT !

(schéma non représentatif à 100 % des signaux du monde réel)

Voici une liste de fréquences courantes par résolution et par taux de rafraîchissement ; sous Linux, vous pouvez saisir cvt 1600 768 60 dans le terminal pour calculer la fréquence des pixels pour une résolution personnalisée. Vous pouvez remarquer que pour 1280 x 800, la fréquence d’horloge des pixels proposée est de 83,50 MHz, ce qui est plus élevé que ce à quoi on pourrait s’attendre d’un simple calcul, et il y a un tas de nombres supplémentaires dans le champ. cvt sortie – c’est parce qu’il y a une mise en garde. Vous devez attendre un certain nombre d’impulsions d’horloge avant et après chaque HSYNC et VSYNC, donc avant et après chaque ligne, et avant et après chaque écran de données. De plus, même si VSYNC ou HSYNC sont activés, vous êtes également censé attendre un certain nombre d’impulsions d’horloge – bien sûr, l’horloge est censée continuer à trembler à tout moment !

Les périodes d’inactivité spécifiques avant et après l’impulsion de synchronisation sont respectivement appelées porche arrière et porche avant. Ainsi, chaque affichage comporte six périodes sans données avec certaines durées : pour les signaux de synchronisation verticale et horizontale, il y a le porche arrière, l’impulsion de synchronisation elle-même et le porche avant. La plupart du temps, vous pouvez vous contenter des durées les plus standard utilisées pour la plupart des moniteurs, ou obtenir les chiffres à partir d’une calculatrice comme cvt si votre résolution ou votre taux de rafraîchissement sont un peu non standard. Si vous travaillez avec un moniteur doté d’une EEPROM I2C qui stocke l’EDID, vous pouvez également obtenir ces données à partir de l’EDID. Vous souhaitez en savoir plus sur ces périodes ? Voici une magnifique page de blog, et il y en a bien d’autres aussi !

Certains écrans veulent des périodes très particulières, comme cet écran vendu par Sipeed, où ils vous donnent la fiche technique afin que vous puissiez obtenir les paramètres exacts avec lesquels l’écran est à l’aise – les durées du porche arrière qu’ils recommandent sont un nombre exact, et je ne le fais pas. Je ne sais pas si l’écran en prendrait en charge un autre dans la réalité, il est donc toujours bon de connaître celui recommandé avec certitude. Si vous procédez à la rétro-ingénierie d’un écran existant et que l’appareil est capable de le piloter, c’est le genre de chose que vous pouvez comprendre dans le système avec un oscilloscope. En dehors de ces données, vous aurez besoin du brochage – et, malheureusement, nous n’avons pas toujours le luxe de vérifier la fiche technique de celui-ci.

Adafruit DPI Display Kippah, un blindage RVB parallèle Raspberry Pi utilisant un brochage commun à 40 broches

Bien sûr, il existe des brochages standardisés pour les écrans RVB parallèles ! Je n’ai pas de résumé à portée de main pour vous, mais quelqu’un pourrait certainement compiler un tableau avec quelques brochages et dire « ce sont les brochages que vous êtes susceptible de rencontrer à 99 % ». Néanmoins, vous trouverez de nombreux brochages qui correspondent d’un écran à l’autre, en voici un que vous rencontrerez probablement sur les écrans FPC à 40 broches, et je vous encourage à vérifier des endroits comme Adafruit et Aliexpress pour voir quels brochages ils ont. et des éruptions cutanées pour. Adafruit en particulier a développé une grande quantité de technologies d’affichage RVB parallèle, donc étudier leurs offres vous aidera beaucoup en ce qui concerne les subtilités de l’affichage RVB parallèle. Si vous procédez à la rétro-ingénierie d’un écran à partir d’un système fonctionnel connu, vous pouvez toujours essayer de lui faire afficher une image, puis utiliser un oscilloscope de table pour trouver les signaux d’horloge pixel/VSYNC/HSYNC, et jouer avec les broches individuelles pour voyez quelles broches correspondent pour MSB et LSB de quelle couleur.

Un banc d’essai parfumé à la framboise

Vous avez les paramètres de synchronisation, vous avez le brochage – parlons pratique. Il existe tout un tas de choses auxquelles vous pouvez connecter un écran LCD RVB parallèle : des MCU avec des interfaces RVB parallèles, des FPGA et de nombreux SBC. Je dirais que le moyen le plus simple pour un nouveau venu moyen de piloter des écrans RVB parallèles est une simple carte Raspberry Pi avec un en-tête GPIO à 40 broches ! Je parle d’un Raspberry Pi exécutant Linux, et je ne parle pas d’un Pi Pico exécutant Linux via l’émulation RISC-V – même si, sans l’ombre d’un doute, certains d’entre vous pourraient également faire en sorte que cela fonctionne.

Deux douzaines de broches, toutes avec des résistances en série ? C’est bien un affichage RVB parallèle !

Sur un Pi, un écran RVB parallèle peut être connecté via l’interface DPI, ce qui occupera tout un tas de GPIO, mais vous pouvez diminuer la quantité de GPIO en exécutant l’écran LCD en 565 (16 bits) ou 666 (18 bits). ) mode et en libérer quelques-uns ; cela limitera votre gamme de couleurs, mais vous pourriez valoriser davantage les GPIO supplémentaires. Les modes à bits inférieurs ne sont pas non plus une mauvaise idée – une écrasante majorité des anciens écrans d’ordinateurs portables ont historiquement été pilotés en mode 565 et cela n’a pas posé vraiment de problème, du moins, étant donné que ces écrans n’étaient pas non plus d’une qualité exceptionnelle. . Lors du câblage de l’écran pour des modes inférieurs à 24 bits, vous souhaiterez mettre à la terre les broches pour les bits les moins significatifs que vous n’utilisez pas, par exemple, mettre à la terre D0-D1 en mode 666.

Maintenant, le logiciel ! Sur le Pi, l’interface parallèle RVB alias DPI a pas mal de documentation et d’histoires de réussite, contrairement à l’interface DSI, qui est propriétaire et utilise ce connecteur FFC près de l’emplacement pour carte SD. Il peut être facile de les confondre, alors voici un mnémonique simple : DPI est P.plutôt convivial pour les hackers, et DSI l’est, Sadly, défini par l’Alliance MIPI.

Si vous connaissez les paramètres d’affichage, il suffira peut-être de les saisir config.txt et c’est parti – il y a suffisamment de documentation sur les paramètres requis, donc, même si le fonctionnement de bas niveau du périphérique DPI n’est pas exposé, vous ferez des merveilles avec la sortie de cvt seul si vous vous en tenez à l’un des brochages requis. Une petite chose étrange est le paramètre de rapport hauteur/largeur. Si vous êtes confronté à un écran avec une résolution et un rapport hauteur/largeur farfelus, comme l’écran Sony Vaio 1600 × 768 sur lequel je suis sur le point de parler, cela pourrait être un casse-tête. Cependant, cela ne semble pas être un gros problème : voici quelqu’un qui fait fonctionner un écran 720×720, et il a simplement utilisé un paramètre de rapport d’aspect suffisamment proche.

Après avoir entré vos paramètres, votre affichage devrait fonctionner correctement. Si ce n’est pas le cas et que vos paramètres sont suffisamment proches, voyons s’il y a d’autres exigences de câblage que vous auriez pu manquer.

La touche finale

Certains écrans s’attendent à ce que vous pilotiez vous-même leurs LED de rétroéclairage – alors que parfois cela peut être aussi simple que quelques LED séparées, le plus souvent il s’agit d’une chaîne de LED qui nécessite plus de 12 V à un certain courant (faible) pour la piloter. Il existe suffisamment de circuits de commande de rétroéclairage et de puces spéciales en ligne, dont beaucoup sont assez bon marché, et une résistance en série fera l’affaire si vous disposez d’une source de tension suffisamment élevée. Cependant, certains écrans sont très particuliers – par exemple, j’ai actuellement affaire à un écran doté de LED dans une configuration à 4 canaux de la série 8, ce qui m’oblige à ajouter un circuit pilote de rétroéclairage séparé, capable d’augmenter la puissance, sur la carte adaptateur. Cela dit, Mouser propose un excellent filtrage de recherche pour ces pilotes, et LCSC propose un bon nombre d’options si vous souhaitez parcourir les résultats de recherche, vous ne devriez donc pas avoir de problèmes. D’autres écrans peuvent avoir un pilote de rétroéclairage sur le panneau et n’attendront de votre part qu’un signal PWM numérique pour le contrôle de la luminosité.

Certains écrans seront même livrés avec un écran tactile doté de son propre FFC, et certains vous fourniront des signaux IC de contrôleur d’écran tactile (généralement I2C) sur le même FFC qui transporte les broches de données. Attention – si vous n’obtenez que des signaux bruts du panneau captouch, comme sur ce projet de reconstruction de l’iPad CM4, vous devrez apporter votre propre contrôleur ! Non pas que ce soit impossible – les journaux de travail ultérieurs de ce projet contiennent d’excellents indicateurs. Certains écrans auront besoin de hautes tensions pour les composants internes du TFT – d’autres n’auront besoin que de 3,3 V ou 5 V, produisant eux-mêmes des hautes tensions avec un circuit booster, et certains auront le circuit mais s’attendront à ce que vous connectiez un ou deux condensateurs. au FFC pour que le circuit booster puisse fonctionner. Une fiche technique aide avec tout cela, et un site Web comme Panelook pourrait simplement vous aider avec les panneaux les plus obscurs, surtout si vous avez une adresse e-mail sur un nom de domaine personnalisé. Dans une actualité totalement indépendante, partager, c’est prendre soin !

Cependant, il est très probable que vous obtiendrez l’une des empreintes à 40 broches assez standard, et il y a de fortes chances que vous puissiez utiliser une carte Aliexpress avec. Et si vous deviez concevoir votre propre planche ? Pour une utilisation avec Raspberry Pi, c’est aussi simple que de tirer les fils de l’en-tête GPIO sur l’en-tête FFC, de gérer le rétroéclairage et toutes les autres exigences, ainsi que les options si vous le souhaitez. Théoriquement, vous voudriez faire correspondre la longueur des signaux parallèles, c’est-à-dire que toutes les pistes RVB, horloge et synchronisation aient la même longueur en utilisant des vibrations, mais les réponses sur cette page Stackoverflow indiquent sans équivoque que vous n’en avez pas vraiment besoin. pour faire ça. Ce n’est pas comme si cela ferait mal, mais ne vous sentez pas coupable non plus d’avoir omis la correspondance de longueur à ces fréquences. Une meilleure idée est d’avoir des résistances en série à l’extrémité de réception, entre 10 et 100 ohms – celles-ci devraient aider à atténuer les réflexions qui se produiront inévitablement aux vitesses de commutation DPI.

Toutefois, si gérer 20 à 30 pistes à la fois est trop pour vous, vous avez de la chance : le prochain article parlera de LVDS et d’eDP, qui résument tous les signaux RVB parallèles en quelques paires de différences. tout en obtenant un bien meilleur débit ! LVDS en particulier est une interface où connaître l’histoire du RVB parallèle s’avère payant – comme vous le verrez, il s’agit essentiellement de RVB parallèle dans un trenchcoat.

François Zipponi
Je suis François Zipponi, éditorialiste pour le site 10-raisons.fr. J'ai commencé ma carrière de journaliste en 2004, et j'ai travaillé pour plusieurs médias français, dont le Monde et Libération. En 2016, j'ai rejoint 10-raisons.fr, un site innovant proposant des articles sous la forme « 10 raisons de... ». En tant qu'éditorialiste, je me suis engagé à fournir un contenu original et pertinent, abordant des sujets variés tels que la politique, l'économie, les sciences, l'histoire, etc. Je m'efforce de toujours traiter les sujets de façon objective et impartiale. Mes articles sont régulièrement partagés sur les réseaux sociaux et j'interviens dans des conférences et des tables rondes autour des thèmes abordés sur 10-raisons.fr.