DisplayPort : Apprivoiser l’Altmode | Hackaday

L’altmode DisplayPort est semi-propriétaire, mais il peut absolument être séparé si nous essayons. La dernière fois, nous avons trouvé une note d’application intéressante décrivant en détail le mode alternatif DisplayPort, basculé le FUSB302 en mode reniflage de paquets et obtenu des captures de paquets, découvert les PD VDM (messages définis par le fournisseur) et rejoué avec succès les messages capturés pour basculer un USB-C port dans le mode alternatif DisplayPort. Aujourd’hui, nous allons passer en revue les sept messages qui appellent l’altmode DisplayPort, les implémenter et les lier tous dans une bibliothèque, puis déterminer le matériel dont nous avons besoin pour que DisplayPort fonctionne dans la nature.

Pour commencer, comme vous l’avez peut-être vu sur le diagramme, une seule commande peut être soit une requête, soit une réponse. Par exemple, si vous obtenez un Discover Identity REQ (demande), vous y répondez par un Discover Identity ACK (réponse), en ajoutant vos données d’identité à votre réponse en cours de route. Avec certaines commandes, la source DP ajoutera des données que vous pourrez utiliser ; pour la plupart des commandes, votre récepteur DP devra fournir des informations à la place – et nous le ferons, armés du PDF fourni et des captures de paquets.

Nous avons sept commandes que nous devons gérer pour sortir DisplayPort d’un port USB-C compatible – si vous avez besoin d’un rappel sur ces commandes, la page 13 du PDF du ST sur le DP altmode vous montrera la séquence de messages. Ces commandes sont : Discover Identity, Discover SVIDs, Discover Modes, Enter Mode, DP Status Update, DP Configureet Attention. Parmi ceux-ci, les quatre premiers sont déjà partiellement décrits dans la norme USB PD de base, les deux commandes DP suivantes sont spécifiques à DisplayPort-altmode mais suffisamment décrites dans le PDF que nous avons, et le Attention La commande provient également de la norme de base, principalement utile pour signaler l’état de la broche HPD. Commençons par les deux premiers !

Le processus de découverte

Les deux premières commandes ne sont pas du tout spécifiques à DisplayPort. En particulier, le Discover Identity le message est omniprésent. Tout comme avec le Source_Capabilities message que nous n’avons même pas eu à demander au PSU, si vous vous branchez sur un port USB-C d’un ordinateur portable compatible DP ou même Thunderbolt, vous recevrez un Discover Identity message de commande. Si votre appareil est capable de gérer n’importe quel mode alternatif, répondre à ce message est la façon dont vous annoncez cette capacité.

Ton Discover Identity La réponse devra contenir un tas de données sur votre appareil – la plupart de ces données, vous pouvez carrément les falsifier. Ces données indiquent que vous êtes un adaptateur en mode alternatif, il y a deux bits indiquant si vous êtes capable d’utiliser un hôte USB ou un périphérique USB, un champ « certification » qui peut être laissé complètement vide, ainsi que VID et PID USB. À ma connaissance, le VID et le PID ne sont utilisés pour rien du point de vue des fonctionnalités, contrairement aux PID et VID de connexion USB classiques, que nous savons être utilisés pour la sélection des pilotes dans les systèmes d’exploitation. L’adaptateur que j’ai a un ID de fournisseur 0xBDAidentifiant du produit 0x2172 et numéro bcdDevice 0x201. Ces valeurs sont envoyées une seule fois et n’apparaissent plus dans aucune autre communication USB-C.

La deuxième commande est Discover SVIDs – Les SVID sont essentiellement des codes à deux octets pour les modes alternatifs pris en charge par votre appareil. Si votre réponse est 0xFF01 (donc, répondez par 0xFF010000 en tant que données supplémentaires), vous obtenez un cookie, sous la forme d’une reconnaissance en tant qu’appareil compatible DisplayPort altmode. L’un des appareils que je possède répond par 0xFF01mais ajoute également 0x25A4 à cela – je soupçonne qu’il s’agit d’une interface de mise à jour du micrologiciel, donc si jamais vous vouliez sonder des périphériques USB-C à des fins de test de pente, ce serait absolument un vecteur à examiner.

DisplayPort trouvé – Quelle est la prochaine étape ?

En donnant le 0xFF01 répondre à la Discover SVIDs demande, nous affirmons que notre appareil prend en charge le mode alternatif DisplayPort – même si, à vrai dire, nous sommes à mi-chemin de sa mise en œuvre correcte, en le simulant jusqu’à ce que nous le fassions. Ne vous inquiétez pas, car nous sommes sur la bonne voie – nous parlons maintenant des spécificités de DisplayPort. Notre troisième commande est Discover Modesoù nous informons la source DP de la correspondance exacte de nos besoins DisplayPort avec le connecteur USB-C.

