なぜ HEX を BIN に変換するのですか?
Intel HEX は、コンパイルされたファームウェアをプレーンテキストの ASCII レコードとして保存します。各バイトは、アドレスとチェックサムフィールドに包まれた2つの 16進数文字としてエンコードされます。多くのファームウェア書き込みツール、ブートローダー、デバイス更新ユーティリティは、代わりにフラットな .bin イメージを想定しています。例えば、STM32 ボードは USB ドライブにドラッグされた .bin ファイルを受け入れますが、Arduino ツールチェーンは .hex を出力します。変換することで、あるツールチェーンで構築されたファームウェアを、別の形式を想定している書き込みツールで使用できるようになります。
HEX から BIN への変換方法
avr-objcopy OPEN-SOURCE
ターミナルで avr-objcopy -I ihex -O binary firmware.hex firmware.bin を実行します。Linux では、システム binutils の汎用 objcopy が、AVR 専用パッケージなしで同じフラグを受け入れます。
SRecord OPEN-SOURCE
srec_cat firmware.hex -Intel -o firmware.bin -Binary を実行します。SRecord は HEX ファイル内のアドレスギャップを 0xFF で埋めることで処理し、消去されたフラッシュメモリの状態に合わせます。
これらの形式について
.hexファイルはIntel HEXファイルです。Arduino、AVR、PICチップなどのマイコン用にコンパイルされたファームウェアが、プレーンテキストのレコードとして保存されています。PC上で実行するものではなく、Arduino…
.HEX の詳細を開く →BINファイルは、ほとんどの場合、CDまたはDVDのセクタ単位の未加工(RAW)コピーであり、トラック情報を記述した .cue テキストファイルとセットで提供されます。PowerISO や DAEMON Tools Lite でマウント(.bin ではなく .cue を指定)するか、AnyBurn や bchunk を使用して ISO…
.BIN の詳細を開く →品質と注意点
- Intel HEX は各バイトを2つの ASCII 16進数文字とフレーミングオーバーヘッドとしてエンコードするため、
.bin出力は.hexよりもサイズが小さくなります。 - HEX ファイルにアドレスギャップがある場合(フラッシュ領域と EEPROM 領域の両方がカバーされている場合によくあります)、SRecord はデフォルトでそれらを
0xFFで埋めます。 - avr-objcopy は Windows では Arduino IDE 内の
hardware/toolsに同梱されています。macOS では Homebrew を介して avr-gcc パッケージで利用可能です。
よくある質問
HEX から BIN への変換でデータは失われますか?
Windows で avr-objcopy はどこにありますか?
hardware/tools ディレクトリに同梱されているか、WinAVR パッケージから入手できます。この変換は AVR 以外のチップにも使用できますか?
objcopy を同じフラグで使用してください。SRecord もアーキテクチャに依存しません。