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