Hallo zusammen,
ich versuche eine USB-Verbindung von meinem SAM4S(Cortex-m4) zum PC
aufzubauen. Hierzu möchte ich Putty verwenden, in dem ich den
entsprechenden COM-Port eintrage (win7 müsste dann doch das serielle
Protokoll in ein USB-Protokoll umwandeln).
Jedoch wird der Client nicht erkannt.
Da der Aufbau des USB recht kompliziert ist wollte ich mal fragen ob und
was ich falsch gemacht habe bzw, was noch fehlt.
Allgemein: Der UDP(USB Device Port) braucht 2 Clocks eine 12 MHZ Clock
und eine Master Clock.
Mainclock wird über PLLa auf 120 MHZ gesetzt
UDP Clock wird über PLLb erst auf 48MHZ gesetzt und dann zu 12mHZ
geteilt
Die PIO lines sind Standard mäßig auf USB eingestellt
1 | // enbale Clock USB
|
2 | PMC->PMC_PCER1 = PMC_PCER1_PID34; // enable USB
|
3 |
|
4 | PMC->PMC_WPMR = PMC_WPMR_WPKEY_PASSWD; // disable write protection
|
5 | // enable USB im Powemanagment
|
6 | //enable USB_CLOCK select PCK0
|
7 | PMC->PMC_SCER = PMC_SCER_UDP ;//| PMC_SCER_PCK0;
|
8 | // enable/select 12 mHZ Quarz
|
9 | PMC->CKGR_MOR = CKGR_MOR_MOSCSEL | CKGR_MOR_MOSCXTEN | CKGR_MOR_KEY_PASSWD ;
|
10 | // enable PLLA teiler(1-255) muliplizierer 7(-62) + 1
|
11 | PMC->CKGR_PLLAR = CKGR_PLLAR_DIVA(2)|CKGR_PLLAR_ONE| CKGR_PLLAR_MULA(7); // 12/2*8 = 48mHZ USB // auswahl dirket über den Quarz
|
12 | PMC->CKGR_PLLBR = CKGR_PLLBR_DIVB(2)|CKGR_PLLAR_ONE| CKGR_PLLAR_MULA(19); // 12/2*20 = 120mHZ für main Clock
|
13 | // select CLOCK select PLLB für Mainclock
|
14 | PMC->PMC_MCKR = PMC_MCKR_CSS_PLLB_CLK ; // 120mhz
|
15 | // select für PCK PPLA /4 48/4 = 12
|
16 | PMC->PMC_PCK[0] = PMC_PCK_CSS_PLLA_CLK | PMC_PCK_PRES_CLK_4; // select PSK0 mit 12hmz
|
17 |
|
18 |
|
19 | // USB config
|
20 | UDP->UDP_FADDR = UDP_FADDR_FEN; // enable Funktion
|
Datenblatt :
http://www.atmel.com/Images/Atmel-11100-32-bit%20Cortex-M4-Microcontroller-SAM4S_Datasheet.pdf
Clock Einstellungen ab Seite: 528
USB Einstellungen ab Seite: 1027
würde mich riesig freuen, wenn ich Ideen oder noch besser Fehler
genannt bekomme.
Danke
basti
[Edit]: Code schöner Formatiert