PicWriterUSB:ソフトウェア編【FAT & Intel HEX】

hex_file_log

Intel HEXファイルの内容確認

「.HEX」ファイル内のデータを取り出すには、開始セクタ(Block)とFATチェーンからmsc_disk変数の該当場所を参照すれば良いのですが、FATが2BlockあるのでBlock数を+2してmsc_disk変数にアクセスします。
(セクタ番号13であれば、実データはmsc_disk[15][*]を参照する)

さてXC8コンパイラの生成するIntel HEXファイルデータの仕様は下記に分かりやすくまとまっています。

Intel HEX - Wikipedia

Intel HEX自体は処理に難しいところはなく1行ずつ読込んでPICマイコンに書出せば良いのですが、いくつか留意すべき点があります。

  • Intel HEXファイルデータではアドレス値はバイト単位だが、PICマイコンでの読書きはワード単位なのでアドレス値を1/2する必要がある。例えば下記のレコードの場合、HEXファイルデータのアドレスオフセットはF0Chだが、PICマイコンへの書込みオフセットは786hになります。
    : 10 0F0C 00 72302100990023008C018E010A302100 DF
  • PICマイコンのConfiguration Memory(ワードオフセット8000h〜)はIntel HEXファイルデータ上では10000h〜に配置されます。つまり下記拡張アドレスレコードに続いて記載されます。
    : 02 0000 04 0001 F9
  • PICマイコンのEEPROMはIntel HEXファイルデータ上では1E000h〜に配置されます。つまり上記の拡張アドレスレコードが指定された後、下記のようなレコードに記載されます。EEPROMのデータ長は8bitですが、書込み時は上位に0をfillしたワードデータとして取り扱います。
    : 10 E000 00 FE00FD00FF00FF00FF00FF00FF00FF00 1B

    EEPROMデータはProgram MemoryやConfiguration Memoryとは独立したMap上に配置されており、HEXファイルで指定されたアドレス1E000hをワードオフセット0として、LOAD DATA FOR DATA MEMORYコマンドで書込みます。

あとはレコードタイプによる処理分けと書込むアドレス(オフセット)とデータをASCIIからバイナリデータに変換すれば書込みへの準備は整います。

下記サンプルコードにてmsc_disk変数からの読込み、データバッファへの保存、チェックサムによる正当性判断を行っています。

サンプルコードと言いつつ、随分と長くなってきました。RP2040にて実行すると、下記のログが得られます。

hex_file_log02

 

コメント

タイトルとURLをコピーしました