Forum: Mikrocontroller und Digitale Elektronik USB ATMEL - device erkannt, schreibt nicht raus


von Alexander P. (alexatmikro)


Lesenswert?

Hallo.
ich experimentiere gerade mit den USB-devices, die bei den AT91xxx mit 
onboard sind (in meinem Fall: AT91SAM7x256).

Ich gehe nach der Application Note 'AT91 USB CDC Driver Implementation' 
vor, habe den code in meine Anwendung übernommen, kompiliert, geflashed.

Das USB-device wird vom kernel gesehen (/var/log/messages):

kernel: [99854.452041] usb 1-2: new full speed USB device using uhci_hcd 
and address 114
kernel: [99854.627426] usb 1-2: configuration #1 chosen from 1 choice
kernel: [99854.631041] usb 1-2: New USB device found, idVendor=03eb, 
idProduct=6119
kernel: [99854.631057] usb 1-2: New USB device strings: Mfr=0, 
Product=1, SerialNumber=0
kernel: [99854.631065] usb 1-2: Product: AT91USBSerial

eigentlich sollte ich dann einen virtuellen COM pert (/dev/ttyUSBx) 
sehen. Ist aber nicht so.
Ein händisches
>modprobe usbserial vendor=0x03EB product=0x6119
wie von ATMEL empfohlen ändert daran auch nichts.

>lsmod | grep -i usbserial zeigt:
usbserial              26472  2 ftdi_sio,pl2303

pl2303 ist mein 'hardware' usb-serial adapter.

Wenn ich den einstecke sieht die meldung so aus:

kernel: [102659.716045] usb 2-1: new full speed USB device using 
uhci_hcd and address 45
kernel: [102659.870796] usb 2-1: configuration #1 chosen from 1 choice
kernel: [102659.874804] pl2303 2-1:1.0: pl2303 converter detected
kernel: [102659.891140] usb 2-1: pl2303 converter now attached to 
ttyUSB0
kernel: [102659.891524] usb 2-1: New USB device found, idVendor=067b, 
idProduct=2303
kernel: [102659.891533] usb 2-1: New USB device strings: Mfr=0, 
Product=0, SerialNumber=0

Interessant ist die 3. Zeile 'now attached to ttyUSB0'. Das fehlt beim 
AT91. Was mache ich verkehrt?


Alex

von Alexander P. (alexatmikro)


Lesenswert?

seitens Mikrocontroller:

der ganze USB-startup code läuft, auch der connect:
1
      //=== Device is not configured
2
      if (USBD_GetState() < USBD_STATE_CONFIGURED){
3
4
  USBD_Connect();
5
  while (USBD_GetState() < USBD_STATE_CONFIGURED);
6
      }

der erste write auf das USBDevice
1
CDCDSerialDriver_Write(usb_dbuff, DATABUFFERSIZE, 0, 0);

kehrt mit USBD_STATUS_SUCCESS zurück.

Alle weiteren write-Versuche melden USBD_STATUS_LOCKED -  das device 
nimmt die ersten Daten an, wird sie dann wohl aber nicht los.

Was stimmt hier nicht?

von Benjamin S. (recycler)


Lesenswert?

Du kannst nicht aktiv schreiben, die Daten muss der USB-Treiber 
anfordern. Und nur dann darfst du was in den Puffer legen :)
Hast du den Beispielcode 1:1 kopiert oder selber was 
zusammenprogrammiert?
Nutzt du die richtigen Endpunkte?

von Alexander P. (alexatmikro)


Lesenswert?

Hallo,
ich habe den Beispielcode im wesentlichen übernommen (das ist eine 
Beispielanwendung, welche vom USART liest und auf USB rausschreibt also 
einen serial2USB converter nachbildet).

Ich habe lediglich den USART 'abgehängt'.
Der code läuft so, daß wenn Daten vom USART gelesen wurden (in Puffer), 
diese Daten dann über
1
CDCDSerialDriver_Write(usb_dbuff, DATABUFFERSIZE, 0, 0);
per USB an den PC überträgt.

Insofern verstehe ich
>Du kannst nicht aktiv schreiben, die Daten muss der USB-Treiber
>anfordern.

nicht.

Soweit ich das verstanden (und bei anderen USB2serial) devices gesehen 
habe müßte der AT91USB chip mit dem ATMEL code PC-seitig vom Treiber 
USBserial erkannt und als /dev/ttyUSBx angebunden werden. Und das 
passiert eben nicht obwohl im ATMEL howto so beschrieben.

Gruß
Alex

von Alexander P. (alexatmikro)


Lesenswert?


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.