Hallo! Ich möchte in die USB-Welt einsteigen. Darum habe ich mir von V-USB das EasyLogger-Beispiel gedownloadet und es so angepasst das nur noch jede Sekunde 'Hi' geschrieben wird. Das Gerät soll sich als HID-Keyboard ausgeben. Leider passiert ziemlich wenig wenn ich das Modul mit meinem PC verbinde. Der Hub blinkt zwar kurz dann ist aber wieder Ruhe und mit 'lsusb' sehe ich auch keine Geräte. Ich hab mal alle meine Dateien auf http://easytouch. site11.com/ gestellt. Die restlichen V-USB-Dateien hab ich mal weggelassen, da diese ja eigentlich nicht geändert werden müssen. Hat jemand eine Idee wie ich das Modul zum Laufen kriege? Gruss Heinrich PS: Controller ist ein Attiny2313 @ 16Mhz-Quarz
> Ich möchte in die USB-Welt einsteigen. Darum habe ich mir von V-USB das > EasyLogger-Beispiel gedownloadet und es so angepasst das nur noch jede > Sekunde 'Hi' geschrieben wird. Das Gerät soll sich als HID-Keyboard > ausgeben. Zum Einstieg in die USB-Welt würde ich dir zunächst mal ein Buch über USB empfehlen. Das Protokoll ist nähmlich nix was man mal so eben aus einem Beispiel-Code versteht. Abgesehen davon würde ich lieber einen Controller mit Hardware-USB nehmen. Diese Software-USB Geschichten sind nicht sonderlich stabil, mal abgesehen davon das der Controller ganz schön ausgelastet ist. > Leider passiert ziemlich wenig wenn ich das Modul mit meinem PC > verbinde. > Der Hub blinkt zwar kurz dann ist aber wieder Ruhe und mit 'lsusb' sehe >ich auch keine Geräte. Was passiert den, wenn du den Beispiel-Code UNVERÄNDERT benutzt? Vielleicht hast du beim ändern einen Fehler eingebaut... > Ich hab mal alle meine Dateien auf http://easytouch. site11.com/ > gestellt. Die restlichen V-USB-Dateien hab ich mal weggelassen, da diese > ja eigentlich nicht geändert werden müssen. Falls wirklich jemand Muse hat sich das alles anzuschauen wird er sicher nicht auf irgendeine URL gehen. Zippe doch das Projektverzeichnis und hängs an deinen Post hier an. > Hat jemand eine Idee wie ich das Modul zum Laufen kriege? Naja, ohne Schaltplan schwierig. Hat der Controller Strom? Läuft der Controller den an? Die Kristall-Kugel ist heut leider in der Werkstatt. > PS: Controller ist ein Attiny2313 @ 16Mhz-Quarz Das Beispiel ist, wenn ich mich recht erinner für einen ATtiny85. Abgesehen davon sollte der Controller nicht mit 12MHz QUarz getaktet sein?
Hallo Ronny hab das ganze mal als ZIP gepackt. Schaltplan ist auch drin. Ich hatte mir durch das Abändern erhofft, den Sourcecode weiter zu vereinfachen. Ich hoffe dabei ist mir kein Fehler unterlaufen.
Versuch erstmal mit der Original-Version. Wenn die funktioniert, liegts an Deinen Änderungen, wenn nicht, an der Hardware. Derzeit ist ja nichtmal klar, was denn nun das Problem ist.
Hallo Heinrich, Du hast es nicht geschrieben, deswegen muss ich nachfragen: - Hast Du die Fuses richtig gesetzt? - Läuft Dein Controller tatsächlich mit 16 MHz? Schreibe ein minimal Programm, lasse die LED blinken und schließe dann per OSZI oder bekannter Delay zurück auf die Tatsächliche Taktfrequenz - Hast Du eine Speed Variante des Controllers erwischt, der auch 16 MHz kann? - USB Stecker Pin Belegung kontrolliert? Ich habe in meinem Programm zuerst die Pins konfiguriert und dann USB initialisiert. Ich benutze die gleichen Pins für USB+ / USB-, aber andere Verwendung der restlichen pins. DDRD =(unsigned char) ~(_BV(PIN2) | _BV(PIN3) | _BV(PIN6) | _BV(PIN4)); DDRB = (unsigned char) 0xFF; PORTD = (unsigned char) _BV(PIN4) | _BV(PIN6) | _BV(PIN0); PORTB = (unsigned char) _BV(0) | _BV(2); Das der HUB Port kurz blinkt kann mehrere Ursachen haben: - Strombegrenzung angegangen und hat den Port abgeschaltet -- kontrollilere mit einem Minimalen Programm ob die Schaltung überhaupt rennt (s.o.) - Der Controller läuft nicht und der Hub hat nur über den R7 mitbekommen, dass da jetzt was kommen könnte. - die Enumerierung ist schief gegangenm, dann steht im schlimmsten fall auch nichts in lsusb Apropos, Du hast auch keine Platine dabei -- wie sehen denn die Kabel zwischen MCU und HUB aus? Saubere Platine und dann ein USB-Kabel oder ein Draht verhau? Du solltest die Gesamte Kette möglicher Fehler kontrollieren (kein Anspruch auf Vollständigkeit): - Stromversorgung - Tatsächlicher Takt - Kontaktierung, vertauschungen? Kurzschlüsse? Im stromlosen Zustand ohne IC sollten USB- und USB+ keine Verbindung haben - problem bei der Enumerierung (was steht in dmesg?) - Da Deine HW tatsächlich immun gegen fehl Konfiguration ist, würde ich es zunächst mit einer unmodifizierten FW probieren -- Binary& Fuses richtig schreiben Grüße, Thorsten -
@Heinrich: Versuch mal den EasyLogger direkt am Mainboard USB-Port anzuschliessen. Ich hatte bei meinem Logger auch immer Probleme, wenn ich einen USB-Hub dazwischen hatte. Keine Ahnung, woran das liegen kann. Gruß, SIGINT
@krishna Leider kann ich nicht den Original-Code nehmen da dieser grösser als 2K ist. Ich hab darum die ADC-Routinen rausgenommen und komme dann auf etwa 96% der 2K des Tiny2313. @Thorsten Fuses sind richtig gesetzt, hab ich nochmals kontrolliert. Das der Tiny mit 16Mhz läuft, sollte laut Datenblatt kein Problem sein. Er wird ja über USB mit 5V versorgt. Ich hab den Aufbau einmal auf einem Steckbrett und einmal auf einer Leiterplatte (Draht nicht gedruckt). Leider bei beiden der gleiche Fehler. Interressant ist eventuell noch die dmesg-Ausgabe:
1 | [ 223.289142] usb 3-1.3: new low speed USB device using ehci_hcd and address 3 |
2 | [ 223.377125] usb 3-1.3: device descriptor read/64, error -32 |
3 | [ 223.569096] usb 3-1.3: device descriptor read/64, error -32 |
4 | [ 223.761051] usb 3-1.3: new low speed USB device using ehci_hcd and address 4 |
5 | [ 223.849046] usb 3-1.3: device descriptor read/64, error -32 |
6 | [ 224.041146] usb 3-1.3: device descriptor read/64, error -32 |
7 | [ 224.232976] usb 3-1.3: new low speed USB device using ehci_hcd and address 5 |
8 | [ 224.640763] usb 3-1.3: device not accepting address 5, error -32 |
9 | [ 224.728899] usb 3-1.3: new low speed USB device using ehci_hcd and address 6 |
10 | [ 225.136668] usb 3-1.3: device not accepting address 6, error -32 |
Irgendwie versucht der Controller doch sich anzumelden. Original-Firmware kann ich wie oben bereits erklärt leider nicht verwenden. @SIGINT Hab das Modul mal direkt verbunden. Leider ändert sich nur die dmesg-Ausgabe von "error -32" auf "error -62". Auffällig ist noch das die LED dabei ca 3 Sek leuchtet. Das macht sie bei Verbindung über den Hub nicht. @all Liegt evtl ein Problem mit der Enumeration vor? Grüsse Heinrich
Heinrich M. schrieb: > @Thorsten > Fuses sind richtig gesetzt, hab ich nochmals kontrolliert. Das der Tiny > mit 16Mhz läuft, sollte laut Datenblatt kein Problem sein. Er wird ja > über USB mit 5V versorgt. Diese Soft-USB Implementierungen laufen doch alle mit 12MHz, weil sonst das USB Timing gar nicht mehr stimmt. Ich denke, daran könnte es schon liegen....
schau mal in die assambler datei, da drin ist bestimmt das timing für 12MHz angegeben. also entweder deine µC/Quarz auf 12MHz umstellen oder die assambler Datei und alle defines austauschen
Naja, einfach austauschen geht nicht. Da sind ja immer Operationen drin, die genau einen Takt lang sind, um das Timing hinzumurksen. Wenn man 16MHz hat, müssten die 1,5 Takte dauern....24MHz würde ja noch gehen, da müsste man an den Stellen ein NOP einfügen....
Laut Website ist ein Betrieb mit 12, 15, 16Mhz Quarz möglich. F_CPU hab ich auch korrekt definiert. V-USB linkt dann automatisch die Datei "usbdrvasm16.inc" dazu. Sie enthält alle Takt spezifischen Dinge. Am Quarz kanns also nicht liegen... Hat jemand sonst noch eine Idee? Grüsse Heinrich
Hi, was ist denn der Error -32? Man siehst, dass der Host das Gerät immer wieder mit einer anderen Adresse amelden will. Er stellt zwar fest, dass etwas an den Bus angeschlossen wurde, aber das Gerät wird nicht erkannt. Für mich sieht das so aus, als ob da keinerlei Daten von Deinem Gerät gesendet oder empfangen werden. Warum? Kann man so nicht sagen. Der Host sendet während der Enumeration immer zuerst das sog. Setup-Packet. Das sind genau 8 Byte. Lass dir die mal irgendwie anzeigen. Dann kann man mehr sagen. Gruß Potter68
Hmm auf den 'zweiten Blick' sieht man, dass sehr wohl Daten versand werden. Aber der Geräte-Deskriptor stimmt nicht. Hast Du den editiert? Lass Dir die Daten ausgeben, die Du versendest/empfängst. Sonst wirds schwierig mit dem Debuggen. Wie kann man eigentlich seine Posts nachträglich editieren? Gruß Potter68
Ich arbeite nun schon seit längeren mit der V-USB-Bibliothek und das funktioniert eigentlich prima. Aber eben nur, wenn man die Hardware richtig im Griff hat. Wenn Dein Host versucht das angeschlossene Gerät zu "enumerieren", scheint das elektrische erst mal zu funktionieren. Er versucht ein "Low Speed Device" zu konfigurieren, somit ist auch der Pullup an der richtigen Leitung. Kommen beide USB-Signale sauber auf Deiner Seite an? D+ und D- dort nicht verwechselt? Wird ein IRQ ausgelöst, wenn der Host Dein Gerät anspricht? Sind die richtigen Port-Bits in der Konfigurationsdatei definiert? Sind die USB-Signalleitungen bei 3,3V geblockt? (Du versorgst mit 5V, dass beisst sich sonst mit der Spec). Mehr fällt mir erst mal nicht ein. jbe
Hallo zusammen, Ich muss mich bei euch ganz fest entschuldigen! Ich habe doch tatsächlich auf dem Steckbrett D+ und D- vertauscht. Die Kabel, welche vom USB-Stecker kamen, stimmten, die die zum Controller gingen auch. Jedoch die zwischen dem Pullup und den 68Ohm Widerständen nicht. Sorry! Es tut mir leid um eure verlorene Zeit! Ich hoffe ich kann mich hier jedoch doch noch blicken lassen... Grüsse Heinrich
Wenn es nun tut, ist schon viel gewonnen. Viel Spaß beim V-USB-Programmieren. Seufz, wenn doch bloß alle Probleme so einfach zu lösen wären... jbe
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.