banner

Blog

May 03, 2023

Alles über USB

Wie viele Leute betont haben, kommt es bei USB-C nicht nur auf den Standard an, sondern auf die Implementierung. Schließlich sind es die Implementierungen, mit denen wir uns eigentlich befassen müssen, und hier entstehen die meisten Probleme mit USB-C. Es gibt einige Fehler am Standard, wie zum Beispiel das Fehlen von Kabelmarkierungen von Anfang an, aber zum jetzigen Zeitpunkt bin ich davon überzeugt, dass der USB-C-Standard viel besser ist, als manche Leute denken.

Ich möchte Sie durch einige USB-C-Implementierungen in realen, Open-Source-, angrenzenden und einfach interessanten Produkten führen. Sie sind alle irgendwie unvollkommen – das kann nicht anders sein, denn sie müssen sich mit der chaotischen realen Welt auseinandersetzen, in der Perfektion eine Seltenheit ist.

Schauen wir uns heute das Pinecil an. Ein Lötkolben von Pine64, der vor einigen Jahren auf den Markt kam und für einen niedrigen Preis und eine hohe Qualität sorgt. Es verfügt sowohl über eine Hohlbuchse als auch über einen USB-C-Anschluss für den Stromeingang – eine willkommene Abkehr von der Miniware-Eisenstrategie, bei der weder die nur mit Hohlbuchse ausgestatteten TS100 noch die stromsparenden TS80-Eisen mit proprietärer Spitze dies geschafft haben. Und angesichts seines Designs rund um Spitzen im TS100-T12-Stil ist es kein Wunder, dass Pinecil einen wohlverdienten Platz in der Welt der Bastler einnimmt.

Nun denken Sie vielleicht, dass Pinecil ein einfaches Gerät sein sollte. Der übliche Weg, hohe Leistung aus einem USB-C-Anschluss herauszuholen, ist ein Power Delivery (PD)-Trigger-IC, den Sie einfach verwenden können. Wenn Sie jedoch den Artikel zur USB-C-Stromversorgung gelesen haben, erinnern Sie sich vielleicht an das Szenario 45-W- vs. 60-W-Ladegerät, bei dem eine solche Anordnung sofort scheitern würde. Insgesamt ist die Konfigurierbarkeit von Trigger-ICs recht gering, und wenn bei einigen Netzteilen ein PD-Kompatibilitätsproblem auftritt, können Sie nichts dagegen tun, außer den IC durch einen IC mit etwas anderer Logik zu ersetzen – sofern es überhaupt einen Ersatz gibt Normalerweise ist das nicht der Fall. Dies ist kostspielig und begrenzt für ein Produkt für den realen Einsatz.

Pinecil ging den Weg „PD-Stack-Software + PD-Frontend-IC“ und widmete einen Teil der MCU der Echtzeitnatur der PD-Kommunikation. Als PD-Frontend kommt der FUSB302 zum Einsatz, der über die reguläre I2C-Schnittstelle mit der MCU verbunden ist. Der Mikrocontroller selbst hat sich vom GD32VF103 in Pinecil v1 zum BL706 in Pinecil v2 geändert – beide RISC-V.

Jetzt habe ich angefangen, hier abstrakt zu sprechen, aber es macht Sinn, über den Hacker zu sprechen, der die eigentliche Arbeit leistet, um den PD-Stack zu ermöglichen – genauer gesagt den gesamten Pinecil-Software-Stack. Die Person, die für das PD und die gesamte Pinecil-Software verantwortlich ist, ist [Ralim], bekannt für seine IronOS-Firmware, die ursprünglich für TS100, TS80 und andere Lötkolben mit MCUs entwickelt wurde. Pine64 wandte sich an [Ralim], als Pinecil nur ein Konzept war, und fragte, ob er für die Portierung von IronOS, einschließlich der erforderlichen PD-Arbeiten, zur Verfügung stünde.

Im Laufe der Jahre hat sich der „Frontend + MCU“-Ansatz enorm ausgezahlt. Ein Hauptgrund ist die Netzteilkompatibilität – es gibt große Unterschiede bei der USB-C-Stromversorgungskommunikation, da die PD-Komponenten schwierig zu implementieren sein können, insbesondere wenn es um Edgecases geht. Die ursprüngliche Firmware der Pinecil-Bügeleisen funktionierte tatsächlich nicht mit einer Reihe von Netzteilen auf dem Markt – darunter zum Beispiel einigen Power Bricks von Apple.

