UF2是一种新的二进制文件格式,由Microsoft为PXT (也称为Microsoft MakeCode)开发,可以通过MSC(Mass Storage Class,也称为可移动闪存驱动器)方式更新程序。与DAPlink类似,UF2也提供了CDC串行接口,可以方便的和主机通信与调试程序。
总览
UF2文件包含512个字节的块,每个块都是独立的,并且彼此独立。每个512字节块包括(请参阅下面的详细信息):
- 开头和结尾的魔术数字
- 数据应刷新的地址
- 多达476个字节的数据
通过MSC传输的数据始终以512字节的倍数到达。再加上FAT文件系统结构,这意味着UF2文件的块始终与MSC写入对齐-微控制器从不获取部分文件。
魔术数字使微控制器将UF2文件块与其他数据(例如FAT表条目或某些操作系统存储的各种簿记文件)区分开。识别出UF2块后,可以立即对其进行刷新(除非闪存页面大小大于256字节;在这种情况下,需要一个缓冲区)。写入过程中文件格式的实际处理非常简单(最简单的版本中约10行C代码)。
文件格式
UF2文件由512字节块组成。每个块以32字节头开始,后跟数据和最终幻数。除数据外,所有字段都是32位无符号小端整数。
位置 | 尺寸 | 值 |
---|---|---|
0 | 4 | 第一个标志,0x0A324655(“UF2\n”) |
4 | 4 | 第二个标志, 0x9E5D5157 |
8 | 4 | 标志 |
12 | 4 | 闪存中应写入数据的地址 |
16 | 4 | 数据中使用的字节数(通常为256) |
20 | 4 | 顺序块号; 从0开始 |
24 | 4 | 文件中的块总数 |
28 | 4 | 文件大小或电路板系列ID或零 |
32 | 476 | 数据,用零填充 |
508 | 4 | 结束, 0x0AB16F30 |
硬件平台
目前UF2可以支持下面硬件:
Microchip ATSAMD21 and ATSAMD51
Arduino UNO
STM32F103
STM32F4
Nordic NRF52840
Linux (RPi Zero)
Cypress FX2
关于UF2的一些参考:
https://makecode.com/blog/one-chip-to-flash-them-all
https://github.com/Microsoft/uf2