Hallo,
ich versuche gerade seit Stunden Peter Fleury's stk500v2 Bootloader auf
meinen AT90CAN32 zu bringen.
Ich habe den Bootloader dem Chip entsprechend abgeändert (s.u) und kann
ihn auch in die Bootloader-section vom Chip flashen (mit einem
usbasp-programmer).
Wenn ich jedoch über den STK500-Bootloader eine hex-Datei übertrage,
meckert avrdude:
1 | verification error, first mismatch at byte 0x0000
|
2 | 0x0c != 0x8f
|
Wenn ich danach den Inhalt des Chips mit dem usbasp-Programmer auslese,
enthält die hex-datei nur den Bootloader (ca. 1200 bytes).
Es scheint also so als würde der Bootloader überhaupt nichts schreiben.
Ich habe das Programm folgendermaßen angepasst:
Makefile:
1 | MCU = at90can32
|
2 | F_CPU = 16000000
|
3 | BOOTLOADER_ADDRESS = 7C00
|
main.c
1 | #define REMOVE_BOOTLOADER_LED
|
2 | #define ENABLE_LEAVE_BOOTLADER
|
3 | #define USE_USART1
|
4 | #define BAUDRATE 115200
|
5 | #define UART_BAUDRATE_DOUBLE_SPEED 1
|
6 | #define BOOTSIZE 512
|
Außerdem habe ich noch die Signatur des Chips eingefügt und das erste
if, in dem normalerweise der PROG_PIN abgefragt wird, "überbrückt" (also
if(1) { ... } ).
Wenn ich das so kompiliere, kommt der Fehler:1 | illegal opcode elpm for mcu at90can32
|
Um diesen Fehler zu umgehen füge ich noch nach den includes
ein, damit pgm_read_word_near statt pgm_read_word_far verwendet wird.
Danach mache ich folgendes:
1) Bootloader kompilieren
2) Chip löschen (per usbasp)
3) Bootloader flashen (per usbasp)
4) Lockbits auf 0x0F setzen (per usbasp)
5) Testprogramm flashen (per stk500v2boot) -> verification error
6) Chip lesen (per usbasp) -> Leer, bis auf den Bootloader
Meine Fuses sind folgendermaßen eingestellt:
Keine Brown-Out detection
JTAG enabled
SPI enabled
Boot Flash size = 512 words
Boot Reset vector enabled
Ext. Crystal 8-16MHz 1K CK + 65ms (16MHz sind bestückt)
Ich bin für alle Vorschläge dankbar :-)
Bei Bedarf kann ich auch Sources und Makefiles posten.