HEX ファイル形式とは?
拡張子 .hex を持つファイルは、Intel HEX形式を使用しています。これは、コンパイルされたバイナリファームウェアをエンコードし、プログラマや書き込みツールに確実に転送できるようにするためのプレーンテキストのASCIIレコード形式です。生のバイナリデータを保存するのではなく、すべてのバイトが2つの16進文字として表現されるため、どのテキストエディタでも人間が読める状態が保たれます。
.hex ファイルは常にプレーンテキストであり、メモ帳などの標準的なテキストエディタで開くことができます。ファームウェアをマイコンに書き込むには、avrdude や Arduino IDE などの専用ツールが使用されます。生のマシンコードが必要な場合は、コンパイラから バイナリ .bin イメージや、その形式を好むシステム向けに Motorola S-record .srec を出力することも可能です。
.hex ファイルは、コンパイラやアセンブラがソースコードをマシンコードに変換し、ターゲットデバイスへ安全に転送するためにエンコードした結果です。
.hex ファイルが使用される場所
.hex ファイルに含まれるデータは、マイコンのプログラミングや、EEPROMやフラッシュストレージなどの組み込みメモリへの内容の書き込みに使用されます。マイコンは、リモコンや自動車のエンジン制御システムから、最新のIoTセンサやロボットハードウェアまで、多くの一般的なデバイスに搭載されています。
.hex ファイルのデータ構造
.hex ファイル内の16進データは「レコード」と呼ばれるテキスト行に保存されており、各レコードは6つのフィールドで構成されています。
- スタートコード - すべてのレコードの始まりを示すコロン (
:) - バイト数 - そのレコード内のデータバイト数を定義する2桁の16進数
- アドレス - 16ビットの転送先アドレスを指定する4桁の16進数(基本形式ではセグメントあたり最大64 KBまで)
- レコードタイプ -
00から05までの2桁の16進数(例:00= データレコード、01= ファイル終端) - データ - 実際のペイロード。各バイトは2つの16進文字としてエンコードされます
- チェックサム - レコード内の先行するすべてのバイトの2の補数チェックサムを保持する2桁の16進数
有効なすべてのIntel HEXファイルの最終行は、固定されたファイル終端レコード :00000001FF です。
セキュリティと安全性
リスク: MEDIUM.hexファイルはプレーンなデータであり、それ自体がPC上で実行されることはないため、テキストエディタやバイナリエディタで開くことは無害です。本当のリスクはデバイス側にあります。信頼できないファームウェアを書き込むと、ハードウェアが「文鎮化」したり、マイコンに悪意のあるコードがロードされたりする可能性があります。デバイスベンダーや信頼できるソースからの.hexファイルのみを書き込み、アップロード前にファイルが使用しているボードやチップと正確に一致することを確認してください。手動でファームウェアのバイトを編集すると、イメージが破損する可能性もあります。
形式の詳細
概要- 一般的なヘックスダンプ
HEX ファイルを開くプログラム
技術的詳細
詳細仕様| エンコーディング | 純粋なASCIIテキスト。すべてのデータバイトは2つの16進文字で表現されます |
| レコード開始文字 | コロン `:` (0x3A) - すべてのレコード行はこの文字で始まります。バイナリのマジックナンバーはありません |
| レコードタイプ | 00〜05の6つのタイプ:データ (00)、ファイル終端 (01)、拡張セグメントアドレス (02)、開始セグメントアドレス (03)、拡張リニアアドレス (04)、開始リニアアドレス (05) |
| 基本アドレス範囲 | セグメントあたり16ビットのアドレス指定。アドレス拡張レコードなしで最大64 KBをカバー |
| 拡張アドレス範囲 | タイプ04の拡張リニアアドレスレコードを使用して最大4 GB (32ビット) まで対応し、完全な32ビットメモリマッピングが可能 |
| レコードあたりの最大データバイト数 | 1レコードあたり最大255バイト (0xFF)。一般的には1レコードあたり16または32バイトが使用されます |
| チェックサムアルゴリズム | 開始のコロンを除く、レコード内のすべてのバイト(バイト数、アドレス、レコードタイプ、データ)の8ビットの2の補数 |
| ファイル終端マーカー | 固定レコード `:00000001FF` が、すべての有効なIntel HEXファイルを終了させる必要があります |
| MIMEタイプ | text/plain |
| アドレスのバイト順序 | ビッグエンディアン - アドレスおよびマルチバイトのカウントフィールドでは最上位バイトが先 |
| 主な用途 | AVR、PIC、ARM Cortex-M、8051ファミリーなどのマイコン上のフラッシュおよびEEPROMのプログラミング |
| ツールチェーンの起源 | avr-gcc、MPLAB X IDE、Keil MDK、IAR Embedded Workbenchなどのコンパイラおよびアセンブラの出力 |
| ファイルサイズのオーバーヘッド | 生のバイナリサイズの約1.4〜2倍。各データバイトが2つのASCII文字になり、レコードごとのフレーミングバイトが加わるため |
| リリース日 | 1973 (Intel HEX format) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | en.wikipedia.org |
HEX の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。HEX ファイルについて最初の質問をしてみましょう。
よくある質問
.hexファイルを開くプログラムは何ですか?
.hexファイルはファームウェアですか?
Arduinoに.hexファイルを書き込むにはどうすればよいですか?
avrdude -p <mcu> -c <programmer> -U flash:w:firmware.hex。事前に正しいボードとシリアルポートを選択してください。.hexファイルを.binに変換するにはどうすればよいですか?
avr-objcopy -I ihex -O binary in.hex out.bin を使用するか、SRecordツールキットを使用します。これにより、Intel HEXのASCIIフレーミングが取り除かれ、生のファームウェアイメージが生成されます。