モトローラSフォーマット
モトローラSフォーマットとは、モトローラ社によって規定された、バイナリ情報を16進テキスト形式で表現したファイルです。
車載組込みソフト開発では、ソースコードをコンパイルし、機械語に変化して、マイコンに書き込み、ECUを動かします。このとき、機械語を16進数のテキストファイルに出力し、フラッシュライタなどの書き込みツールにより、マイコンへプログラムを転送します。
拡張子が「.mot」であることが多いため、mot(モト)ファイルと呼ばれることが多いようです。
フォーマット例
まず、どんなファイルなのか例を下記に示します。
レコード詳細
モトローラSフォーマットは、1行ごとにレコードと呼ばれる塊によって構成されています。
レコードの記述内容を確認してましょう。
レコードは、5つのフィールドから成り立っています。
① S3 ② 15 ③ FFFA0000 ④ 000102030405060708090A0B0C0D0E0F ⑤ 8E
①タイプ
レコードの種類を示すデータです。S1~S9までのタイプがあります。
S0 : スタートレコード。アドレスフィールドは、0x0000。
コメント等入れられる(オプション)
S1 : 16bitアドレスのデータレコード
S2 : 24bitアドレスのデータレコード
S3 : 32bitアドレスのデータレコード
S4 : Reserved
S5 : これまで出てきたデータレコード数(2byte長)
S6 : これまで出てきたデータレコード数(3byte長)
S7 : S3レコードの終了
S8 : S2レコードの終了
S9 : S1レコードの終了
②データ長
③④⑤のデータ数を示す。
③アドレス
④が配置されるアドレスを示す。
④データ
③のアドレス先に格納されるデータ。機械語になったプログラム本体。
⑤チェックサム
②③④の値を1byteずつ足し合わせた合計値の下位1byteの1の補数。
1の補数とは、簡単に言うと、ビット反転させた値のこと。
拡張子
モトローラSフォーマットのファイルは、拡張子がいくつか存在します。
どれも中身は同じです。テキストエディタで開くと先述のレコードが記載されていることが確認できるでしょう。
私の周りでは、「.mot」しかみたことありませんが、下記に種類を挙げます。
.mot, .mxt, .run
.s19, .s28, .s37, .s, .s1, .s2, .s3, .sx, .srec
蛇足:motファイルにまつわる業務の話
再評価しなくてもいいように楽するお話
ソースコードを記述し、コンパイルすると、対象マイコンに書き込むためにこのmotファイルが出来上がります。
motファイルに記載されているデータが違っていれば、当然プログラムが違うため、ECUとしての動作も変わります。逆に言うと、ソースコードが違っていても、motファイルが一緒だと動作は変わりません。
この特性を利用して、再評価を省略してしまいます。
代表的なケースだと、
・うっかり変数名/定数名/関数名を間違えていた
・コメント修正し忘れていた
というくらいでしょうか。
タイプが違って比較できないお話
結論から言うと、データタイプが違うとテキスト形式での比較はできない、という話。
コンパイルした後に出来上がったmotファイルを別のmotファイルと比較して、一致してるかどうかを比較する場面がありました。
テキストで開けるので、一般的なテキスト比較ツールで一致確認すればいいと考えたのですが、一致しなかったのです。
フラッシュライタを使って、読み出したmotファイルの形式が違っていました。
2パターン経験したことがあります。
①タイプ・アドレス長が違う
②1行辺りのデータ長が違う。
同じアドレスに同じデータが入っているか、が重要になります。
テキストレベルで一致しているというのは、motファイルの比較では重要ではありません。
フラッシュライタツールでは、motファイルをベリファイして一致しているか確認する機能がついているものがありますので、これを利用して確認するのも一案です。
既に読み出したファイルをどうにか比較したい場合は、タイプ・アドレス・データ長を考慮して、比較するような工夫が必要になります。