mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Christian S. (chris02)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: PittyJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Eberhard H. (sepic) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian S. (chris02)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Eberhard H. (sepic) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus F. (mfro)
Datum:

Bewertung
0 lesenswert
nicht 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.
objcopy -Isrec -Obinary xxx.s19 xxx.bin
dd if=xxx.bin of=vorne.bin bs=1 count=$((0x870))
dd if=xxx.bin of=hinten.bin bs=1 skip=$((0x106f))
cat vorne.bin patch.bin hinten.bin > neu.bin
objcopy -Ibinary -Osrec neu.bin neu.s19
(nur schnell hingeschlampert, bitte erst überprüfen)

Autor: Eberhard H. (sepic) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd B. (bbrand)
Datum:

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

Gruß,
Bernd

Autor: Markus F. (mfro)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.