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
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
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.
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)
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.
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)
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.