Forum: Mikrocontroller und Digitale Elektronik Atmega328 (nicht P) Arduino-Bootloader erstellen - Fehlermeldung


von Daniel U. (daniel_22)


Lesenswert?

Hallo allerseits,

ich möchte einen Arduino-Bootloader für den Atmega328 (nicht Atmega328P) 
zum Laufen bringen. Gebrannt werden soll er über einen Arduino Uno als 
ISP. Der Takt soll 8MHz intern sein. Ich habe einen entsprechend 
bestehenden und funktionierenden Bootloader genommen und den Chip in 
allen Dateien umbenannt, damit nicht die Adresse des Atemga328P sondern 
die des Atmega328 genommen wird.

Die Datei-Hierarchie des Bootloader-Ordners:
1
>avr
2
 -boards.txt
3
 >bootloaders
4
  -ATmegaBOOT_168.c
5
  -ATmegaBOOT_168_atmega328_8MHz.hex
6
  -Makefile

Die Änderungen:

boards.txt:
1
atmega328_2.build.mcu=atmega328


Makefile:
1
atmega328_8MHz: TARGET = atmega328_8MHz
2
atmega328_8MHz: MCU_TARGET = atmega328
3
atmega328_8MHz: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=38400
4
atmega328_8MHz: AVR_FREQ = 8000000L
5
atmega328_8MHz: LDSECTION  = --section-start=.text=0x7800
6
atmega328_8MHz: $(PROGRAM)_atmega328_8MHz.hex

Das "p" wurde einfach überall gelöscht. Der Rest ist gleich zu dem 
funktionierenden Bootloader. Anschließend wurde die HEX-Datei mit dem 
Makefile erstellt.

Nun zum Ergebnis: Beim nicht abgeänderten Bootloader kommt eine 
Fehlermeldung dass die Signatur falsch ist (logischerweise). Bei meinem 
kommt diese Meldung nicht mehr, also gehe ich davon aus dass der Chip 
erfolgreich erkannt wird und die Verbindungen zu ihm keinen 
Wackelkontakt o.Ä. haben. Dafür kommt immer folgende eher allgemeine 
Fehlermeldung:
1
 ***failed;  
2
avrdude: verification error, first mismatch at byte 0x0000
3
         0x07 != 0xff
4
avrdude: verification error; content mismatch
5
Fehler beim Brennen des Bootloaders.

Was muss ich im Bootloader noch abwandeln oder gibt es einen anderen 
Grund warum das nicht funktionieren will? Ich habe die HEX-Datei auch 
schon mit dem Standart-Makefile der IDE (dort ist eine Option für 
"atmega328_notp" vorhanden) erstellt mit gleichem Ergebnis.

Gruß
Daniel

: Bearbeitet durch User
von Thomas W. (diddl)


Lesenswert?

Daniel U. schrieb:
> Was muss ich im Bootloader noch abwandeln oder gibt es einen anderen
> Grund warum das nicht funktionieren will? Ich habe die HEX-Datei auch
> schon mit dem Standart-Makefile der IDE (dort ist eine Option für
> "atmega328_notp" vorhanden) erstellt mit gleichem Ergebnis.

Ich kenne den Code des bootloader nicht.

Aber es wäre logisch, wenn er die Signatur prüfen würde.
Ich würde es auch so designen

von Thomas E. (thomase)


Lesenswert?

Thomas W. schrieb:
> Aber es wäre logisch, wenn er die Signatur prüfen würde.
Warum soll er das tun?

> Ich würde es auch so designen
Würdest du nicht. Machst du bei anderen Programmen doch auch  nicht.

Ein Bootloader ist ein Programm wie jedes andere auch. Wo soll denn 
dieses Hexfile bzw. der daraus extrahierte Binärcode irgendetwas prüfen? 
Das macht das Brennprogramm. Also in diesem Fall Avrdude und es obliegt 
der Sorgfalt des Programmierers bzw. des Operators, dieses mit den 
richtigen Parametern zu benutzen.

In einer professionellen Produktionsumgebung wird ein elf-File erstellt. 
In dem stehen dann neben der Signatur auch die Fuses und die Lockbits 
drin. Mit den Daten wird dann vor dem Brennvorgang geprüft, ob der Code 
und der Controller zusammenpassen. Das kann dann auch jemand bedienen, 
den man 10 Minuten angelernt hat.

Daniel U. schrieb:
> avrdude: verification error, first mismatch at byte 0x0000
>          0x07 != 0xff

Das Verify schlägt fehl. Ich kenne die Reihenfolge der Angabe jetzt 
nicht. Aber ich würde es so interpretieren, daß er 0x07 liest aber 0xFF 
erwartet. Was auch richtig ist, denn das Flash muß bis zum Beginn des 
Bootloaders gelöscht sein. Also 0xFF enthalten. Offenbar ist das nicht 
der Fall.

Wird der Flashspeicher vor dem Brennen gelöscht?

: Bearbeitet durch User
von Daniel U. (daniel_22)


Lesenswert?

Das Problem scheint im avrdude.conf File zu liegen, das unter den Tools 
des Arduino-Hauptordners zu finden ist. Google hat nach langer Suche 
einen mehr oder weniger guten Bootloader für den Atmega328 ausgespuckt. 
In diesem Ordner war eine neue conf-Datei. Wenn ich die vorhandene durch 
diese ersetze dann funktioniert auch mein Bootloader. Keine Ahnung was 
in der Datei anders ist als in der alten.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Daniel U. schrieb:
> Google hat nach langer Suche
> einen mehr oder weniger guten Bootloader für den Atmega328 ausgespuckt

warum übersetzt du nicht optiboot für den 328?

ist deutlich kürzer und spart Platz im flash.

Statt alle nanos mit dem Uno Bootloader zu bestücken habe ich mir lieber 
für den Nano angepasst, auch die Boards.txt, Einträge für old 
Bootloader, neu Bootloader low MEM 30K high MEM 32K, low SPEED 57K6, 
high SPEED 115K2 weil Optiboot mit 115k taktet aber das nicht unter wUSB 
und an jeder Schnittstelle funktioniert.

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.