Das Schöne daran ist, dass [Ralim] jedes Mal, wenn jemand ein Netzteil-Kompatibilitätsproblem auf GitHub meldete, dieses Problem aufspüren konnte, entweder durch Remote-Debugging mit dem „Ausprobieren dieser Binärdatei“ oder durch den direkten Kauf des gleichen Netzteils. Dann würde er das Problem beheben, indem er die Art und Weise änderte, wie der Stack Randfälle behandelt, den Fix testete und eine neue Pinecil-Firmware-Version auf GitHub hochlud, damit jeder sie verwenden konnte. Innerhalb eines Jahres waren die meisten USB-C-Probleme behoben, und wenn Sie ein Pinecil-Problem haben, müssen Sie wahrscheinlich nur die Firmware der werkseitig geflashten alten Version aktualisieren.

Im Laufe der Jahre ist der Stack recht ausgereift und vor allem kampferprobt geworden – es ist heutzutage schwierig, ein Netzteil zu finden, mit dem das Pinecil nicht funktioniert. Aus Debugging- und Hacker-Komfortgründen: Wenn Sie ein USB-C-Netzteil an Ihren Pinecil anschließen und dabei die +-Taste gedrückt halten, wird Ihnen ein PD-Debug-Menü mit allen Profilen angezeigt – in gewisser Weise ist der Pinecil ein PD-Debugger-Tool, das Sie verwenden können vielleicht schon besitzen.

Würde ein solcher Ansatz für ein kleines Hobbyprojekt funktionieren, das ein USB-C-Netzteil erfordert? Vielleicht nicht damals, als der Pinecil neu war. Heute ist der PD-Stack jedoch Open Source und ausgereift.

Das Schreiben eines USB-C-PD-Software-Stacks ist nicht so einfach wie beispielsweise das Schreiben eines ADC-Treibers. Um die Koexistenz- und Sicherheitsanforderungen durchzusetzen, verwendet USB-C Zustandsmaschinen. Wenn Ihnen schon einmal jemand eines dieser einschüchternden Diagramme direkt von den USB-C-Dokumentationsseiten mitgeteilt hat, sind Sie vielleicht geneigt zu glauben, dass USB-C am besten nicht von Menschen berührt werden sollte. Dieser Standpunkt ist nicht ganz falsch – die Neuimplementierung dieser Zustandsmaschinen ist nicht unbedingt etwas, wofür Sie Ihre Zeit aufwenden möchten. Andererseits sind die beteiligten Zustandsmaschinen trotz ihres informationell aggressiven Charakters einfacher, als sie vielleicht aussehen.

Wenn Sie jedoch von einem USB-C-fähigen Open-Source-Projekt träumen, möchten und müssen Sie nicht bei Null anfangen. Dank der Arbeit von [Ralim] steht uns heute ein Open-Source-PD-Stack zur Verfügung. Es ist in C++ geschrieben und für die Verwendung mit einem RTOS konzipiert, da USB-C relativ schnelle Reaktionen auf Teile des Protokolls erfordert, die auf der Stromversorgungsseite erzwungen werden. Dieser Stack wurde von [Clara Hobbs] im Rahmen des PD Buddy Sink-Projekts gestartet und hat sich zu einer tatsächlichen Bibliothek entwickelt, die Sie verwenden möchten, wenn auch Sie Ihr eigenes USB-C-betriebenes Gerät entwickeln möchten.

Der Stack ist gut getestet, dank einer bemerkenswerten Sammlung verschiedener USB-C-Netzteile, die Ralim besitzt und mit denen er testen kann – vielleicht ist das der Grund, warum dieser Stack am wertvollsten ist. Es dient jedoch auch als USB-C-Spielwiese. Als EPR-Ladegeräte wie das 140-W-Ladegerät von Apple auf den Markt kamen, standen ihnen 28 V zur Verfügung – etwas, mit dem das Pinecil die Spitzenheizleistung von 50 W auf 98 W steigern konnte. Innerhalb weniger Monate wurde der reine SPR-Stack EPR-kompatibel und wir sahen, wie die ersten Pinecils von Apple-Ladegeräten mit 28 V Strom versorgt wurden. Damit war es das erste Open-Source-Projekt, das die zusätzlichen Anforderungen von EPR erfüllen konnte.

