来源(Github Issue #548开启中):https://github.com/bbcmicrobit/m ... uecomment-418626393 MicroPython的作者Damien
下面是.hex文件的简短说明。
常规内存地址布局 (以十六进制显示):
代码: 全选
0x00000000: 固件
0x100010c0: UICR 数据, 28 bytes
0x0003e000: 附加的脚本 (可选)
- yotta 生成源代码并创建一个只带固件的裸hex文件 (上面第一部分)
- tools/adduicr.py 将 UICR 添加到裸hex (上面第二部分);将输出置于build/firmware.hex内;这送出作为官方固件
- 用户可以选择使用tools/makecombinedhex.py的附加脚本 (或其他方式)
UICR 格式 (存储为little endian的所有内容):
- 4-byte 整数magic值为 0x17eeb07c
- 4-byte 整数值为 0xffffffff
- 4-byte 整数值为 10 (以log 基底为 2 的flash page 为 1024 bytes 大小 )
- 2-byte 整数值为 0 (固件的起始页)
- 2-byte 存储固件使用的page数的整数
- 4-byte 整数值为 0xffffffff
- 4-byte 固件中具有版本字符串地址的整数
- 4-byte 整数值为 0
附加的脚本格式:
- 2 bytes "MP"
- 2-byte little endian 接在4 byte header后面附加脚本的长度 (以bytes为单位) 整数
- 脚本 bytes
译注:UICR(User information configuration registers)是nrf51822保存用户特殊设置的非易失存储寄存器(Non-volatile memory),UICR只有通过全片擦除后才能重新写入,不能单独擦除。