Forum: Mikrocontroller und Digitale Elektronik Binaryfile in AVR-Flash schreiben


von Ingo (Gast)


Lesenswert?

Hallo,

ich möchte gern einen Bootloader basteln, der ein Gerät von einer 
Chipkarte her aus Firmwareupdaten kann. Es handelt sich dabei um 32kB 
Chipkarten. Das Problem ist, dass das Hexfile vom eigentlichen Programm 
nach dem compilieren > 64kB groß ist, daher passt es nicht mehr auf die 
Karte. Jetzt habe ich einen Hex to Binary decoder im www gefunden, der 
mir mein Hexfile auf ~8kB zusammengedampft hat. Leider weiß ich jetzt 
nicht mehr weiter, wie ich diese Daten in den Flash schreiben kann? 
Warauf muss ich achten, bzw. wie fasse ich die Daten zu einer Seite 
zusammen? kann mir jemand helfen?



Ingo

von Ingo (Gast)


Lesenswert?

Also ich sehe auf jeden Fall alle 32 Byte ein CR + LF, ich denke hierbei 
handelt es sich um eine Seite?

von fonsana (Gast)


Lesenswert?

Mit einem Bootloader flasht man normalerweise .bin-Dateien.
.hex sind Text, die muesste der erst wieder uebersetzen.

fonsana

von Ingo (Gast)


Lesenswert?

Oh, ich habe versehentlich eine Hex-to Binary Converter benutzt, der 
mein Programm als Zahl gesehen hat, kann ja so nicht funktionieren...


Woher bekomme ich nun ein Binary (-.bin Dateien), AVR Studio spuckt 
sowas nicht aus.




Ingo

von fonsana (Gast)


Lesenswert?

Ich arbeite selbst nicht damit, aber das sollte mich wundern, da wird es 
eine Einstellmoeglichkeit geben.


fonsana

von Stefan E. (sternst)


Lesenswert?

1
avr-objcopy -I intel -O binary XXX.hex XXX.bin

von Ingo (Gast)


Lesenswert?

Stefan Ernst schrieb:
> avr-objcopy -I intel -O binary XXX.hex XXX.bin
Danke, aber wo füge ich das ein?

von Stefan E. (sternst)


Lesenswert?

Ingo schrieb:
> Stefan Ernst schrieb:
>> avr-objcopy -I intel -O binary XXX.hex XXX.bin
> Danke, aber wo füge ich das ein?

Google mal nach "Kommandozeile".

Alternativ kannst du in deiner IDE auch nach 
Post-Build-(Steps|Actions|Commands|Whatever) suchen.

von Ingo (Gast)


Lesenswert?

Ich hab jetzt unter Atmel Studio 6 unter Postbuilt eingetragen:
1
avr-objcopy -I intel -O binary Controller.hex Controller.bin
und bekomme folgenden Fehler:
1
Error  1  The command "avr-objcopy -I intel -O binary Controller.hex Controller.bin" exited with code 1.  C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Avr.common.targets  27  5  Controller

Ich verstehe den Fehler nicht. Wenn ich das unter der 
Windows-Eingabeaufforderung eingebe kommt immer:
1
avr objcopy:Controller.hex: Invalid bfd target


Und jetzt?

von spess53 (Gast)


Lesenswert?

Hi

>Und jetzt?

Es gibt auch ein Programm, 'hex2bin.exe', das hex-Files in bin-Files 
wandelt.

MfG Spess

von Stefan E. (sternst)


Lesenswert?

Sorry, es ist "ihex", nicht "intel".

von Ingo (Gast)


Lesenswert?

Juhu, da is es!

von Zer.Troll (Gast)


Lesenswert?

So einen Konverter sollte man als Anwender selbst schreiben koennen, 
sonst sollte man's seinlassen.

von Eumel (Gast)


Lesenswert?

Zer.Troll schrieb:
> So einen Konverter sollte man als Anwender selbst schreiben koennen,
> sonst sollte man's seinlassen.

Trollen sollte man können, sonst sollte man es lassen.

von Ingo (Gast)


Lesenswert?

und wie kriege ich das jetzt in den AVR bzw. wie ist es aufgebaut?
Es sieht ganz schön chaotisch aus!


Ingo

von tom (Gast)


Lesenswert?

Ingo,

du hast jetzt ein lineares binäres imgae deines programmes, welches bei 
adresse 0x0000 mit seinem ersten byte anfängt.
je nachdem was für einen avr du benutzt, kannst du diese daten pageweise 
(128 oder 256 bytes, je nach uC-typ) nun vom bootloader aus in den 
codespeicher schreiben. wie ? - dafür gibt es appnotes mit beispilecode 
oder du schaust mal in die diversen bootlaoder implementierungen die 
hier so in der codesammlung rumfliegen rein.

viel erfolg, tom.

von Stefan E. (sternst)


Lesenswert?

Ingo schrieb:
> und wie kriege ich das jetzt in den AVR bzw. wie ist es aufgebaut?

