Hallo,
versuche seit ein paar Tage einen Atmega8u2 am USB zum laufen zu
bekommen.
Die Schaltung ist Standard. µC an 16Mhz Quartz. Zwischen USB und µC sind
zwei 22Ohm Widerstände.
Als Treiber wollte ich LUFA verwenden, da ich mit dem AVR Studio absolut
nicht klar komme. Ich habe nun den LUFA DFU Bootloader so konfiguriert,
dass er mit einem Atmega8u2 laufen sollte:
1 | MCU = atmega8u2
|
2 | ARCH = AVR8
|
3 | BOARD = USER
|
4 | F_CPU = 16000000
|
5 | F_USB = $(F_CPU)
|
6 | OPTIMIZATION = s
|
7 | TARGET = BootloaderDFU
|
8 | SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB)
|
9 | LUFA_PATH = ../../LUFA
|
10 | CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
|
11 | LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
|
12 |
|
13 | # Flash size and bootloader section sizes of the target, in KB. These must
|
14 | # match the target's total FLASH size and the bootloader size set in the
|
15 | # device's fuses.
|
16 | FLASH_SIZE_KB = 8
|
17 | BOOT_SECTION_SIZE_KB = 4
|
Es kompiliert auch wunderbar, nur wenn ich nun den Code auf den Atmega
lade, passiert gar nichts. Auch keine Enumeration.
Mein erster Gedanke war nun, dass der Takt nicht stimmt.
Unter den fuses habe ich EXTLOFXTAL im Avrstudio (das einzigste mit
XTAL).
wenn ich nun diesen Code ablaufen lasse:
1 | asm volatile("nop"); //1clk
|
2 | PORTC |= (1<<4); //2clk
|
3 | asm volatile("nop"); //1clk
|
4 | PORTC &= ~(1<<4); //2clk + rjmp 2clk = 8clk*2MHz = 16MHz
|
dann sehe ich im oszi ein 2MHz Signal. Also läuft er mit den 16Mhz.
Die USB Buchse habe ich auch schon überprüft, ob sie richtig
angeschlossen ist.
Das einzige Merkwürdige sind 4Volt, die ich am USB_cap Messe, der für
den Internen Stepdown-Wandler benötigt wird. Das sollten doch 3.3V sein
oder?
Kann mir jemand Tipps geben, wie ich die USB Kommunikation überprüfen
kann? Oszi steht zur Verfügung.
mfg.