SREC(ファイル形式)
Motorola Sレコードは、Motorolaによって作成されたファイル形式であり、バイナリ情報をASCII 16進テキスト形式で伝達します。このファイル形式は、 SRECORD 、 SREC 、 S19 、 S28 、 S37とも呼ばれます。マイクロコントローラ、EPROM、EEPROM、およびその他の種類のプログラマブルロジックデバイスのフラッシュメモリのプログラミングによく使用されます。典型的なアプリケーションでは、コンパイラまたはアセンブラーはプログラムのソースコード(Cまたはアセンブリ言語など)をマシンコードに変換し、HEXファイルに出力します。 HEXファイルはプログラマーによってインポートされ、マシンコードを不揮発性メモリに「焼き付ける」か、ロードおよび実行のためにターゲットシステムに転送されます。
概要
Sレコード形式は、1970年代半ばにMotorola 6800プロセッサ用に作成されました。そのソフトウェアや他の組み込みプロセッサ向けのソフトウェア開発ツールは、実行可能コードとデータをSレコード形式で作成します。次に、PROMプログラマはSレコード形式を読み取り、データを組み込みシステムで使用されるPROMまたはEPROMに「焼き付け」ます。
その他の16進形式
同様の目的を持つ他のASCIIエンコーディングがあります。 BPNF、BHLF、およびB10Fは初期のバイナリ形式でしたが、コンパクトでも柔軟性でもありません。 16進形式は、文字ごとに1ビットではなく4ビットを表すため、よりコンパクトです。 Sレコードなどの多くは、PROMの一部のみを指定できるようにアドレス情報が含まれているため、より柔軟です。 Intel HEX形式は、Intelプロセッサでよく使用されていました。 Tek Hexは、デバッグ用のシンボルテーブルを含めることができる別の16進形式です。
フォーマット
レコード構造
S | タイプ | バイト数 | 住所 | データ | チェックサム |
SREC形式のファイルは、一連のASCIIテキストレコードで構成されています。レコードには、左から右に次の構造があります。
- レコードタイプ 、2つの文字、大文字の「S」($ 53)0〜9の数字、次に数字、レコードのタイプを定義します。
- バイトカウント 、2桁の16進数。残りのレコード(アドレス+データ+チェックサム)に続くバイト数(16進数のペア)を示します。このフィールドには、16ビットアドレスフィールドの最小値3と1チェックサムバイトがあり、最大値は255(0xFF)です。
- アドレス 、レコードタイプによって決定される4/6/8の16進数。アドレスバイトはビッグエンディアン形式で配置されます。
- データ 、 nバイトのデータに対する2 nの 16進数のシーケンス。 S1 / S2 / S3レコードの場合、レコードごとに最大32バイトが一般的です。これは80文字幅の端末画面に収まるためです。ただし、特定のアドレスで各バイトを視覚的にデコードするには16バイトの方が簡単です。
- チェックサム 、2桁の16進数、バイトカウント、アドレス、およびデータフィールドの2桁の16進数のペアで表される値の合計の1の補数の最下位バイト。詳細なチェックサムの例については、例を参照してください。
テキスト行終端記号
SRECレコードは1つ以上のASCII行終了文字で区切られているため、各レコードはテキスト行に単独で表示されます。これにより、レコードを視覚的に区切ることで読みやすさが向上し、レコード間のパディングも提供されます。これにより、マシンの解析効率が向上します。
HEXレコードを作成するプログラムは、通常、オペレーティングシステムの規則に準拠した行終了文字を使用します。たとえば、Linuxプログラムは単一のLF(改行、16進値0A)文字を使用して行を終了しますが、WindowsプログラムはCR(キャリッジリターン、16進値0D)の後にLFを使用します。
レコードタイプ
次の表は、可能な10個のSレコードを示しています。 S4は予約されており、現在定義されていません。 S6は当初予約されていましたが、後で再定義されました。
記録 フィールド | 記録 目的 | 住所 フィールド | データ フィールド | 記録 説明 |
---|---|---|---|---|
S0 | ヘッダ | 16ビット 「0000」 | このレコードには、一連の16進数字のペアとして表されるベンダー固有のASCIIテキストが含まれています。このレコードのデータは、ヌルで終わる文字列の形式で表示されるのが一般的です。テキストデータには、ファイル/モジュール名、バージョン/リビジョン番号、日付/時刻、製品名、ベンダー名、PCB上のメモリ指定子、著作権表示の情報が混在したものが含まれます。よく見られます:48 44 52 ASCII H、D、およびR-「HDR」。 | |
S1 | データ | 16ビット 住所 | このレコードには、16ビットのアドレスフィールドから始まるデータが含まれています。このレコードは通常、AVR、PIC、8051、68xx、6502、80xx、Z80などの8ビットマイクロコントローラーに使用されます。このレコードに含まれるデータのバイト数は、「バイトカウントフィールド」から3を引いたものです(つまり、「16ビットアドレスフィールド」の場合は2バイト、「チェックサムフィールド」の場合は1バイト)。 | |
S2 | データ | 24ビット 住所 | このレコードには、24ビットアドレスで始まるデータが含まれています。このレコードに含まれるデータのバイト数は、「バイトカウントフィールド」から4を引いたものです(つまり、「24ビットアドレスフィールド」の場合は3バイト、「チェックサムフィールド」の場合は1バイト)。 | |
S3 | データ | 32ビット 住所 | このレコードには、32ビットアドレスで始まるデータが含まれます。このレコードは通常、ARMや680x0などの32ビットマイクロコントローラーに使用されます。このレコードに含まれるデータのバイト数は、「バイトカウントフィールド」から5を引いたものです(つまり、「32ビットアドレスフィールド」の場合は4バイト、「チェックサムフィールド」の場合は1バイト)。 | |
S4 | 予約済み | なし | なし | このレコードは予約されています。 |
S5 | カウント | 16ビット カウント | このオプションのレコードには、 S1 / S2 / S3レコードの16ビットカウントが含まれます。このレコードは、レコードカウントが65,535(0xFFFF)以下の場合に使用されます。それ以外の場合、 S6レコードが使用されます。 | |
S6 | カウント | 24ビット カウント | このオプションのレコードには、 S1 / S2 / S3レコードの24ビットカウントが含まれます。このレコードは、レコードカウントが16,777,215(0xFFFFFF)以下の場合に使用されます。 65,536(0x010000)未満の場合、 S5レコードが使用されます。 注:この新しいレコードは最新の変更です(公式かどうかはわかりません)。 | |
S7 | 開始アドレス (終了) | 32ビット 住所 | このレコードには、32ビットアドレスの開始実行場所が含まれています。これは、一連のS3レコードを終了するために使用されます。 SRECファイルがメモリデバイスのプログラムにのみ使用され、実行場所が無視される場合、ゼロのアドレスを使用できます。 | |
S8 | 開始アドレス (終了) | 24ビット 住所 | このレコードには、24ビットアドレスの開始実行場所が含まれています。これは、一連のS2レコードを終了するために使用されます。 SRECファイルがメモリデバイスのプログラムにのみ使用され、実行場所が無視される場合、ゼロのアドレスを使用できます。 | |
S9 | 開始アドレス (終了) | 16ビット 住所 | このレコードには、16ビットアドレスの開始実行場所が含まれています。これは、一連のS1レコードを終了するために使用されます。 SRECファイルがメモリデバイスのプログラムにのみ使用され、実行場所が無視される場合、ゼロのアドレスを使用できます。 |
レコード順
一部のUnixドキュメントには「ファイル内のSレコードの順序は重要ではなく、特定の順序は想定されない」とありますが、実際にはほとんどのソフトウェアがSRECレコードを順序付けています。通常のレコード順序は、(オプションの)S0ヘッダーレコードで始まり、1つ以上のS1 / S2 / S3データレコードのシーケンスで続き、1つのオプションのS5 / S6カウントレコードを持つことができ、1つの適切なS7 / S8 / S9終了レコード。
S19スタイルの16ビットアドレスレコード- S0
- S1(1つ以上のレコード)
- S5(オプションのレコード)
- S9
- S0
- S2(1つ以上のレコード)
- S5(オプションのレコード)
- S8
- S0
- S3(1つ以上のレコード)
- S5(オプションのレコード)
- S7
制限事項
レコード長 -Unixマニュアルページのドキュメントには、「Sレコードファイルは特別にフォーマットされたASCII文字列のシーケンスで構成されています。Sレコードの長さは78バイト以下です。」マニュアルページでは、データフィールドの文字数をさらに64(または32データバイト)に制限しています。 8桁の16進文字のアドレスと64個のデータ文字を持つレコードは、78(2 + 2 + 8 + 64 + 2)文字長になります(このカウントは、行末または文字列の終了文字を無視します)。ファイルは80文字幅のテレプリンターで印刷できます。マニュアルページの下部にあるメモには、「総レコード長の78バイト制限またはデータ長の64バイト制限が記載されている唯一の場所です。これらの値は、一般的なケースでは信頼できません。 」その制限が無視される場合、Sレコードの最大長は514文字です。レコードタイプフィールドの場合は2 +バイトカウントフィールドの場合は2(値は0xFF = 255)+アドレス、データ、およびチェックサムフィールドの場合は2 * 255 。行および文字列ターミネータには、追加のバッファスペースが必要になる場合があります。長い行の長さを使用すると問題があります。「MotorolaのSレコード形式の定義では、最大255バイトのペイロード、または514文字の行に加えて、行終端が許可されます。ほとんどありません。」
データフィールド -一部のドキュメントでは、このフィールドに最大32バイトのデータ(64文字の16進文字)を推奨しています。 S0 / S1 / S2 / S3レコードのデータの最小量はゼロです。データの最大量は、アドレスフィールドのサイズによって異なります。バイトカウントフィールドは255(0xFF)を超えることができないため、データの最大バイト数は255マイナス(チェックサムフィールドの1バイト)マイナス(アドレスフィールドのバイト数)で計算されます。 S0 / S1レコードは、最大252バイトのデータをサポートします。 S2レコードは、最大251バイトのデータをサポートします。 S3レコードは、最大250バイトのデータをサポートします。
コメント -SRECファイル形式はコメントをサポートしていません。一部のソフトウェアは、「S」で始まらないすべてのテキスト行を無視し、チェックサムフィールドの後のすべてのテキストを無視します。その余分なテキストは、コメントに(非互換に)使用されることがあります。たとえば、CCS PICコンパイラは「;」の配置をサポートしていますIntel HEXファイルの上部または下部のコメント行、およびそのマニュアルには「一部のプログラマー(特にMPLAB)は16進ファイルの上部にあるコメントを好まない」と記載されているため、コンパイラーにはコメントを配置するオプションがあります16進ファイルの下部。
例
色の伝説レコードタイプバイトカウントアドレスデータチェックサム
チェックサム計算
次のサンプルレコード:
S1137AF00A0A0D0000000000000000000000000000000061次のようにチェックサム値の計算方法を示すためにデコードされます。
- 追加:各バイトを追加13 + 7A + F0 + 0A + 0A + 0D + 00 + 00 + 00 + 00 + 00 + 00 + 00 + 00 + 00 + 00 + 00 + 00 + 00 = 19E(hex)total。
- マスク:合計の最下位バイト= 9E(16進数)を保持します。
- 補数:最下位バイトの1の補数= 61(16進数)を計算します。