なぜ UF2 を HEX に変換するのですか?
UF2 はドラッグ&ドロップでの書き込み用にファームウェアをラップしたものですが、.hex (Intel HEX) はデータとそのメモリ位置の両方をエンコードする ASCII 形式で、多くのライターやプログラマで使用されます。uf2conv.py は Intel HEX を出力しないため、生の .bin を経由し、GNU binutils の objcopy を使用してアドレスレコードを追加します。これは、ターゲットのプログラマやブートローダーが UF2 ではなく .hex を必要とする場合に一般的です。
UF2 から HEX への変換方法
uf2conv.py と objcopy の併用 OPEN-SOURCE
uf2conv.py firmware.uf2 -c -o firmware.bin を実行し、次に objcopy -I binary -O ihex --change-addresses 0x2000 firmware.bin firmware.hex を実行してフラッシュオフセットを追加します。
objcopy (GNU binutils / arm-none-eabi) FREE
ツールチェーンの arm-none-eabi-objcopy -I binary -O ihex firmware.bin firmware.hex を使用します。データを正しいメモリ位置に配置するために --change-addresses を追加してください。
SRecord (srec_cat) OPEN-SOURCE
objcopy のオフセット処理がうまく動作しない場合は、srec_cat firmware.bin -binary -offset 0x2000 -o firmware.hex -intel を実行して、正確なアドレスを持つ Intel HEX を構築します。
これらの形式について
UF2 ファイルは Microsoft の USB Flashing Format によるファームウェアイメージで、USB 経由でマイコンボードをプログラミングするために使用されます。アプリで開くのではなく、ボードをブートローダーモードにして USB ドライブとして認識させ、そのドライブに .uf2…
.UF2 の詳細を開く →.hexファイルはIntel HEXファイルです。Arduino、AVR、PICチップなどのマイコン用にコンパイルされたファームウェアが、プレーンテキストのレコードとして保存されています。PC上で実行するものではなく、Arduino…
.HEX の詳細を開く →品質と注意点
- UF2 から HEX へ一括変換するコマンドはありません。中間の生の
.binでアドレス情報が失われるため、objcopy または SRecord のステップでフラッシュベースオフセットを再指定する必要があります。 - オフセットを間違えると、
.hexはコードを誤ったメモリ位置に配置してしまい、デバイスが起動しなくなったり(ブリック)、起動に失敗したりする可能性があります。 - 一部の objcopy バージョンにはバイナリから ihex への変換にデグレード(先祖返り)がありました。正確なオフセットが必要な場合は SRecord が推奨される代替手段です。
よくある質問
なぜ2ステップ必要なのですか?
uf2conv.py は生の .bin と C 配列のみを出力し、Intel HEX は出力しないためです。UF2 を .bin に変換してから、objcopy や SRecord を使って .hex を作成します。どのオフセットを使用すべきですか?
--change-addresses または srec の -offset で指定します。objcopy はどこで入手できますか?
arm-none-eabi-objcopy を使用してください。objcopy でアドレスが正しくならない場合は?
srec_cat を明示的な -offset 付きで使用してください。バイナリから Intel HEX へのアドレス配置を確実に処理できます。