MicroPython Hex ファイル
MicroPythonをビルドすると、コンパイラは MicroPython ファームウェアを含む Intel Hex ファイルを生成します。このファイルにデータを追加して、MicroPython バージョン情報、または起動時に実行する Python コードを含められます。
一般的なメモリレイアウトは次のとおりです:
0x00000000
: MicroPython ファームウェアの先頭 - 最大 248 KB0x0003e000
: 追加スクリプトの先頭(オプション) - 最大 8 KB0x100010c0
: UICR カスタマー[16]レジスター, MicroPython 情報の先頭 - 28バイト
注釈
Intel Hex ファイルにデータを追加したり変更したりする場合は、データのアドレスが増分順に格納されていることを確認してください。後方にアドレスジャンプがある場合、DAPLink はファイルをフラッシュできません。
UICR フォーマット
ユーザー情報構成レジスター (UICR: User Information Configuration Registers)は、不揮発性メモリーの領域で、ユーザー固有の設定を保管できます。最初の128バイトは予約されていますが、残りの128バイトを使用して任意のデータを格納できます。
MicroPython は、UICR カスタマー[16]レジスターから開始して、リトルエンディアンで次の情報を格納します。
0x100010c0
: 4バイト整数のマジック値0x17eeb07c
0x100010c4
: 4バイト整数値0xffffffff
0x100010c8
: 4バイト整数値0x0000000a
(フラッシュページサイズ 1024 の2進対数)0x100010ca
: 2バイト整数値0x0000
(ファームウェアの開始ページ)0x100010cc
: ファームウェアのページ数の2バイト整数値0x100010d0
: 4バイト整数値0xffffffff
0x100010d4
: ファームウェア内のバージョン文字列のあるアドレスを示す4バイト整数値0x100010d8
: 4バイト整数値0x00000000
firmware.hex ファイルを作成する手順
MicroPython をビルドするには yotta ツールを使いますが、その前にビルドの準備として Makefile で追加のファイルを生成しなければなりません。追加のデータは後で hex ファイルに追加されます。
make all
コマンドを実行すると、以下の順序で処理されます:
tools/makeversionhdr.py
スクリプトがmicrobitversion.h
ファイルを作成します。このファイルはビルド情報をもったマクロを定義しています。yotta がソースをビルドし、ファームウェアだけの生の hex ファイルを作成します
tools/adduicr.py
スクリプトが生の hex ファイルに UICR を追加します完成した hex ファイルを
build/firmware.hex
に置きますユーザは、オプションで
tools/makecombinedhex.py
(または他のツール)を使ってスクリプトを追加できます
ユーザースクリプトのインクルード
ユーザースクリプトは MicroPython ファイルシステムに保存され、main.py スクリプトが存在すれば MicroPython の起動時に実行されます。追加の Python スクリプトを main.py ファイルや REPL からインクルードして実行することもできます。
ファイルシステムを作成し、それをHEXファイルにインクルードします。Python エディタは MicroPython V1 と V2 の HEX ファイルにファイルシステムを追加し、両方のハードウェアの互換性を確保するために両方を Universal HEX ファイルに結合しなければなりません。
追加スクリプトの形式(廃止予定) V1
スクリプトを MicroPython の最後に追加する方法は現在では使われていません。Python ファイルは ファイルシステム に格納されるようになり、 main.py
がプログラムの入り口になります。
MicroPython はアドレス 0x0003e000
の先頭2バイトをチェックします。これは、追加スクリプトがあるかを示すマジック文字列です。マジック文字列が見つかった場合、MicroPython ファイルシステム に main.py ファイルが格納されていない限り、追加されている Python コードを自動的に実行します。
0x0003e000
: 2 バイト "MP"0x0003e002
: 2バイト、追加されたスクリプトの長さ(バイト単位)のリトルエンディアン整数(この長さにヘッダ4バイト分は含みません)0x0003e004
: バイト列として格納したスクリプト。MicroPython で使う際には utf-8 でデコードします。