Forum: Compiler & IDEs V-USB-Gerät wird nicht erkannt


von Heinrich M. (Gast)


Lesenswert?

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

von Ronny (Gast)


Lesenswert?

> 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?

von Heinrich M. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von krishna (Gast)


Lesenswert?

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.

von Thorstsen (Gast)


Lesenswert?

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
 -

von Sigint 112 (sigint)


Lesenswert?

@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

von Heinrich M. (Gast)


Lesenswert?

@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

von Christian R. (supachris)


Lesenswert?

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....

von gast (Gast)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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....

von Heinrich M. (Gast)


Lesenswert?

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

von Potter S. (potter68)


Lesenswert?

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

von Potter S. (potter68)


Lesenswert?

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

von Juergen B. (jbeisert)


Lesenswert?

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

von Heinrich M. (Gast)


Lesenswert?

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

von Juergen B. (jbeisert)


Lesenswert?

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
Noch kein Account? Hier anmelden.