Der verwendete PD-Frontend-IC FUSB302 hat einen bizarren Aspekt – sein Datenblatt spezifiziert zwei maximale Spannungen an seinem VBUS-Pin, 21 V „empfohlenes Maximum“ und 28 V „absolutes Maximum“. Nun wurde dieser Pin mit der VBUS-Stromspur am USB-C-Anschluss, also mit dem Stromeingang, verbunden. Schon früh löste dies in der Community Bedenken aus, und während jemand die 24-V-Kompatibilität testete und überzeugende Kurvendiagramme veröffentlichte, wurde das Pinecil mit der Aussage herabgestuft, dass es nur mit 21-V- oder niedrigeren Netzteilen kompatibel sei – mit Ausnahme von 24-V-Netzteilen. ein Nachteil gegenüber dem TS100.

Später kann es vorkommen, dass der FUSB302 aufgrund von Fertigungstoleranzen in verschiedenen Chargen empfindlicher wurde. Ich war zufällig im Pinecil-Chat von Pine64 und leistete ehrenamtlichen technischen Support, und was wir damals trafen, war ein Trend: Jemand benutzte ein billiges Hohlstecker-Netzteil, steckte versehentlich ein 24-V-Netzteil ein oder benutzte einfach ein normales 20-V-Netzteil USB-C-Stein und der FUSB302 würde sterben. Manchmal verstummte es leise und das Eisen funktionierte nur noch über den Zylinderheber oder die QC; Manchmal hat der FUSB302 die interne 3,3-V-Schiene kurzgeschlossen und das gesamte Bügeleisen dauerhaft heruntergefahren, sodass die Heißluft entfernt werden musste, um den Pinecil wiederzubeleben.

Wenn man die Gesamtmenge der verkauften Pinecils im Blick hat, waren die Probleme nicht besonders ausgeprägt, aber es handelte sich definitiv um einen Trend, und wir waren neugierig. Irgendwann beschloss [Thanos, der Panzermotor], ein Hackerkollege, sich damit zu befassen und herauszufinden, was die Lösung sein könnte. Zusammen mit [Ralim] fanden sie heraus, dass die VBUS-Pin-Verbindung in der Software überhaupt nicht verwendet wurde und tatsächlich vollständig getrennt werden konnte. Was folgte, war der „VBUS-Mod“ – ein Hack, der dem Pinecil 24-V-Unterstützung hinzufügte, indem er die VBUS-Verbindung entfernte, mit Videoanweisungen zum richtigen Schneiden der entsprechenden Leiterbahn.

[Ralim] hat die Firmware geändert, um zu erkennen, ob der Mod korrekt ausgeführt wurde, als Ausfallsicherheit für Benutzer, denen beim ersten Mal möglicherweise ein Kupferstück entgangen ist. Der Fix gelangte schließlich auch in eine neue Pinecil-PCB-Revision, und zwar in die Pinecil V2. Insgesamt ist es eine wunderbare Kurzgeschichte darüber, wie große Open-Source-Produkte mit einer florierenden Community zu einem Kraftmultiplikator werden.

USB-C wurde entwickelt, um proprietäre Ladestandards abzuschaffen. Aus diesem Grund besagt der USB-C-Standard, dass Sie an Ihren USB-C-Anschlüssen keine USB-Datenpaar-Hijacking-Ladekommunikationsstandards wie QC unterstützen dürfen. Das Ziel des Pinecil besteht jedoch darin, zugänglich zu sein, und dieser Teil der USB-C-Spezifikation musste ignoriert werden. Neben der PD-Unterstützung gibt es also auch QC-Unterstützung für den Fall, dass Sie mit einem QC-Ladegerät oder einer Powerbank arbeiten müssen – die Zugänglichkeit für Hacker ist wichtiger als die USB-C-Konformität. Es ist auch nicht der einzige Teil des USB-C-Standards, gegen den der Pinecil aus guten Gründen verstößt.

Die Hochgeschwindigkeits- und SBU-Signale am USB-C-Anschluss des Pinecil werden für eine Vielzahl von Signalen verwendet – JTAG, SPI, I2C, UART und einige ADCs vom Haupt-MCU. Daher ist das Pinecil ein RISC-V- und USB-PD-Entwicklungsboard mit einem passenden günstigen Breakout-Board. Nicht viele Leute haben von diesen Signalen Gebrauch gemacht, aber sie sind auf jeden Fall verfügbar, und ursprünglich wurden sie während der Entwicklung von Pinecil verwendet – warum sollte man sie also in der Produktionsversion weglassen?

