S-record
![]() Motorola S-Record形式のクイックリファレンスチャート (注意: レコードの例の画像では、単語「バイト」は文字を指定するために代わりに使用されている)。 | |
拡張子 | .s19, .s28, .s37, .s, .s1, .s2, .s3, .sx, .srec, .mot, .mxt |
---|
概要
編集歴史
編集S-recordフォーマットは1970年代中頃にMotorola 6800プロセッサ用として開発された。Motorola 6800や他の組み込みプロセッサ向けのソフトウェア開発ツールを使用することで、S-recordフォーマットの実行可能なコードやデータを作成することができた。PROMプログラマにはS-recordフォーマットを読み込み、組み込みシステム中のPROMやEPROMにデータを書き込む機能があった。
その他の16進フォーマット
編集SRECと同様の目的で開発されたASCIIエンコーディング形式が他にも存在する。BPNF、BHLFおよびB10Fは早期に開発されたバイナリフォーマットだったが、データサイズが大きくなりがちで、柔軟性にも欠けていた。16進フォーマットは1キャラクタで1ビットではなく4ビットを表現するため、バイナリフォーマットよりもデータサイズを小さくすることができる。SRECといった16進フォーマットの多くがアドレス情報を含むため、PROMの一部を指定することができるという点で、バイナリフォーマットよりも柔軟な使用が可能である。Intel HEXフォーマットはIntel製プロセッサでしばしば使用された。TekHexは16進フォーマットの一種であり、デバッグ用にシンボルテーブルを含むことができる。
フォーマット
編集レコード構造
編集S | タイプ | バイト数 | アドレス | データ | チェックサム |
テキスト行終端記号
編集レコードタイプ
編集レコード フィールド |
レコードの 目的 |
アドレス フィールド |
データ フィールド |
レコードの 説明 |
---|---|---|---|---|
S0 | ヘッダ | 16ビット "0000" |
S0はベンダー固有のASCIIテキストのコメントから成り、16進数のペアの連なりで表現される。S0のデータはヌル終端文字列のフォーマットと見なすのが一般的である。ファイル/モジュール名、バージョン/リビジョン番号、日付/時刻、製品名、ベンダー名、PCBのメモリデジグネータ、著作権表示といった情報を組み合わせて含むことができる。 | |
S1 | データ | 16ビット アドレス |
S1は16ビットのアドレスフィールドで開始されるデータから成る[2]。普通、AVR、PIC、8051、68xx、6502、80xx、Z80などの8ビットのマイクロコントローラで使用される。データのバイト数はバイト数フィールドの値から3引いた値になる (2バイトは16ビットのアドレスフィールドに、1バイトはチェックサムフィールドに使用される)。 | |
S2 | データ | 24ビット アドレス |
S2は24ビットのアドレスフィールドで開始されるデータから成る[2]。データのバイト数はバイト数フィールドの値から4引いた値になる (3バイトは24ビットのアドレスフィールドに、1バイトはチェックサムフィールドに使用される)。 | |
S3 | データ | 32ビット アドレス |
S3は32ビットのアドレスフィールドで開始されるデータから成る[2]。普通、ARMや680x0などの32ビットのマイクロコントローラで使用される。データのバイト数はバイト数フィールドの値から5引いた値になる (4バイトは32ビットのアドレスフィールドに、1バイトはチェックサムフィールドに使用される)。 | |
S4 | 予約 | N/A | N/A | S4は予約されている。 |
S5 | カウント | 16ビット カウント |
S5は任意のレコードであり、S1、S2、S3レコードの数を16ビットで示す[2]。レコード数が65,535 (0xFFFF) 以下であるときに使用される。65,535を超過する場合はS6レコードが使用される。 | |
S6 | カウント | 24ビット カウント |
S6は任意のレコードであり、S1、S2、S3レコードの数を24ビットで示す。レコード数が16,777,215 (0xFFFFFF) 以下の場合に使用される。65,536 (0x10000) 以下の場合はS5レコードが使用される。S6は最新の変更で追加されたものであり、公式扱いされないことがある[2]。 | |
S7 | 開始アドレス (終端) |
32ビット アドレス |
S7は32ビットアドレスで開始実行位置を示す[2][3]。S3レコードの連なりの終端として使用される。SRECファイルがメモリデバイスのプログラミングにのみ使用され、実行位置が無視される場合、アドレスとして0を指定できる。 | |
S8 | 開始アドレス (終端) |
24ビット アドレス |
S8は24ビットアドレスで開始実行位置を示す[2][3]。S2レコードの連なりの終端として使用される。SRECファイルがメモリデバイスのプログラミングにのみ使用され、実行位置が無視される場合、アドレスとして0を指定できる。 | |
S9 | 開始アドレス (終端) |
16ビット アドレス |
S9は16ビットアドレスで開始実行位置を示す[2][3]。S1レコードの連なりの終端として使用される。SRECファイルがメモリデバイスのプログラミングにのみ使用され、実行位置が無視される場合、アドレスとして0を指定できる。 |
レコード順
編集あるUNIXのドキュメントには、ファイル中のS-recordの順番に意味は無く、特定の順番は前提とされないだろうとある[2]。しかし、実際には、ほとんどのソフトウェアではSRECレコードに順序を付ける。普通、レコードは、任意の場合もあるが、S0ヘッダレコードから開始される。その後、1つ以上のS1、S2、S3データレコードが並び、任意でS5、S6カウントレコードが1つ配置され、最後に適切なS7、S8、S9終端レコードが1つ配置される。
- S19スタイル16ビットアドレスレコード
- S0
- S1 (1つ以上)
- S5 (任意)
- S9
- S28スタイル24ビットアドレスレコード
- S0
- S2 (1つ以上)
- S5 (任意)
- S8
- S37スタイル32ビットアドレスレコード
- S0
- S3 (1つ以上)
- S5 (任意)
- S7
制限事項
編集例
編集- 色凡例
レコードタイプ バイト数 アドレス データ チェックサム
チェックサム計算
編集S1137AF00A0A0D0000000000000000000000000061モトローラの慣例に則り、ドル記号 ($) を16進数を示す記号として用いる。 (一)加算: 各バイトの和をとると、$13 + $7A + $F0 + $0A + $0A + $0D + $00 + ... + $00 = $019Eとなる。 (二)マスク: この和の最上位バイト ($01) を除外し、最下位バイトの$9Eを残す。 (三)補数: 最下位バイトの1の補数を計算すると、$61となる。普通、この演算はMotorola 6800マイクロプロセッサ上で$FFの値を保持したアキュムレータとの排他的論理和をとることで実行される。
16-bit メモリアドレス
編集S00F000068656C6C6F202020202000003C S11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026 S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9 S111003848656C6C6F20776F726C642E0A0042 S5030003F9 S9030000FC
関連項目
編集出典
編集参考文献
編集外部リンク
編集- RFC 4194 - The S Hexdump Format - IETF
- SRecord - SRECフォーマットのファイルを操作するためのツール群
- BIN2MOT - バイナリファイルをSRECファイルに変換するためのユーティリティ
- SRecordizer - S19フォーマットのファイルを閲覧、編集、エラーチェックするためのツール
- bincopy - SRECフォーマットのファイルを操作するためのPythonのパッケージ
- kk_srec - SRECフォーマットを読み込むためのC言語のライブラリ