banner

Blog

May 03, 2023

Tout sur l'USB

Comme de nombreuses personnes l'ont souligné, ce qui compte avec l'USB-C, ce n'est pas seulement la norme, ce sont les implémentations. Après tout, ce sont les implémentations que nous devons réellement gérer, et c'est là que surviennent la plupart des problèmes avec USB-C. Il y a quelques défauts à la norme, comme le manque de marquage des câbles dès le départ, mais à ce stade, je suis convaincu que la norme USB-C est bien meilleure que certaines personnes ne le pensent.

J'aimerais vous présenter quelques implémentations USB-C dans des produits réels, open-source, adjacents et simplement intéressants. Ils sont tous imparfaits d'une certaine manière - il ne peut en être autrement, car ils doivent faire face au monde réel désordonné, où la perfection est une rareté.

Aujourd'hui, découvrons le Pinecil. Un fer à souder de Pine64, sorti il ​​y a quelques années, maintenant un prix bas et une qualité élevée. Il arbore à la fois une prise baril et un port USB-C pour son entrée d'alimentation - un départ bienvenu de la stratégie du fer Miniware, où ni le TS100 à prise baril uniquement ni les fers TS80 à pointe propriétaire à faible puissance ne l'ont tout à fait fait. Et, étant donné sa conception autour des pointes de style TS100 T12, il n'est pas étonnant que Pinecil ait pris une place bien méritée dans le monde des amateurs.

Maintenant, vous pensez peut-être que Pinecil devrait être un appareil simple. Le moyen habituel d'obtenir une puissance élevée d'un port USB-C est un circuit intégré de déclenchement d'alimentation (PD), et vous pouvez simplement l'utiliser. Cependant, si vous avez lu l'article sur l'alimentation USB-C, vous vous souviendrez peut-être du scénario du chargeur 45 W contre 60 W, où un tel arrangement échouerait immédiatement. Dans l'ensemble, la configurabilité des CI de déclenchement est assez faible, et lorsque vous rencontrez un problème de compatibilité PD avec certains blocs d'alimentation, vous ne pouvez rien y faire, sauf remplacer le CI par un CI à logique légèrement différente - si un remplacement existe même, et ce n'est généralement pas le cas. Ceci est coûteux et limitant pour un produit à usage réel.

Pinecil a suivi la voie "Logiciel de pile PD + IC frontal PD", consacrant une partie du MCU à la nature en temps réel des communications PD. L'interface PD utilisée est le FUSB302, connecté au MCU via l'interface I2C habituelle. Le microcontrôleur lui-même est passé du GD32VF103 dans Pinecil v1 au BL706 dans Pinecil v2 - tous deux RISC-V.

Maintenant, j'ai commencé à parler de manière abstraite ici, mais il est logique de parler du pirate qui fait le travail réel pour rendre la pile PD possible - en fait, l'ensemble de la pile logicielle Pinecil. La personne responsable du PD et de l'ensemble du logiciel Pinecil est [Ralim], connu pour son micrologiciel IronOS initialement développé pour TS100, TS80 et d'autres fers à souder équipés de MCU. Pine64 a contacté [Ralim] à l'époque où Pinecil n'était qu'un concept, lui demandant s'il serait disponible pour porter IronOS, y compris le travail de PD requis.

Au fil des ans, l'approche "frontend + MCU" a été extrêmement payante. L'une des principales raisons est la compatibilité des blocs d'alimentation - il existe une tonne de variations dans les communications d'alimentation USB-C, car les éléments PD peuvent être difficiles à mettre en œuvre, en particulier lorsqu'il s'agit de boîtiers périphériques. En effet, le micrologiciel initial des fers Pinecil ne fonctionnait pas avec un certain nombre d'alimentations, y compris, par exemple, certaines briques d'alimentation Apple.