Die USB-C-Spezifikation erlaubt zwar die Wiederverwendung dieser Signale für Debug-Zwecke, erfordert jedoch einen Multiplexer, der sie abschaltet, bis der Debug-Modus aufgerufen wird; Daher ist Pinecil in dieser Hinsicht nicht konform. Andererseits wäre auf der Pinecil-Leiterplatte kein Platz für einen Multiplexer gewesen, und dies hätte zu einem zu starken Preisanstieg für eine selten genutzte Funktion geführt, die immer noch gut genug ist, um nicht darauf verzichten zu müssen. Für den Fall, dass jemand ein Hochgeschwindigkeitskabel verwendet, um einen Pinecil an einen USB3-Anschluss anzuschließen, wurden die Signale stattdessen so angeordnet, dass keiner der als Ausgang festgelegten GPIOs mit dem TX-Paar des USB3 verbunden war – und nein Benutzer haben jemals irgendwelche Probleme angesprochen. Selbst wenn dies der Fall wäre, würde die Verwendung eines anderen Kabels ausreichen, und wenn die Probleme häufiger auftreten sollten, gab es 0 R-Jumper, die im Werk weggelassen werden konnten; Zum Glück war nichts davon erforderlich.

Als Sie die FUSB302-Geschichte gelesen haben, haben Sie sich vielleicht gefragt: Wie kann es sein, dass die Hohlsteckerspannung zum VBUS des FUSB302 gelangt? Der Grund ist einfach: Der Mittelstift der Hohlbuchse und der USB-C-VBUS sind miteinander verbunden. Wenn Sie jemals ein Produkt mit zwei Stromeingängen entwickeln, dürfen Sie dies niemals tun. Es scheint jedoch, dass Pine64 keine andere Möglichkeit hatte, als genau das zu tun. Stattdessen wählten sie die Hohlbuchse und den USB-C-Anschluss mit möglichst niedrigen mechanischen Profilen, wodurch es unmöglich war, Kabel gleichzeitig in beide Buchsen einzustecken – wodurch eine Art mechanische Verriegelung entstand.

Nun gibt es keinen Grund, warum Sie jemals beide Anschlüsse gleichzeitig anschließen sollten, es sei denn, Sie verwenden das Pinecil als schickes Triggerboard – was Sie theoretisch könnten, wenn es die mechanische Unmöglichkeit nicht gäbe. Es gibt auch keine Anleitung, die Sie dazu auffordert. Allerdings gibt es zwei Geschichten, in denen jemand beschloss, sowohl einen Hohlstecker als auch ein USB-C-Kabel anzuschließen, während er versuchte, die Firmware zu flashen, wodurch die dafür verwendeten Computer verbrannt wurden. Dies war ein rätselhaftes Ereignis – niemand in der Pinecil-Community konnte beide Stecker gleichzeitig einbauen, obwohl wir es durchaus versucht haben.

Letztlich handelte es sich dabei um einen konstruktiven Kompromiss, bei dem ein mechanischer Weg zur Lösung eines möglichen Problems eingeschlagen wurde – und das war eine erfolgreiche Lösung. Es müssen ganz bestimmte Umstände vorliegen, um überhaupt an einen Punkt zu gelangen, an dem ein Fehlermodus möglich ist, und an diesem Punkt nähert sich die Fehlerrate dem gleichen Prozentsatz an, den Sie erhalten würden, wenn Pine64 einen FET-Schalter oder eine Diode einbauen würde der Weg zum USB-C-Anschluss; Leistungsschaltkomponenten fallen schließlich gerne kurzgeschlossen aus. Auf der Community-Seite haben wir jedoch eine weitere Lösung gefunden: Wir haben alle Flash-Anweisungen und das benutzerdefinierte Pinecil-Flasher-Tool aktualisiert und den Benutzer gewarnt, dass er vor dem Flashen das Barrel-Jack-Netzteil entfernen muss. Nachdem die Warnungen hinzugefügt wurden, ist dieses Problem unbekannt.

Hinter einem Open-Source-Projekt, das in Zehntausenden von Einheiten hergestellt und in die Hände von Bastlern und Hackern auf der ganzen Welt gelangt ist, steckt beträchtliche Kraft. Mein Pinecil hat mich nie im Stich gelassen und auf seine USB-C-Fähigkeiten habe ich mich letztendlich verlassen. Wir sollten auch das Geschenk eines kampferprobten Open-Source-PD-Stacks nicht unterschätzen. Obwohl die USB-C-Implementierung des Pinecil nicht fehlerfrei ist, war sie für Hacker auf der ganzen Welt ein großer Vorteil; Und es gibt auch jede Menge Geschichten, aus denen man lernen kann.

AKTIE