2008-07-26

Motorola S-record format

仕事で使う機会があり調べてみた。

使うと言っても不具合の原因として他社作成部分が怪しく、そちらで使用していたためなのだが、身の潔白を証明するためには仕方がない(ーー)

web上の情報はあまり多くなさそう。あっても正確な情報なのかはわからず。
モトローラのサイトでも見つけられず。
英Wikipediaに SREC と言うタイトルで載っているのが一番信頼できるでしょうか?

似非技術者の私は英語読めないんですけど…

最初に聞いたのは「モトローラフォーマット」と聞いたのですが、どうやら「モトローラ Sレコードフォーマット」というのが正式な名前…だと思ったのですがどうも正式な呼称や厳密な定義はないようです。ホントなんでしょうか?

とりあえず英Wikipediaの解説を読んでみます。

Sフォーマットは海外では SREC や S19 と呼ばれている事が多いそうです。
全てASCIIにより記録され、16進数の数値はビッグエンディアンで記録されます。

レコードの構成は以下の通り
  1. スタートコード : 'S' 1文字
  2. レコードタイプ : '0'~'9' の数字1文字
  3. バイト数 : 4.~6. のバイト長を16進数2桁で表す
  4. アドレス : データの先頭アドレスを16進数4,6,8桁(レコードタイプにより決まる)で表す
  5. データ : データを16進数2n桁(nはデータのバイト数)で表す
  6. チェックサム : 3.~5. を合計した数値の最下位バイト(least significant byte)の1の補数(one's complement)を16進数2桁で表す。
え~っと 6. は 3.~5. の各byteをオーバーフロー無視で合計しビット反転した物と思われます。残念ながらこの英文はどの部分が何処にかかるのか自信がありません。また、合計するのが各バイトだと言う記述はありませんでした。これ以外無いと思いますが(^^;)

レコードタイプは以下の通り
レコードタイプ
レコードタイプ 説明
アドレスバイト数 連続データ
0 Block header 2 あり
1 Data sequence 2 あり
2 Data sequence 3 あり
3 Data sequence 4 あり
5 Record count 2 なし
7 End of block 4 なし
8 End of block 3 なし
9 End of block 2 なし

ここから先は憶測なのですが、おそらく
  • Block header (アドレスは0000固定?データ部は自由に使ってよし)
  • Data sequence (繰り返し)
  • Record count (アドレスに Data sequence のレコード数を入れる)
  • End of block (アドレスは0000固定?)
の順にファイルに書き出す物と思われます。
各レコードは改行で区切るようですが、改行コードは特に決まっていない模様
1 Block あたりのデータシーケンス最大レコード数は 2 byte で表せる 65,535 となりそうです。
End of block の後に続けて Block header を開始してよいかは不明。

参照先として下記リンクが張られていたが、ここまでで力尽きましたorz
仕事で必要最低限の事はわかったのでこれで終了!!
いつも中途半端ですね
  • srec - Linux man page
  • MC68000 Family Programmer’s Reference Manual
  • 0 件のコメント: