michi schrieb:
> am liebsten wäre mir eine wo nur eine usb.h eine usb.c und eine main
> code gibt wo "nur" die einzelen register geschaltet werden und zwei
> funktionen gibt wie zb. zeichen schicken und zeichen holen.
So einfach ist USB leider nicht.
Praktisch ist es so, dass man die komplette Funktionalität eines
USB-Devices bereits fehlerfrei am Laufen haben muss, damit man nur
erst einmal hinter die sogenannte Enumeration seitens des Hosts
kommt. Dieser Prozess fragt vom Device allerlei sogenannte
Descriptoren ab um herauszufinden, um was für eine Art Device es
sich handelt. Für ein CDC schließt das auch solche Dinge ein, wie
das Aufteilen eines Transfers von mehr als 64 Bytes in zwei Pakete,
weil einer der Descriptoren zwangsweise so groß ist, dass er nicht
in 64 Byte hineinpasst.
Erst, nachdem das alles gelaufen ist, akzeptiert der Host das Device,
und dann kann man mit der eigentlichen Datenübertragung beginnen. Die
Routinen dafür sind jedoch zu diesem Zeitpunkt bereits alle da, denn
die braucht man schon zum Übertragen der Descriptoren selbst.
Ich habe seinerzeit mal versucht, ein minimales Beispiel für ein CDC
zu schreiben, das ohne vielfälte Abstraktionsschichten arbeitet. Das
kannst du im Rahmen des µracoli-Projekts finden. Dieses Projekt ist
zwar eigentlich primär für die Ansteuerung der Atmel-Transceiver für
IEEE 802.15.4 gedacht, aber die USB-Funktionalität solltest du wohl
auch so benutzen können.