Das ist gar nicht irgendwie "aufgebaut". Das sind die puren binären 
Daten, die ins Flash müssen.

von Ingo (Gast)


Lesenswert?

Eigentlich muss ich doch "nur" eine Seite im Programmspeicher puffern 
und diese dann in einem rutsch in den Flash schreiben, oder? Das Binary 
ist ja schon mein "Programm", oder?

Ingo

von Walter S. (avatar)


Lesenswert?

Ingo schrieb:
> Das Binary
> ist ja schon mein "Programm", oder?

das Binary sind die Daten die Du direkt in den Programmspeicher 
schreiben kannst

von Zer.Troll (Gast)


Lesenswert?

Da fehlt noch was...
Das Binaerfile wird so geschrieben wie es kommt. Das Datenblatt des AVR 
zeigt wie man programmieren muss. Allenfalls muss man eine Seite im RAM 
buffern oder auch nicht.

von Ingo (Gast)


Lesenswert?

So, soweit klappt jetzt alles, das Binary landet im Flash und alles ist 
gut.
Jetzt stehe ich noch vor dem kleinen Problem, dass ich gern vor die 
Daten im Binary einen Kontrollstring packen würde, der die Karte als 
gültig kennzeichnet. Ich habe bis jetzt mit "TinyHexer" versucht das 
Binary zu editieren, was grundsätzlich auch möglich ist, aber nur, indem 
ich vorhandenes überschreibe. Ich will es jedoch davor einfügen und 
alles um 16 Positionen nach hinten schieben! Kennt jemand ein Tool das 
das kann?



Ingo

von Route_66 H. (route_66)


Lesenswert?

Hallo!
HxD.exe

von Stefan E. (sternst)


Lesenswert?

Ingo schrieb:
> Ich will es jedoch davor einfügen und
> alles um 16 Positionen nach hinten schieben! Kennt jemand ein Tool das
> das kann?

1
cat id.dat data.bin > all.bin

von tom (Gast)


Lesenswert?

Ingo,

berechne eine crc16 oder crc32 über dein binäres image und füge das am 
ENDE an.
bevor du die daten wegprogrammierst mit der crc-berechnung die 
konsistenz auf deinem speichermedium überprüfen.
wenn du jetzt noch am anfang "steuerinformationen" unterbringen willst, 
hex2bin hat m.A. nach einen offset parameter, mit dem sich das zu 
erzeugende image verschieben lässt. davor wird dann mit 0xff oder was 
auch immer (anderer parameter) aufgefüllt.

viel erfolg, tom.

von Ingo (Gast)


Lesenswert?

Route 66 schrieb:
> Hallo!
> HxD.exe
Sehr gut, das Ding is gut, danke

von Ingo (Gast)


Lesenswert?

Soweit so gut,

eine Frage nur noch bezüglich des Flashens:
Der Bootloader wird ab Adresse 0x8000 im Flash geflasht. Wenn ich jetzt 
die Anwendung nicht über den Bootloader, sondern "normal" flashen will, 
geht das nur, wenn ich das Häkchen bei "Erase Flash bevore programming" 
weg mache, da er sonst den Bootloader mitlöscht. Der eigentliche 
Programmiervorgang soll zwar über die Chipkarte laufen (später), jedoch 
in der Programmentwicklungsphase ist es sehr müssig, immer eine neue 
Karte auszusetzen, diese per hand noch etwas zu editieren und dann per 
Bootloader zu flashen.

Daher die Frage, wie kriege ich den Speicherplatz der Application 0- 
0x7FFF sauber programmiert (also gelöscht vorm flashen) ohne den 
Bootloader zu killen? Leider habe ich dazu keine passende Information 
gefunden. Im Artikel hier von -D geredet, jedoch nicht näher darauf 
eingegangen.


Ingo

von Stefan E. (sternst)


Lesenswert?

Ingo schrieb:
> Daher die Frage, wie kriege ich den Speicherplatz der Application 0-
> 0x7FFF sauber programmiert (also gelöscht vorm flashen) ohne den
> Bootloader zu killen?

Per ISP? Gar nicht.

Ingo schrieb:
> Der eigentliche
> Programmiervorgang soll zwar über die Chipkarte laufen (später), jedoch
> in der Programmentwicklungsphase ist es sehr müssig, immer eine neue
> Karte auszusetzen, diese per hand noch etwas zu editieren und dann per
> Bootloader zu flashen.

Vorschlag 1:
Füge die Bootloader-Hex der App-Hex hinzu (z.B. mit srec_cat), dann wird 
der Bootloader auch immer wieder neu mit der App zusammen programmiert.

Vorschlag 2:
Ersetze den Bootloader für die App-Entwicklungs-Phase durch einen 
"einfacheren" (z.B. seriellen) Bootloader.

von Sascha W. (sascha-w)


Lesenswert?

oder
Vorschlag 3:
während der Entwickungsphase den Bootloader ganz weglassen und
a) die Bootloaderfuse auch raus nehmen
b) an der Bootloaderstartadresse ein jmp 0x0000 mit flashen

Sascha

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.