So wie es scheint, sind uart und USB nur zwei verschiedene Arten der digitalen Kommunikation. Wenn Sie also einen Mikrocontroller so programmieren, dass er uart über ein paar io-Pins akzeptiert und USB an ein paar anderen Pins ausgibt, könnten Sie einen uart erstellen zu usb bridge ohne etwas zu kaufen. So ähnlich wie das Übersetzen von Sprachen. So funktioniert es? Übersehe ich etwas? Ich verwende ein pic16f84a.
Jeder USB-zu-UART-Brücken-IC, den Sie auf dem Markt sehen, ist bereits eine MCU mit dauerhaft festgeschriebener Firmware (möglicherweise in Flash oder ROM). Diese haben typischerweise auch einen dedizierten UART- und USB-Peripherieblock auf dem Chip. Die Verwendung reiner Software zur Implementierung von UARTs und des USB-Line-Level-Protokolls schränkt die Geschwindigkeitsmöglichkeiten stark ein und wäre im Allgemeinen nicht praktikabel.
Viele der moderneren MCUs, die USB-Controller-Peripheriegeräte an Bord haben, verfügen über verfügbare App-Hinweise und Referenzcodes, die zeigen, wie eine USB-UART-Brücke aufgebaut wird. In einigen Fällen wird dies einfach Teil einer viel größeren Anwendung, die auf der MCU ausgeführt wird. Insbesondere wenn Sie über eine 200-MHz-32-Bit-MCU verfügen, ist dies sehr praktisch, um zusätzlich zur Bridge-Funktionalität sogar ein RTOS und die Aufgabenverarbeitung für eine Anwendung zu unterstützen.
Hinweis: Eine MCU, die auf diese Weise als Brücke arbeitet, wird als Gerät der USB-CDC-Klasse bezeichnet.
Wenn Sie einfach einen Mikrocontroller so programmieren, dass er UART über ein paar IO-Pins akzeptiert und USB in ein paar anderen Pins ausgibt, können Sie eine UART-zu-USB-Brücke erstellen, ohne etwas zu kaufen. So ähnlich wie das Übersetzen von Sprachen. So funktioniert es?
Nicht wirklich. Aus hochtheoretischer Informatiksicht, aus einer Sicht von 20.000 Fuß, mag es so aussehen. In Wirklichkeit ist es jedoch ganz anders.
Der UART ist ein primitives serielles Übertragungsprotokoll, START+Acht-Bit-Umschalten+STOP, keine Strukturen, Adressen, Datenkorrektur oder Bestätigung. Gesendet und hoffen, dass andere Empfänger es abfangen. Es wird höchstens ein LF zurückerwartet. Aber man kann es ein "UART-Paket" nennen.
Der Basis-USB muss einem strengen Protokoll für den Austausch hochstrukturierter Daten folgen, die in "Paketen" angeordnet sind. USB-Pakete haben SYNC, Packet ID, DATA, CRC und EOP. Die PID-DATA+CRC sind auf spezielle Weise codiert, um ein ausgeglichenes +-Signal aufrechtzuerhalten und zu vermeiden, dass die Datenleitungen im Gegensatz zu UART zu lange in einem Zustand bleiben. Classic USB verwendet NRZI-Codierung mit "Bit Stuffing".
Der Paketaustausch erfordert eine bestimmte Reihenfolge, die als "Transaktion" bezeichnet wird, die normalerweise die SETUP-Phase mit ADDRESS und DATA-Phase umfasst, und das USB-Gerät muss mit einem Paket antworten, das die Korrektheit der empfangenen Daten bestätigt. Typischerweise sind also drei einzelne Pakete für eine "Transaktion" erforderlich.
Dann werden die USB-Transaktionen in "Übertragungen" angeordnet, die SETUP, DATA (möglicherweise viele DATEN-Pakete) und Bestätigungspakete für jede DATEN in beide Richtungen umfassen. Es gibt auch CONTROL-Übertragungen, die eine SETUP-Phase, eine DATA-Phase und eine STATUS-Phase aufweisen, sodass eine typische Steuerungsübertragung (um einige Parameter vom Gerät einzustellen oder abzurufen) 9 einzelne USB-Pakete mit jeweils einer SYNC-PID/ADDRESS-CRC_EOP-Struktur benötigt.
Darüber hinaus sind Antworten auf eingehende Pakete zeitlich auf weniger als 1,7 us Antwortzeit begrenzt, sodass nicht viele MCUs in der Lage sind, ein Paket zu decodieren, seine Prüfsumme zu überprüfen und unter 2 Mikrosekunden zurückzuantworten. Daher ist die Unterstützung des USB-Protokolls in der Regel in Hardware implementiert, zumindest die zeitkritischen Teile. Dies wird als USB SIE - Serial Interface Engine bezeichnet. Während die Reihenfolge und Generierung von Übertragungen in der Verantwortung von USB HOST liegt und nicht Ihre Angelegenheit ist, müssen Geräte die SIE-Regeln befolgen, alle Pakete dekodieren und rechtzeitig richtig reagieren.
Ein USB-Gerät wird nach einem als „Enumeration“ bezeichneten Prozess funktionsfähig, der das Lesen von Gerätefunktionen und Funktionszwecken (auch als „Gerätedeskriptoren“ bezeichnet), das Empfangen einer individuellen USB-Adresse und das Auswählen/Initialisieren der „Gerätekonfiguration“ umfasst. Diese Aufzählung erfordert normalerweise ein Dutzend Steuerübertragungen und muss erfolgen, bevor eine Brücke zwischen USB-DATEN und UART-DATEN hergestellt werden kann.
Angesichts dieses kurzen "Crush" -Kurses in USB entscheiden Sie nun, ob Sie dieses SIE ("usb in ein paar andere Pins ausgeben") in Ihrem PIC16-Mikrocontroller implementieren können.
Feuerstelle
Oldtimer
Oldtimer
Benutzer11937382