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