Maintenant, la belle chose est que chaque fois que quelqu'un signalait un problème de compatibilité PSU sur GitHub, [Ralim] pouvait traquer ce problème, soit en déboguant à distance "essayez ce binaire", soit en achetant directement le même PSU. Ensuite, il résoudrait le problème en modifiant la façon dont la pile traite les cas extrêmes, testerait le correctif et téléchargerait une nouvelle version du micrologiciel Pinecil sur GitHub pour que tout le monde puisse l'utiliser. En un an, la plupart des problèmes USB-C ont disparu, et si vous avez un problème Pinecil, il est probable que vous n'ayez qu'à mettre à jour le micrologiciel à partir de l'ancienne version flashée en usine.

Au fil des ans, la pile est devenue assez mature et, surtout, testée au combat - il est difficile de trouver un bloc d'alimentation avec lequel le Pinecil ne fonctionne pas de nos jours. Pour des raisons de débogage et de commodité pour les pirates, si vous branchez un bloc d'alimentation USB-C sur votre Pinecil tout en maintenant le bouton + enfoncé, un menu de débogage PD répertoriant tous les profils s'affichera - en quelque sorte, le Pinecil est un outil de débogage PD que vous pourrait déjà posséder.

Une telle approche fonctionnerait-elle pour un projet nécessitant une alimentation USB-C amateur à petite échelle ? Pas à l'époque où le Pinecil était nouveau, peut-être. Cependant, aujourd'hui, la pile PD est open-source et mature.

L'écriture d'une pile logicielle USB-C PD n'est pas aussi simple que l'écriture, par exemple, d'un pilote ADC. Pour faire respecter les exigences de coexistence et de sécurité, USB-C utilise des machines d'état. Si quelqu'un a déjà partagé avec vous l'un de ces schémas intimidants directement à partir des pages de documentation USB-C, vous pourriez être enclin à croire qu'il est préférable que l'USB-C ne soit pas touché par les humains. Ce point de vue n'est pas entièrement faux - la réimplémentation de ces machines d'état n'est pas nécessairement quelque chose que vous voudriez passer votre temps à faire. D'autre part, malgré la nature informationnellement agressive, les machines d'état impliquées sont plus simples qu'elles ne le paraissent.

Cela dit, si vous rêvez d'un projet open source parlant USB-C, vous ne voulez pas partir de zéro, et vous n'êtes pas obligé de le faire. De nos jours, grâce au travail de [Ralim], nous avons une pile PD open source à portée de main. Il est en C++ et est conçu pour fonctionner avec un RTOS, car USB-C nécessite des réponses raisonnablement rapides à certaines parties du protocole, appliquées du côté de l'alimentation. Cette pile a été lancée par [Clara Hobbs] dans le cadre du projet PD Buddy Sink et est devenue une véritable bibliothèque que vous souhaitez utiliser si vous souhaitez également développer votre propre appareil alimenté par USB-C.

La pile est bien testée, grâce à une collection remarquable de divers blocs d'alimentation USB-C que Ralim possède et peut tester avec - c'est peut-être ce qui rend cette pile la plus précieuse. Cependant, il sert également de terrain de jeu USB-C. Lorsque les chargeurs EPR, comme celui de 140 W d'Apple, ont commencé à apparaître sur le marché, ils disposaient de 28 V - quelque chose que le Pinecil pouvait utiliser pour passer de 50 W à 98 W de puissance de chauffage de pointe. En quelques mois, la pile SPR uniquement a acquis la compatibilité EPR et nous avons vu les premiers Pinecils recevoir une alimentation 28 V des chargeurs Apple, ce qui en fait le premier projet open source capable de répondre aux exigences supplémentaires de l'EPR.