Rappelez-vous comment vous pouvez obtenir 4 voies complètes de DP à partir d’un connecteur USB-C, ou faire un compromis à 2 voies mais obtenir USB3 ? Eh bien, notre Discover Modes réponse détermine exactement cela. Tout d’abord, notre réponse définit si nous sommes une source DP ou un puits DP – apparemment, le protocole permet de construire des dispositifs DP bidirectionnels, ce qui suscite certainement des idées ! Il définit également explicitement l’utilisation de la signalisation USB 2.0, si le port USB3 que nous pourrions demander prendrait en charge USB3 Gen 2 et si notre appareil utilise une prise USB-C ou une prise USB-C. Plus important encore, cependant, il parle du mappage des broches.

L’altmode DisplayPort peut avoir six mappages de broches, cinq dans le cas d’une prise USB-C. Deux d’entre eux sont des DP à double voie avec USB3 et trois d’entre eux sont des DP à quatre voies. Tous ont apparemment des arrangements de voies différents, mais au moins l’un d’entre eux devrait fonctionner pour nous tant que nous câblerons notre puce mux conformément à la fiche technique. Je ne vois pas clairement quelles sont les différences notables ou pourquoi les affectations sont effectuées de la manière dont elles sont effectuées – peut-être que la spécification complète non disponible aurait quelques idées. Pour l’instant, ce PDF nous donne les mappages que nous pouvons utiliser et les bits que nous devons définir en fonction du mappage que nous avons choisi.

Après avoir répondu au Discover Modes message avec des informations sur notre brochage préféré, nous recevrons sous peu un Enter Mode message – que nous reconnaissons simplement avec un Enter Mode réponse, aucune donnée supplémentaire n’est requise. Maintenant, d’une voix hacker, étaient en.

Le dernier trio

Les trois dernières commandes sont encore plus proches du vrai DisplayPort. Le premier est DP Status Updatesuivant juste après le Enter Mode commande. Nous pouvons obtenir cette commande chaque fois que le récepteur DP souhaite obtenir une mise à jour, et nous devrons y répondre avec notre état de liaison actuel. Les bits de cette commande, comme décrit à la page 11 de notre PDF désormais préféré, communiquent l’état actuel du lien DP altmode. DP Status Update Le contenu est un rapport sur l’état global de la connexion, à la fois du point de vue en aval (source DP) et du point de vue en amont (puits DP, alias notre appareil). Ici, nous pouvons quitter le mode alternatif si vous le souhaitez, passer en mode USB ou peut-être en mode basse consommation, et nous devons également signaler ici l’état de la broche HPD. Tout cela tient dans neuf bits de données – pas grand-chose à raconter, mais écrivez à la maison, vous le devez.

La toute première occurrence de DP Status Update est sans incident, nous l’aimons juste, en disant que HPD est bas et tout ça. Elle sera suivie de la DP Configure message – maintenant, ce point est l’endroit où nous avons accès au signal DisplayPort brut sur le SBU et aux broches haute vitesse du port USB-C. Le DP Configure Le message nous indique sur quel mappage de broches DP altmode nous devrions basculer notre matériel, ce qui est utile au cas où nous prétendrions prendre en charge plusieurs mappages dans notre Discover Modes réponse – si nous prétendons n’en prendre en charge qu’un seul, il n’y aura pas de surprises, à moins que la source DP ne prenne pas en charge le mappage que nous voulions.

Enfin et surtout, il y a le Attention message – littéralement, attirer l’attention sur un événement de notre côté. Les données correspondantes sont les mêmes que celles du DP Status Update message – pensez à Attention comme un DP Status Update message que nous pouvons envoyer volontairement chaque fois que quelque chose change de notre côté. Ainsi, si vous avez un adaptateur de prise USB-C vers DisplayPort, le Attention message sera le tout dernier message du processus d’appel DP altmode, permettant à la source DP de savoir que la source a été connectée. Ceci, en particulier, est déterminé par la broche HPD, quelque chose qui est utilisé comme broche de détection de branchement à chaud dans DisplayPort, mais est également utilisé pour les interruptions en tant que bande latérale vers le canal de communication AUX – en tant que diffpair pseudodifférentiel semblable à USB 1.1 et 2.0, l’appareil à l’autre bout s’attend à être interrogé, et notre Attention transmettra les cris HPD de l’appareil qui a quelque chose à dire mais qui n’a pas encore été invité à parler.

Maintenant, nous avons terminé – ce sont les sept messages décrits et implémentés dans le code comme nous l’avons fait. L’ensemble du flux de négociation altmode doit être terminé en une seconde, sinon le processus s’arrêtera à une étape. Autrement dit, si vous souhaitez effectuer des calculs ou imprimer des données, vous feriez mieux d’être rapide ! Voici un exemple de code MicroPython pour vous – d’une manière ou d’une autre, j’ai réussi à faire en sorte que l’analyse et la création de commandes soient assez rapides.

