固件十六进制文件¶
构建 MicroPython 时,编译器会生成一个包含 MicroPython 固件的 Intel Hex 文件。然后可以将其他数据添加到此文件中,以包含有关 MicroPython 版本或要在启动时执行的 Python 代码的信息。
使用的一般内存布局是:
0x00000000
:MicroPython 固件启动 - 高达 248 KB0x0003e000
: 附加脚本的开始(可选) - 最多 8 Kbs0x100010c0
: UICR 客户[16] 注册,MicroPython 信息的开始 - 28 字节
笔记
如果您追加任何数据或修改 Intel Hex 文件,请确保数据存储的地址按递增顺序进行。如果有地址向后跳转,DAPLink 将无法刷新文件。
附加脚本格式¶
MicroPython 检查地址处的前 2 个字节0x0003e000
是否有魔法字符串,以指示是否有附加脚本。如果找到魔法字符串,它将自动执行存储在那里的 Python 代码,除非 MicroPython 文件系统中存储有 main.py 文件。
0x0003e000
: 2 字节“MP”0x0003e002
: 2字节,附加脚本的长度(以字节为单位)的小端整数(不包括这个 4 字节的标头)0x0003e004
: 以字节形式存储的脚本,供 MicroPython 使用 utf-8 解码。
UICR格式¶
用户信息配置寄存器 (UICR) 是可用于存储用户特定设置的非易失性存储器区域。前 128 字节是保留的,但我们可以使用其他 128 字节来存储任意数据。
MicroPython 从 UICR 客户 [16] 寄存器开始以小端存储以下信息:
0x100010c0
: 具有魔法值的 4 字节整数0x17eeb07c
0x100010c4
: 带值的 4 字节整数0xffffffff
0x100010c8
: 带值的 4 字节整数0x0000000a
(闪存页面大小的日志基数为 2,为 1024 字节)0x100010ca
: 带值的 2 字节整数0x0000
(固件的起始页)0x100010cc
:2 字节整数存储固件使用的页数0x100010d0
: 带值的 4 字节整数0xffffffff
0x100010d4
: 4 字节整数,版本字符串在固件中的地址0x100010d8
: 带值的 4 字节整数0x00000000
创建firmware.hex 文件的步骤¶
yotta 工具用于构建 MicroPython,但在此之前,Makefile 必须生成额外的文件以准备构建,然后将额外的数据添加到 hex 文件中。
运行命令执行以下步骤: make all
- 该
tools/makeversionhdr.py
脚本microbitversion.h
使用包含构建信息的宏创建文件 - Yotta 构建源代码并使用固件创建一个裸十六进制文件
- 该
tools/adduicr.py
脚本将 UICR 添加到裸十六进制 - 最终的十六进制文件放在
build/firmware.hex
- 用户可以选择使用
tools/makecombinedhex.py
(或其他工具)附加脚本