Le circuit intégré frontal PD utilisé, FUSB302, a un aspect bizarre - sa fiche technique spécifie deux tensions maximales sur sa broche VBUS, 21 V "maximum recommandé" et 28 V "maximum absolu". Maintenant, cette broche était connectée à la trace d'alimentation VBUS sur le port USB-C, c'est-à-dire à l'entrée d'alimentation. Au début, cela a causé des inquiétudes à la communauté, et bien que quelqu'un ait testé la compatibilité 24 V et publié des graphiques de traceur de courbe convaincants, le Pinecil a été déclassé en déclarant qu'il ne serait compatible qu'avec des alimentations 21 V ou inférieures - à l'exclusion des alimentations 24 V, un inconvénient par rapport au TS100.

Plus tard, il se peut que le FUSB302 soit devenu plus sensible en raison de tolérances de fabrication dans différents lots. Il m'est arrivé de passer du temps et de faire du support technique bénévole dans le chat Pinecil de Pine64, et ce que nous avons rencontré à l'époque était une tendance - quelqu'un utilisait une alimentation à prise cylindrique bon marché, ou branchait accidentellement une alimentation 24 V, ou utilisait simplement une alimentation 20 V normale. La brique USB-C et le FUSB302 mourraient. Parfois, il mourrait tranquillement et ne ferait fonctionner le fer qu'à travers un cric baril ou QC; parfois, le FUSB302 court-circuitait le rail interne de 3,3 V et abaissait définitivement tout le fer, nécessitant l'élimination de l'air chaud pour raviver le Pinecil.

Les problèmes n'étaient pas importants lorsque l'on gardait en perspective le montant total de Pinecils vendus, mais ils étaient définitivement une tendance, et nous étions curieux. À un moment donné, [Thanos the tank engine], un collègue hacker, a décidé de creuser dedans et de trouver la solution. Avec [Ralim], ils ont découvert que la connexion de la broche VBUS n'était pas du tout utilisée dans le logiciel et qu'en fait, elle pouvait être complètement déconnectée. Ce qui a suivi était le "mod VBUS" - un hack ajouterait le support 24 V au Pinecil en supprimant la connexion VBUS, avec des instructions vidéo sur la façon de couper correctement la trace impliquée.

[Ralim] a modifié le firmware pour détecter si le mod a été exécuté correctement, comme une sécurité intégrée pour les utilisateurs qui auraient pu manquer un éclat de cuivre la première fois. Le correctif a finalement été intégré à une nouvelle révision du PCB Pinecil et au Pinecil V2. Dans l'ensemble, c'est une merveilleuse histoire courte sur la façon dont les grands produits open source avec une communauté florissante se transforment en un multiplicateur de force.

USB-C est conçu pour se débarrasser des normes de charge propriétaires, et c'est pourquoi la norme USB-C indique que vous ne devez pas prendre en charge les normes de communication de chargeur de piratage de paires de données USB telles que QC sur vos ports USB-C. Le but du Pinecil est d'être accessible, cependant, et cette partie de la spécification USB-C a dû être ignorée. Ainsi, outre la prise en charge PD, il existe également une prise en charge QC au cas où vous auriez à travailler avec un chargeur QC ou une banque d'alimentation – l'accessibilité des pirates informatiques est plus importante que la conformité USB-C. Ce n'est pas non plus la seule partie de la norme USB-C que le Pinecil viole pour de bonnes raisons.

Les signaux haute vitesse et SBU sur le port USB-C du Pinecil sont utilisés pour une variété de signaux - JTAG, SPI, I2C, UART et quelques ADC du MCU principal. En conséquence, le Pinecil est une carte de développement RISC-V et USB-PD, avec une carte de dérivation bon marché pour correspondre. Peu de gens ont profité de ces signaux, mais ils sont définitivement disponibles, et initialement, ils ont été utilisés lors du développement de Pinecil - alors pourquoi les laisser de côté sur la version de production ?

