Forum: Mikrocontroller und Digitale Elektronik Problem S19 (Moto S-File) File Konvertierung


von Christian S. (chris02)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich beschäftige mich aktuell mit NXP Prozessoren. Daher hänge ich gerade 
beim Thema S-Files fest.

Mein Ziel ist es einen MC9S08AW60 zu updaten. Das passende Updatefile 
habe ich.

Das Update muss von $870-106F eingespielt werden. Dafür verwende ich 
USBDM
(https://sourceforge.net/projects/usbdm/ bzw. 
http://usbdm.sourceforge.net/USBDM_V4.12/html/index.html)

Aktuell kann ich den ersten Flash ($870-$17FF) auslesen und auch wieder 
zurück spielen. (µC ist nicht schreib- / lesegeschützt)

Mein Ziel ist es das ausgelesene S19 File in ein Bin zu konvertieren, zu 
editieren (d.h. das Update über einen HexEditor rein zu kopieren) und 
anschließend wieder zurück zu schreiben (am liebsten direkt als bin oder 
auch wieder in S19 konvertiert und noch lieber direkt das passende 
bin-Update-File in den Bereich von 870-106F zu schreiben).

Um Editierungsprobleme auszuschließen versuche ich gerade folgendes 
S19-->bin-->s19

Allerdings ist die original S19 Datei nicht gleich zu der konvertierten 
(im Hex-Editor verglichen). Konvertiere ich die konvertierte s19 wieder 
in ein bin zurück und vergleiche diese zwei bin Dateien (also 
S19>>bin>>s19>>bin) sind diese identisch beiden bin's identisch. An der 
Konvertierung kann es also nicht liegen.

Meine Vermutung ist nun, dass ich ein Offset o.ä. noch bei der zurück 
konvertierung in S19 setzen muss. Irgend eine Einstellung die S-File 
spezifisch ist. Allerdings bin ich hier am Ende mit meinem Latein.

Das File an dem ich mich gerade versuche, habe ich mal an gehangen. Zum 
konvertieren nutze ich dieses Tool:  http://www.s-record.com/


Hat evtl. Jemand einen Rat für mich wie ich das File konvertieren kann?

Danke & Gruß
Chris

von PittyJ (Gast)


Lesenswert?

Selber lesen und schreiben?
Ien Programm dafür ist doch eigentlich nur eine Fingerübung.
Die Doku gibt es bei Wikipedia
https://de.wikipedia.org/wiki/S-Record

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Christian S. schrieb:
> Das File an dem ich mich gerade versuche, habe ich mal an gehangen.

Meines Erachtens fehlt dort am Schluss ein S9-Record, damit die 
S1-Records korrekt abgeschlossen werden.

Ein Offset ist nicht nötig, da alle S1-Records offensichtlich die 
gewünschten absoluten Adressen haben.

von Christian S. (chris02)


Lesenswert?

Danke für deine Rückmeldung. Das angehangene File ist org. von USBDM 
gedumpt und funktioniert auch. Kann aber auch gerne mal das File in der 
gewandelten Form anhängen. (heute Abend)

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

OK, verstehe.

Dann hast du beim Rückkonvertieren mit bin2srec vermutlich keine 
Optionen angegeben.

Versuche es einmal z. B. mit:

bin2srec -b 0870 -s -l 16 870-17ff.bin > 870-17ff.srec

wobei:

-b 0870 = Anfangsadresse (statt sonst 0)
-s = unterdrückt überflüssige Zeilen (erzeugt aber dennoch korrekt S9)
-l 16 = 16 Datenbytes per Zeile (statt 32)

Damit sollte es vom Format her dem angehängten 870-17ff.s19 entsprechen 
(einfach mit einem Texteditor anschauen/vergleichen).

Die Dateierweiterung .s19 bedeutet übrigens: Datei mit lauter S1-Records 
und S9 am Ende.
Ich habe oben .srec angegeben, damit dein Original nicht überschrieben 
wird.

Warum editierst du eine Binärdatei?
Die saubere Methode wäre disassemblieren, editieren, neu assemblieren 
und programmieren.

von Markus F. (mfro)


Lesenswert?

Dazu braucht's m.E. keine Spezialtools und auch keinen Hexeditor. Ein 
bißchen Linux- (oder von mir aus auch Cygwin-) Kommandozeile und eine 
(beliebige) GCC Toolchain (die muß noch nicht mal für den selben 
Prozessor sein, sondern bloß die binutils enthalten) reicht völlig.
1
objcopy -Isrec -Obinary xxx.s19 xxx.bin
2
dd if=xxx.bin of=vorne.bin bs=1 count=$((0x870))
3
dd if=xxx.bin of=hinten.bin bs=1 skip=$((0x106f))
4
cat vorne.bin patch.bin hinten.bin > neu.bin
5
objcopy -Ibinary -Osrec neu.bin neu.s19
(nur schnell hingeschlampert, bitte erst überprüfen)

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Es gibt durchaus ein paar Zeitgenossen und Zeitgenossinnen, die (nur) 
unter Windows* arbeiten.

Und hierfür gibt es zum Glück auch ein paar gute Tools, so zum 
komfortablen Editieren von S-Records z. B. den Srecordizer (V 1.1b2 auf 
Github), besonders übersichtlich wenn man "Data Byte Spacing" und bei 
Bedarf "Show ASCII" aktiviert.

Allerdings schreibt er auch nur, was auf dem Bildschirm ist.

Der bei der vorliegenden S-Record-Datei (s. o.) fehlende 
S9-Record-Eintrag kann aber per "Insert Row (Below)" nachträglich als 
"S9 03 0000" ** in der letzten Zeile eingefügt werden. Die Prüfsumme 
wird automatisch als "FC" ermittelt.

Jetzt noch "Save As" und fertig ist die (einfache) Übung.

* Ich arbeite unter Windows und unter Lubuntu.

** Die Startadresse steht bei MC9S08AW60 im Reset-Vector unter 0xFFFE 
und 0xFFFF und ist in der vorliegenden Datei nicht enthalten.

von Bernd K. (prof7bit)


Lesenswert?

Eberhard H. schrieb:
> Es gibt durchaus ein paar Zeitgenossen und Zeitgenossinnen, die (nur)
> unter Windows* arbeiten.

Die haben es dann halt schwerer. Selbstgewähltes Schicksal.

von Bernd B. (bbrand)


Lesenswert?

Mit folgender Befehlssequenz erhalte ich nach der Konvertierung
S19 => BIN => S19 eine Datei, die identisch zur Ursprungsdatei ist:
1
srec2bin 870-17ff.s19 test.bin
2
bin2srec -s -a 2 -l 16 -b 0x870 test.bin > test.s19

Gruß,
Bernd

von Markus F. (mfro)


Lesenswert?

Eberhard H. schrieb:
> Es gibt durchaus ein paar Zeitgenossen und Zeitgenossinnen, die (nur)
> unter Windows* arbeiten.

das sollte hier kein Windows-Bashing werden (auch wenn mir angesichts 
Win10 im Büro regelmässig danach wäre).

Die genannten Tools (bash, binutils, dd und cat) sind auf den meisten 
Windows-Rechnern, die eine GCC Toolchain benutzen, meist ohnehin 
vorhanden.

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.