Forum: Mikrocontroller und Digitale Elektronik CDC USB Echo Programm für AT91Sam7s


von Matze M. (Firma: Student Informatik) (maze)


Lesenswert?

Hallo,
Ich habe das CDC beispiel aus dem USB Framework so umgestellt das man 
jetzt mit den Terminal von pc aus genau das zurück bekommt was man 
absendet!
1.)
Das Problem ist aber noch, dass ich immer eine feste länge von 10 bytes 
zurückgebe, und ich einfach nicht weiß wie ich herausbekomme wie viele 
zeichnen gesendet wurden (von terminal aus).

der main loop sieht jetzt so aus!
1
    // Main loop
2
    while (1) {
3
      
4
       bStatus = SER_Read(&sSer,pUsbBuffer,USB_BUFFER_SIZE,0,0);
5
6
              if ( pUsbBuffer[0] !=0x00 && bStatus != SER_STATUS_SUCCESS){
7
                        bStatus = SER_Write(&sSer, pUsbBuffer, 10, 0, 0);
8
                 
9
                        //echo complete set buffer back to default state
10
                        clearBuffer(pUsbBuffer,USB_BUFFER_SIZE);
11
                 }
12
    }
2.)
des weiteren verstehe ich nicht wirklich was mir  "bStatus" sagen soll.
Ich dachte das bei einem erfolgreichen Transfer (zb. es wurde etwas 
gelesen) diese gleich "SER_STATUS_SUCCESS" =0x00 sein müsste??
dann wäre die if Bedingung aber falsch und müsste dann heißen
1
 if (bStatus == SER_STATUS_SUCCESS)

und man müsste den Buffer nicht löschen .
Es passiert aber Garnichts, wenn ich es ändere, ausserden kann ich auch 
nicht verstehen warum das feld "pUsbBuffer" static sein muss!!
1
static unsigned char pUsbBuffer[50];

vielleicht hat jemand sowas ähnliches schon mal gemacht und könne mir 
sagen  was ich ihr nicht verstehe???? wäre unheimlich nett

von Potter S. (potter68)


Lesenswert?

Hallo Matze,

eine Möglichkeit, die Datenlänge zu bestimmen ist die, daß Du ganz 
einfach im ersten übertragenen Byte die Datenlänge sendest.

Der Buffer muss static oder global sein, da ansonsten der Speicher nur 
temporär reserviert wird und die Daten deshalb verloren gehen.

Gruß Ralf

von maze (Gast)


Lesenswert?

Danke für die Antwort,
ich habe noch eine variable gefunden die mir sagt wie lang der 
empfangende Datensatz ist in der udp.c aber wie gelesen wird ist mir 
noch nicht ganz klar, wahrscheinlich durch ein Interrupt, weil wenn ich 
die Funktion USB_read() aufrufe sind die Daten immer erst nach (zweiten 
durchlauf) zu sehen in buffer

vielen dank

von Al pacino D. (bigmicro)


Lesenswert?

Hello friends,

Can you send me an example if your usb project?
I compiled USB framework-CDC and flashed it to my micrcocontroller 
(AT91SAM7A3) and it works al fine. I use Hyperterminal to send data via 
Virtual COM to my microcontroller with USB connection. And my 
microcontroller sends it to my pc and with another terminal I can see 
the received data.

But when I try to use those usb framework files in my own project, it 
hangs. When I connect the usb to my pc, I get the following result:

Main CDC Serial
Init()
Attach(1) Connecting ... Hlr Susp
OK
Hlr Res
Hlr EoBRes CfgEpt0
Hlr Res
Hlr EoBRes CfgEpt0
Hlr EoBRes CfgEpt0
Hlr EoBRes CfgEpt0

I've checked everywhere in the sources to find something missing, but 
couldn't find a bug or something.

So if somebody is using IAR EWARM 4.41A with USB for the SAM7 serie. 
Please tell me how you do that. I guess I'm not so experienced like you 
guys, so please help me if you can.

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.