Hier kann man sich (englisch) einlesen:
FĂŒr einen USB-Seriell-Umsetzer im Mikrocontroller und einstellbarer Baudrate muss man sich trotzdem tiefgrĂŒndig mit USB beschĂ€ftigen. Fertige Chips nehmen diese Arbeit (gegen Geld) ab.
Serielles Plug&Play bedeutet, dass vom PC eine serielle Maus automatisch erkannt wird. Dieses Feature ist kaum bekannt. Es erfordert das Abhören des DTR-Zustandes und der Baudrate von 1200 Baud und 7 Datenbits. Daher ist so etwas recht komplex und niemals in Frameworks eingebaut. Wie man das Ganze dann am PC nutzbringend findet ist mir noch unbekannt.
Hingegen funktioniert das einfache Konzept bei Ultraschall-Recordern. Deswegen wurde das auch mal aufgebaut.
Undefiniert heiĂt, es kann alles zwischen erwartungsgemĂ€Ăer Funktion und Feuer auf dem Chip passieren. Dazwischen liegen:
- Es wird 0x00 oder 0xFF gelesen
- Es wird irgendetwas geschrieben (auch beim Lesen!)
- Es wird eine Backdoor geöffnet
- Der Controller frisst eine ungewöhnliche Stromspitze
- Die CPU oder die Peripherie (bspw. der Taktgenerator!) friert ein (unmerklich kurzzeitig oder bis zum Reset)
- Die CPU springt zu einer wilden Adresse
- Flash-Speicher wird gelöscht
- Undokumentierte Fuses werden gesetzt, die zum Chipausfall fĂŒhren
Möglicherweise lassen sich Daten im Dual-Port-RAM âliveâ mitlesen aber das ist schlicht undokumentiert und kaum zu etwas nĂŒtze.Wenn Latenz eine Rolle spielt, mĂŒssen kleine Iso-Pakete gewĂ€hlt werden, aber unter 1 ms geht (bei Full-Speed) nichts.
Das gilt prinzipiell auch fĂŒr das Setup-Paket! Allerdings niemals mit NAK, schlimmstenfalls mit Schweigen (keine Antwort). Der Host probiert es dann noch zweimal und reagiert mit Fehler, wenn's dann immer noch nicht klappt, also ACK geantwortet wird. Es ist deshalb sehr wichtig, dass an Endpoint 0 immer eine OUT-FIFO im SIE-Besitz âhĂ€ngtâ.Bei allen anderen Endpoints darf der Zustand beliebig lange anhalten, hier hĂ€ngt das Timeout-Verhalten vom Klassentreiber ab. Einige Mikrocontroller können fĂŒr diesen Fall einen NAK-Interrupt generieren.
Einen Sonderfall nimmt NAK-IN ein: Mit NAK-IN (also Not-Acknowledge-Interrupt auf einer IN-Pipe) bekommt man mit, wenn der PC beginnt auf ein GerÀt zu horchen. Das passiert bei Windows-USB-CDC dann, wenn die serielle Schnittstelle geöffnet wird, kann jedoch bei anderen Klassentreibern und Betriebssystemen anders gelöst sein. Bei USB-HID ist es hingegen egal ob ein Programm das GerÀtetreiber-Handle hat oder nicht: Die Interrupt-Pipes werden immer abgefragt.
Beispiel: Kommen Daten byteweise tröpfelnd von einer seriellen Schnittstelle und man will sie in möglichst groĂe USB-Happen packen, mĂŒsste man diese in die USB-FIFO stecken und (um Latenzzeiten zu vermeiden) sofort die FIFO der SIE ĂŒbergeben. Kommt das nĂ€chte Byte, mĂŒsste man das nĂ€chste Byte anhĂ€ngen und die LĂ€nge erhöhen. Das ist so nicht erlaubt! Obwohl es meistens funktioniert. Ganz böser Fehler! Lösungen:
Wichtig: Die USB-GerĂ€te mĂŒssen am gleichen Host-Controller hĂ€ngen. Um das sicher zu stellen, benutzt man einen USB-Hub. Bei verschiedenen Host-Controllern kann nicht sicher gesagt werden, dass die SOFs gleichzeitig kommen oder die gleiche Nummer haben. Was zu untersuchen wĂ€re.
Achtung: Das ist aktueller Industriestandard! âWeil's koa USB hamm.â Beim Beobachten von Crash-Tests mit mehreren Kameras und Sensoren sorgt ein Lichtblitz mit gemeinsamer Spannungsspitze auf den Dehnmessstreifen-A/D-Wandlern fĂŒr die nachtrĂ€gliche Synchronisierbarkeit aller High-Speed-Kameraaufnahmen mit den Messwerten. Willkommen im letzten Jahrtausend. Wenn die Pistole den Marathonlauf startet.
#define W(x) (BYTE)(x),(BYTE)((x)>>8)
L"string"
im Deskriptor,
muss man die Zeichen dennoch genau abzÀhlen.
sizeof(char) == sizeof(int) == sizeof(wchar_t) == 1
!!
Beim ATmega32U4 kommen Resume-Interrupts stÀndig vorbei, solange USB aktiv ist! Daher ist es bei diesem wichtig, anhÀngige Interrupts zu löschen, bevor es in den Tiefschlaf geht.Da ein Mikrocontroller mit 300 ”A maximaler Stromaufnahme (gemittelt) nicht allzu viel machen kann, ist das fast immer ein ruhender CPU-Taktoszillator und abgeschaltete Peripherie. Ggf. lÀuft nur eine Echtzeituhr weiter. Oder ein gepulster FunkempfÀnger, der auf einen Aufweckbefehl wartet.
Selbstversorgte GerÀte sind ganz besonders dazu geeignet, Remote Wakeup zu generieren. Erlaubt ist dies jedoch nur bei vorhandenem UBUS.
Ein PC kann jedoch so konfiguriert sein (je nachdem was das BIOS kann), dass jegliches Anstecken eines USB-GerĂ€tes (Ăbergang von SE0 nach J) zum Aufwecken fĂŒhrt. Da ist mir aber kein Exemplar bekannt.
Ein Kabel mit A-Stecker und A-Buchse, das zu einem USB-GerÀt mitgeliefert wurde, ist nur zur Verwendung mit genau diesem GerÀt bestimmt.
Möchte man das angewachsene, superkurze und dĂŒnne Kabel eines Hi-Speed-USB-Hubs verlĂ€ngern, nimmt man dafĂŒr am besten geschirmtes CAT5+-Patchkabel und benutzt:
Ist das Kabel ungeschirmt, teilt man UBUS und Masse auf je 3 Adern auf. Damit ist der Spannungsabfall höher aber immer noch ertrÀglich.