Attention, c’est le côté logiciel. En dehors de ce que nous venons de faire, passons en revue une conception altmode DP maison typique et ce dont elle a besoin.

Bases du matériel

Tout d’abord, vous voudrez mettre le FUSB302 sur votre schéma et ajouter un MCU pour travailler avec cela. Je choisis généralement un RP2040, mais même un module ESP12 devrait faire l’affaire – vous avez besoin d’I2C, de quelques GPIO pour le contrôle du multiplexeur et d’un peu de RAM pour la manipulation de paquets PD. Ensuite, bien sûr, utilisez une prise USB-C avec des voies à grande vitesse disponibles – les ports USB 2.0 réguliers uniquement avec 16 broches n’exposent pas les broches TX/RX dont nous avons besoin. En ce qui concerne les diffpairs DisplayPort, choisissez une carte à six couches – vous aurez besoin de deux couches externes pour les diffpairs DisplayPort, deux couches sous chacune pour les plans de masse de référence et deux couches les plus internes pour acheminer les broches VBUS, USB2, CC et SBU – Heureusement, Aisler et JLCPCB proposent maintenant des offres à six couches décentes et bon marché !

Malheureusement, nous ne pouvons pas tout à fait acheter des câbles captifs USB-C à bas prix – cependant, mettre une prise USB-C sur notre carte est la meilleure chose à faire ! Vous avez cependant besoin d’un peu de matériel supplémentaire. Encore une fois, l’avantage d’un câble captif est de ne pas avoir besoin d’un multiplexeur – ce qui signifie que nous aurons besoin d’un multiplexeur pour gérer notre prise. Lorsque je cherchais des multiplexeurs USB-C, je suis tombé sur la puce VL170 et j’ai reconstitué ses spécifications à partir de captures d’écran en ligne. Plus tard, j’ai découvert que le VL170 est un clone du HD3SS460 de TI (fiche technique), et c’est ce que je vous recommande d’utiliser – que vous souhaitiez faire du DisplayPort à 4 voies, ou une combinaison USB3 et DisplayPort, juste USB3, ou même combiner DisplayPort à partir de deux sources, le mux HD3SS460 fonctionnera pour vous, et il a une fiche technique appropriée avec des exemples de circuits.

Ne mettez pas le blindage à la terre – il est généralement mis à la terre du côté de l’hôte, il deviendra donc contre-productif compte tenu des vitesses élevées de DisplayPort. Au lieu de cela, ajoutez une ou deux empreintes 0805 allant du bouclier au sol ; plus tard, vous pouvez y mettre une ferrite, ou une combinaison de résistance et de condensateur. En ce qui concerne les signaux à grande vitesse, le bouclier remplira la fonction de protéger vos signaux contre les interférences externes ; cependant, si vous le mettez à la terre aux deux extrémités, il finira également par transporter une partie du courant VBUS, ce qui réduira considérablement ses propriétés de blindage. Oh, et à propos de VBUS – c’est à vous de décider ce que vous en ferez, après tout, la partie « contrôleur PD » sera entièrement à votre portée pour commencer ; si vous invoquez 5 V, fournissez 5 V, peut-être demandez 20 V si vous avez trouvé un port haute puissance et compatible DP d’une manière ou d’une autre, tout cela dépend entièrement de vous.

Acheminez vos pistes et vous avez terminé

Vous souvenez-vous des règles de routage de la trace DisplayPort ? Eh bien, le VL170 ne vous facilite pas la tâche. En raison de la polarité de la paire côté connecteur USB-C sur son brochage, seules deux de ses paires de diff se connectent de manière simple – les deux autres paires doivent être inversées avant de se connecter. N’oubliez pas que vous devez toujours faire correspondre les longueurs entre les pistes, vous devrez donc ajuster la partie entre le mux et le connecteur USB-C, ainsi que la partie entre votre appareil et votre mux. Cela dit, dans une de mes conceptions de référence, j’ai réussi à maintenir la section connecteur-mux à environ un centimètre de longueur, donc cela ne devrait pas être trop lourd pour vous. En ce qui concerne le côté après-mux, vous achemineriez le lien DisplayPort de la même manière que vous le feriez normalement, pas beaucoup de différence ici.

Y a-t-il d’autres aspects dont vous pourriez avoir besoin ? Absolument! Par exemple, vous devrez peut-être régler les tensions de mode commun avant et après le multiplexeur à l’aide de quelques résistances soigneusement adaptées. Pourtant, si vous avez toujours voulu donner à votre appareil une liaison DisplayPort à partir d’un connecteur USB-C, vous êtes maintenant bien équipé pour le faire, aucun NDA ou acquisition de document propriétaire n’est nécessaire.

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.