Hallo,
Ich versuche gerade den USB von einem AVR32DU14 in Betrieb zu nehmen. Es soll ein einfacher USB zu Seriell Wandler werden. Dazu habe ich mir eine kleine Platine gemacht. Der Controller ist 5V Bus powered. Die 5V werden ueber einen TPS2041C gefuehrt um die Slewrate am VDD pin zu begrenzen.
Die Hardware ist Messtechnisch gesehen ok. VUSB liegt auf 3.3V und die Ruhepegel von DP (1) und DM (0) sind auch ok. Im 1ms Intervall kommt auch was auf DP und DM. Die Signale sehen besser aus als auf einem anderen USB zu Seriell Wandler mit einem (Fake)CH341.
Das Problem ist aber, dass das Geraet vom PC nicht gefunden wird. Es sieht so aus, als ob der AVR nicht antwortet. Auf dem Oszi sieht man immer nur Frames im Abstand von 1ms. Mit dem CH341 sieht man auch Mal eine Antwort. Vom AVR kommt nichts.
Im Anhang ist die Software als MPLABX 6.30 Project. Es ist eine abgespeckte und an den AVR32DU14 angepasste Version des Beispiels von Microchip (avr64du32-cnano-usb-cdc-to-usart-bridge-mplab-mcc) zu finden auf github. Die angehaengte main.c ist das Orginal aus dem Microchip Beispiel.
Das Beispiel ist fuer den AVR64DU32 Curiosity Nano. Da der nicht Bus powered ist, habe ich alles rausgeschmissen was mit der Erkennung der USB-Versorgungsspannung zusammenhaengt.
Die Fehlermeldung in dmesg ist: device descriptor read/64, error -110
Im Netz findet man dazu, dass es wohl was mit dem Stromverbrauch zu tun hat. Aber auch dass die Meldung ziemlich unspezifisch ist, und alles moegliche sein kann. Der Stromverbrauch jedenfalls kann es nicht sein, ich habe 5mA gemessen.
Sollte nicht der integrierte USB-Controller automatisch mit dem device descriptor antworten? Welchen Grund kann es geben, dass er das nicht macht?
Von dem Treiber fuer den AVR gibt es jedenfalls keine Fehlermeldung. Wenn da was waere sollte die LED blinken, sie ist aber permanent an.
Das Microchip Beispiel ist auch unvollstaendig. Ich habe nirgends was gefunden um die serielle Schnittstelle zu konfigurieren. Im USB Stack ist zwar was dafuer vorgesehen, es wird aber nicht genutzt.
Vielleicht hat ja jemand schon Mal was mit dem AVRDU gemacht und kann mir da weiterhelfen. Vielleicht habe ich ja auch zuviel aus der main.c geloescht.
Viele Gruesse
