Tout sur l'USB
Si vous avez suivi notre saga USB-C, vous savez que le fil CC des câbles USB-C est utilisé pour les communications et la détection de polarité. Cependant, ce qui n'est pas aussi connu, c'est qu'il existe deux protocoles utilisés dans USB-C pour les communications - un analogique et un numérique. Aujourd'hui, examinons la signalisation analogique utilisée dans l'USB-C - en partie, apprenons-en plus sur les légendaires résistances de 5,1 kΩ et leur fonctionnement. Nous découvrirons également les emarkers et l'entité mystérieuse qu'est VCONN !
L'alimentation USB-C s'attend à détecter une certaine valeur de pulldown sur la ligne CC avant de fournir 5 V sur VBUS, et toute tension plus élevée doit être négociée numériquement. Le bloc d'alimentation, qu'il s'agisse du port de votre ordinateur portable ou d'un chargeur, peut détecter le pulldown (appelé Rd) car il maintient un pullup (appelé Rp) sur la ligne CC - il vérifie ensuite si un diviseur de tension s'est formé sur CC et si la tension résultante se situe dans une plage acceptable.
Si vous branchez un appareil qui ne rend pas un pulldown accessible via le fil CC du câble, votre appareil ne sera jamais alimenté par un port USB-C et ne fonctionnera qu'avec un câble USB-A vers USB-C. Même les appareils les plus intelligents qui peuvent parler de la partie numérique de l'USB-C devraient avoir des pulldowns, c'est juste que ces pulldowns sont internes au circuit intégré de communication USB-C utilisé. Un port USB-C qui veut être alimenté doit avoir un pulldown.
Cette partie est maintenant bien connue, mais nous avons vu de nombreuses défaillances de résistance dans des appareils bon marché, et le conseil familier est "ajoutez des résistances de 5,1 kΩ". Vous pourriez avoir peur de penser que c'est si simple, mais vous seriez surpris.
Il existe deux types de rôles d'alimentation pour les ports USB-C : côté alimentation et côté consommateur. Le côté analogique de l'USB-C permet aux concepteurs d'ajouter un moyen simple de négocier les besoins en alimentation lors de l'utilisation de l'USB-C à 5 V, sans utiliser de circuits intégrés spécifiques ou coûteux - en utilisant des pullups pour les sources et des pulldowns pour les puits. La combinaison d'un pullup et d'un pulldown forme un diviseur de tension, et la tension elle-même représente la capacité actuelle du chargeur.
Maintenant, en mode de signalisation analogique, la source peut ajuster le pullup en fonction du budget de puissance dont elle dispose, et c'est très utile. Imaginez un ordinateur portable ou un chargeur avec plusieurs ports USB-C. Au fur et à mesure que chaque port est chargé, il y aura moins de courant à donner aux autres ports, ce qui est en grande partie défini par la façon dont l'appareil est construit en interne. Prenez l'ordinateur portable Framework, par exemple, qui est équipé de quatre ports USB-C. Chaque port peut fournir 15 W à 5 V / 3 A, mais si vous souhaitez alimenter simultanément quatre périphériques USB-C à évier uniquement, il ne pourra fournir que 1,5 A sur les troisième et quatrième ports – une limitation tout à fait raisonnable du point de vue de l'ingénierie.
Cela signifie que les appareils à consommation plus élevée, comme les appareils de 1,5 A et 3 A max, doivent surveiller la tension sur la ligne CC pour déterminer s'ils pourraient dépasser le budget de puissance en ajustant leurs demandes de puissance, ou s'arrêter si la limite de courant nouvellement établie est dépassée.
Qu'est-ce que cela signifie pour vous en tant qu'utilisateur ? Rien, si vos appareils sont suffisamment peu énergivores. Vos appareils sont censés surveiller la tension sur la ligne CC et ajuster leur appétit en conséquence. Certains appareils achetés en magasin ne le feront pas, mais c'est rare. En tant que pirate ? Si vous construisez un appareil alimenté par un port USB-C et que vous visez à obtenir 3 A à 5 V, rappelez-vous que tous les ports USB-C ne vous fourniront pas cela. Vous pouvez cependant vérifier la disponibilité de 3 A en mesurant la tension sur la ligne CC. Ou non, je ne suis pas ta mère, et de nombreux appareils de piratage prospèrent avec une détection zéro.
À quelles tensions pouvez-vous vous attendre sur la ligne CC ? Eh bien, c'est le genre de tension que vous pouvez lire avec un ADC de base dont dispose votre microcontrôleur, ou même un comparateur.
Comme vous pouvez le voir, tout est inférieur à 3,3 V, vous n'aurez donc pas besoin d'un diviseur de tension si vous utilisez un ADC à microcontrôleur à oscillation complète. Oh, et si vous avez une prise USB-C, n'oubliez pas de surveiller les deux broches CC séparément, bien sûr.
Avez-vous vraiment besoin de surveiller la tension CC ? Lorsque vous ne faites que pirater quelque chose, pas vraiment, mais cela peut aider si vous le faites lorsque vous voulez aller au-delà de 0,5 A à 1 A. Si vous dépassez les demandes de courant que le port source peut fournir, il est censé simplement arrêter d'alimenter votre appareil - un résultat assez sûr. D'un autre côté, la philosophie de l'USB-C est d'avoir plusieurs couches de protections, et si vous construisez un appareil de 15 W avec l'approche simple de la résistance de 5,1 kΩ, autant en faire un appareil capable de détecter son alimentation insuffisante. De plus, c'est assez facile à faire !
Sinon, vous pouvez simplement vous attendre à ce que votre appareil veuille être couplé avec un chargeur qui donne toujours 3 A à 5 V, ce que fait la grande majorité des chargeurs. Ensuite, vous ne rencontrerez jamais de problèmes - toujours capable de travailler avec les 15 W complets. Si vous connectez votre appareil à un port d'ordinateur portable, cependant, que ce soit USB-C ou USB-A avec un adaptateur USB-C, vous ne pouvez pas vous attendre à ce que 3 A soient toujours là - vous voudrez en fait vérifier.
5,1 kΩ n'est pas le seul pulldown que vous rencontrerez. Il existe un autre type de pulldown, que nous, les hackers, avons déjà rencontré, et c'est le Ra - quelque chose qui entre en jeu lorsque nous parlons de câbles marqués e.
Les Emarkers sont essentiellement des puces mémoire qui peuvent parler du protocole USB PD. Ils sont utilisés dans des câbles légèrement plus sophistiqués que la normale, c'est-à-dire des câbles dotés de capacités haut débit comme USB3 et Thunderbolt, ainsi que des câbles 5 A. Ils puisent dans la ligne CC du câble et peuvent être interrogés soit par la source, soit par le puits, bien qu'ils soient généralement interrogés par la source.
S'il y a un emarker à l'intérieur de votre câble USB-C, il aura besoin d'énergie, et USB-C a un moyen de l'alimenter - il s'appelle VCONN. Comme vous le savez, une seule broche CC est utilisée pour la communication. La broche CC opposée, non connectée à une ligne CC, est utilisée pour alimenter le marqueur électronique ; l'autre broche CC est VCONN.
Dans la prise USB-C, vous saurez quelle broche CC est attachée au fil CC, et donc, vous savez à l'avance quelle broche agira comme VCONN. Cependant, vous pouvez insérer la fiche dans deux orientations différentes - et cela signifie que la prise doit pouvoir traiter l'une des deux broches CC comme une ligne de communication CC ou une broche VCONN. Cela maintient les câbles relativement stupides et bon marché, laissant les appareils eux-mêmes gérer la complexité.
En tant que pirate informatique, vous n'aurez probablement pas à vous soucier de VCONN. La plupart d'entre nous travailleront avec USB2 ou USB3, pas plus de 3 A de courant, et la vérification de l'emarker ne sera pas si nécessaire. Pour aller plus loin, il existe des circuits intégrés qui prendront en charge une multitude d'aspects USB-C pour vous, y compris, en effet, la fourniture de VCONN.
Les exigences de tension sur VCONN sont assez laxistes, par opposition aux 5 V que vous êtes censé fournir à VBUS - la plage autorisée est de 3 V à 5,5 V ; souvent, il s'agit d'une tension de batterie unicellulaire LiIon directe dans les implémentations de smartphone, ce qui signifie que vous évitez deux conversions et que vous pouvez faire beaucoup d'économies d'énergie. Après tout, l'alimentation VCONN n'est pas seulement destinée aux emarkers, elle peut être utilisée pour alimenter de petits accessoires et des adaptateurs de casque avec un budget d'alimentation allant jusqu'à 1 W. Cette présentation amusante d'un pirate USB-C parle du prototypage d'appareils alimentés par VCONN qui couvrent toute la gamme de ce que la spécification USB-C permet à un appareil alimenté par VCONN.
Cela dit, les emarkers sont la chose la plus répandue qui veut VCONN, et ils sont assez simples. Parfois un câble contiendra deux emarkers, parfois il en contiendra un - c'est un choix de fabrication. Dans le cas d'un câble à un seul emarker, l'une des extrémités du câble contiendra l'emarker, et il y aura un fil VCONN supplémentaire "amener l'emarker à l'autre extrémité" qui traversera le câble à partir de la prise équipée d'un emarker, connecté à la broche VCONN sur l'autre prise de câble. Donc, si jamais vous voyez une mention d'un fil VCONN, c'est ce que cela signifie - un fil isolé par diode connecté à une broche CC inutilisée à une extrémité du câble, qui alimente simplement un emarker à l'autre extrémité.
Maintenant, c'est amusant et tout, mais qu'en est-il de ce truc de Ra pulldown?
Un emarker signale sa présence en appliquant une résistance pulldown (appelée Ra) à la broche VCONN; c'est 1 kΩ en moyenne, dans la plage de 800 Ω à 1200 Ω. Si le réceptacle est capable de fournir VCONN, il recherche une telle résistance sur la broche CC qui n'est pas actuellement utilisée pour les communications et alimente VCONN dans cette broche lorsque la résistance est détectée. Cette résistance est donc disponible sur la deuxième broche CC à l'intérieur de la fiche du câble - sur les deux fiches du câble.
Que se passe-t-il si vous court-circuitez les deux broches CC ensemble dans la prise de votre appareil, puis insérez un câble marqué à haute capacité ? La résistance de 5,1 kΩ est mise en parallèle avec la résistance de 1 kΩ, et vous obtenez un pulldown total de 840 Ω, plus ou moins. Ce pulldown est ce que l'alimentation voit sur la ligne CC, et il est hors de l'attente de 5,1 kΩ. Plus précisément, le diviseur de tension tire la tension trop bas et l'alimentation ne fournit pas 5 V sur VBUS.
C'est ce que faisait Raspberry Pi 4 dans ses premières révisions, vous vous souvenez ? Par conséquent, vous n'auriez pas pu alimenter le Pi 4 avec un câble marqué via un chargeur de type C - vous auriez besoin d'un câble non marqué ou peut-être d'un câble USB-A vers USB-C avec une alimentation USB-A. Et, bien sûr, l'alimentation officielle du Raspberry Pi n'a pas d'emarker dans son câble captif. Il n'a pas non plus besoin d'avoir un emarker - après tout, les emarkers sont destinés à interroger des câbles inconnus, et les câbles captifs sont des câbles connus par définition.
La question que je n'ai vu personne poser était : pourquoi l'ont-ils fait ? Si vous vérifiez le schéma, vous verrez que le réseau PD_SENSE des broches CC jointes va à une broche d'entrée analogique sur le PMIC. Vous pouvez peut-être deviner maintenant - ils ont implémenté la partie "surveillance de la tension" de la norme, mais n'ont pas implémenté correctement la partie "emarker". La quantité de surveillance de tension qu'ils font réellement est discutable, mais la capacité est au moins là.
Raspberry Pi a résolu le problème dans les révisions à venir, et si vous avez une révision plus ancienne, vous pouvez la corriger vous-même. Nous ne savons pas encore comment ils l'ont corrigé, mais nous finirons par le découvrir. En attendant, voici tout ce que vous devez savoir sur les résistances, les emarkers et l'insaisissable VCONN.
Prochaine étape : alimentation USB-C dans les ports, rôles d'alimentation et tensions plus élevées !