Forum: Mikrocontroller und Digitale Elektronik AVR32 UC3B USB Verbindung


von M. V. (bmtil)


Lesenswert?

Hiho,
nach wochenlangem Probieren habe ich es mit einer großen Unterstuetzung 
geschafft die LUFA USB Library auf mein selbst entworfenes Board mit dem 
AVR32UC3B1256 Controller zu flashen. Nebenher laeuft dabei auch schon 
das LED-Toggle Programm.

Die LUFA USB Library habe ich durch ein im Netz gefundes Beispiel: 
https://github.com/kblomqvist/aery32-plus-lufa einbinden koennen.
Dort wird mithilfe der LUFA Library ein serieller Port mittels USB 
emuliert.

Nun habe ich ein folgendes Problem, wenn ich das Board ueber ein USB 
Kabel mit dem Rechner verbinde, dann erkennt der Rechner nicht, dass ein 
neues USB Geraet angeschlossen ist. Im Device Manager kann ich nichtmal 
die Com-Ports konfigurieren, diese werden mir schlicht nicht angezeigt, 
so als ob keine da waeren.

Mit freundlichen Grueßen, bmtil

EDIT: sorry, hab mich verklickt, der Thread gehoert natuerlich in das 
AVR32 Forum, war keine Absicht.

von Pit (Gast)


Lesenswert?

Wenn das Gerät nicht erkannt wird, dann ist etwas an Deiner Firmware 
faul.

von Davis (Gast)


Lesenswert?

Pit schrieb:

> Wenn das Gerät nicht erkannt wird, dann ist etwas an Deiner Firmware
> faul.

Dieser erstklassigen Diagnose schließe ich mich an.

von Pit (Gast)


Lesenswert?

Na dann werde ich das jetzt mal präzisieren:

Deine LEDs mögen ja blinken, aber die USB Enumertion, die zwingend 
notwendig ist, funktioniert eben nicht. D. h. LUFA läuft nicht richtig.

Genaueres ist von hier aus ohne weitere Infos nicht zu sagen.

von M. V. (bmtil)


Lesenswert?

Hm, k. Ich denke mal dass die LUFA nicht laeuft kann richtig sein. Ich 
finde aber nirgends den Fehler nicht. Vllt. funktioniert die ganze Clock 
Geschichte nicht richtig, da USB ja die 48Mhz braucht. Hier sind mein 
Code und meine Einstellungen des Compilers:
1
#include <avr32/io.h> 
2
 #include <avr32/uc3b1256.h> 
3
 #include "Config/LUFAConfig.h" 
4
 #include "LUFA/Common/Common.h" 
5
 #include "LUFA/Drivers/USB/USB.h" 
6
 #include "LUFA/Platform/Platform.h" 
7
 #include "Descriptors.h" 
8
9
 #include "LUFA/Platform/UC3/ClockManagement.h" 
10
 #include "LUFA/Platform/UC3/InterruptManagement.h" 
11
 // #include <string.h> 
12
 // #include <stdio.h> 
13
14
15
 #define GPIO_LED AVR32_PIN_PA10 
16
 #define PORT GPIO_LED/32 
17
 #define PIN GPIO_LED%32 
18
19
20
 USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface = 
21
 { 
22
    { /* Config */ 
23
       0, /* ControlInterfaceNumber */ 
24
       { /* DataINEndpoint */ 
25
          CDC_TX_EPADDR, /* Address */ 
26
          CPU_TO_LE16(CDC_TXRX_EPSIZE), /* Size */ 
27
          EP_TYPE_CONTROL, /* Endpoint type */ 
28
          1, /* Banks */ 
29
       }, 
30
       { /* DataOUTEndpoint */ 
31
          CDC_RX_EPADDR, /* Address */ 
32
          CPU_TO_LE16(CDC_TXRX_EPSIZE), /* Size */ 
33
          EP_TYPE_CONTROL, /* Endpoint type */ 
34
          1, /* Banks */ 
35
       }, 
36
       { /* NotificationEndpoint */ 
37
          CDC_NOTIFICATION_EPADDR, /* Address */ 
38
          CPU_TO_LE16(CDC_NOTIFICATION_EPSIZE), /* Size */ 
39
          EP_TYPE_CONTROL, /* Endpoint type */ 
40
          1, /* Banks */ 
41
       } 
42
    } 
43
 }; 
44
45
 /** Event handler for the library USB Connection event. */ 
46
 void EVENT_USB_Device_Connect(void) 
47
 { 
48
 } 
49
50
 /** Event handler for the library USB Disconnection event. */ 
51
 void EVENT_USB_Device_Disconnect(void) 
52
 { 
53
 } 
54
55
 /** Event handler for the library USB Control Request reception event. */ 
56
 void EVENT_USB_Device_ControlRequest(void) 
57
 { 
58
    CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); 
59
 } 
60
61
 /** Event handler for the library USB Configuration Changed event. */ 
62
 void EVENT_USB_Device_ConfigurationChanged(void) 
63
 { 
64
    CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); 
65
 } 
66
67
 int main(void) 
68
 { 
69
        
70
    AVR32_PM.OSCCTRL0.mode = 0;    //extern CLock 16Mhz 
71
     
72
    AVR32_PM.OSCCTRL0.startup = 6 ; // 142 ms startup 
73
     
74
    AVR32_PM.MCCTRL.osc0en = 1;  //OSC0 enable 
75
     
76
    while(!(AVR32_PM.POSCSR.osc0rdy)); // 
77
     
78
    AVR32_PM.MCCTRL.mcsel=1; //OSC0 main clock 
79
     
80
    //OSC0 for PLL0 
81
    AVR32CLK_StartPLL(0, CLOCK_SRC_OSC0, 16000000, 480000000);  //USB Clock 
82
     
83
       /* Register USB isr handler, from LUFA library */ 
84
       INTC_Init(); 
85
       INTC_RegisterGroupHandler(INTC_IRQ_GROUP(AVR32_USBB_IRQ), 1, &USB_GEN_vect); 
86
       GlobalInterruptEnable(); 
87
88
       /* Initiliaze the USB, LUFA magic */ 
89
       USB_Init(); 
90
     
91
             for(;;) { 
92
             CDC_Device_SendByte(&VirtualSerial_CDC_Interface, 'H'); 
93
             CDC_Device_SendByte(&VirtualSerial_CDC_Interface, 'e'); 
94
             CDC_Device_SendByte(&VirtualSerial_CDC_Interface, 'l'); 
95
             CDC_Device_SendByte(&VirtualSerial_CDC_Interface, 'l'); 
96
             CDC_Device_SendByte(&VirtualSerial_CDC_Interface, 'o'); 
97
             CDC_Device_SendByte(&VirtualSerial_CDC_Interface, '\n'); 
98
             CDC_Device_SendByte(&VirtualSerial_CDC_Interface, '\r'); 
99
100
             CDC_Device_USBTask(&VirtualSerial_CDC_Interface); 
101
             USB_USBTask(); 
102
          } 
103
104
        return 0; 
105
 }
Die Einstellungen sind nach dem LUFA Tutorial zum importieren der 
Bibliotheken gemacht: 
http://www.fourwalledcubicle.com/files/LUFA/Doc/120730/html/_page__exporting_library.html
ARCH=ARCH_UC3
F_CPU=16000000
F_USB=48000000
BOARD=BOARD_NONE
USE_LUFA_CONFIG_HEADER

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.