La spécification USB-C autorise la réutilisation de ces signaux à des fins de débogage, mais elle nécessite un multiplexeur pour les désactiver jusqu'à ce que le mode de débogage soit invoqué ; par conséquent, le Pinecil n'est pas conforme à cet égard. D'un autre côté, il n'y aurait pas eu d'espace sur le PCB Pinecil pour un multiplexeur, et cela aurait causé une trop grande augmentation de prix pour une fonctionnalité rarement utilisée qui est encore assez bonne pour ne pas la laisser passer. Au lieu de cela, juste au cas où quelqu'un utiliserait un câble haut débit pour connecter un Pinecil à un port USB3, les signaux étaient disposés de manière à ce qu'aucun des GPIO définis comme sortie ne soit connecté à la paire TX de l'USB3 - et aucun les utilisateurs ont déjà soulevé des problèmes. Même s'ils le faisaient, l'utilisation d'un câble différent suffirait, et si les problèmes devaient s'avérer fréquents, il y avait des cavaliers 0 R qui pourraient être omis en usine ; heureusement, rien de tout cela n'était nécessaire.

En lisant l'histoire du FUSB302, vous vous êtes peut-être demandé : comment se fait-il que la tension de la prise cylindrique puisse atteindre le VBUS du FUSB302 ? La raison est simple : la broche centrale de la prise cylindrique et le VBUS USB-C sont connectés ensemble. Si jamais vous concevez un produit avec deux entrées d'alimentation, c'est ce que vous ne devez jamais faire. Cependant, il semble que Pine64 n'avait pas d'autre moyen que de faire exactement cela. Au lieu de cela, ils ont sélectionné la prise cylindrique et le port USB-C avec les profils mécaniques les plus bas possibles, ce qui rend impossible l'insertion de câbles dans ces deux prises en même temps, créant une sorte de verrouillage mécanique.

Maintenant, il n'y a aucune raison pour que vous branchiez ces deux connecteurs en même temps, à moins que vous n'utilisiez le Pinecil comme une carte de déclenchement sophistiquée - ce que vous pourriez théoriquement, si ce n'était pas pour l'impossibilité mécanique. Il n'y a pas non plus d'instructions qui vous demandent de le faire. Cela dit, il y a deux histoires de quelqu'un qui a décidé d'insérer à la fois une prise jack et un câble USB-C alors qu'il essayait de flasher le micrologiciel, brûlant les ordinateurs qu'il utilisait pour cela. C'était un événement déroutant - personne dans la communauté Pinecil ne pouvait brancher les deux prises en même temps, même si nous avions bien essayé.

En fin de compte, il s'agissait d'un compromis de conception, où une voie mécanique a été empruntée pour résoudre un problème éventuel - et ce fut une solution réussie. Vous devez avoir un ensemble de circonstances très spécifiques pour même arriver à un endroit où un mode de défaillance est possible, et à ce stade, le taux de défaillance se rapproche du même pourcentage que vous obtiendriez si Pine64 mettait un commutateur FET ou une diode dans le chemin du port USB-C; les composants de commutation de puissance aiment échouer en court-circuit, après tout. Du côté de la communauté, nous avons cependant trouvé un autre correctif - mettre à jour toutes les instructions de clignotement et l'outil de clignotement Pinecil personnalisé, avertissant l'utilisateur qu'il doit retirer le bloc d'alimentation du cric avant de clignoter. Après l'ajout des avertissements, ce problème est devenu inconnu.

Il y a une puissance considérable derrière un projet open source qui a été fabriqué en dizaines de milliers d'unités et qui est tombé entre les mains d'amateurs et de pirates informatiques du monde entier. Mon Pinecil ne m'a jamais laissé tomber, et ses capacités USB-C sont une chose sur laquelle j'ai fini par compter. Nous ne devrions pas non plus sous-évaluer le cadeau qu'est une pile de PD open source testée au combat. Bien que l'implémentation USB-C du Pinecil ne soit pas sans faille, cela a été un grand avantage pour les pirates du monde entier ; et il y a aussi une mine d'histoires à apprendre.

PARTAGER