STM32CubeProgrammer脚本文件的后缀为".tsv",ST公司官方也叫做FlashLayout。在烧写"TF-A固件"之前,我们需要用"Notepad++"软件打开"后缀为.tsv"的脚本文件,根据需求决定哪些文件需要更新,设置好这个脚本文件。
.tsv是文本格式的,很容易阅读。关于.tsv 语法的详细讲解,请参考:
https://wiki.st.com/stm32mpu/wiki/STM32CubeProgrammer flashlayout
一、安装"Notepad++"软件
1、双击"npp.8.5.2.Installer.x64.exe",得到下面的界面:
2、点击"OK"按钮
3、点击"下一步"
4、点击"我接受"
5、点击"下一步"
6、全部勾选,点击"下一步"
7、勾选"Create Shortcut on Desktop",然后点击"安装"
8、点击"完成" 。
9、点击"文件",找到需要打开的tf-a.tsv文件,选中后,点击打开。
10、打开"C:\Program Files\STMicroelectronics\images"目录下的tf-a.tsv,得到下图:
11、点击"视图",再点击"显示符号",最后点击"显示空格与制表符",得到下图:
得到下图:
二、tf-a.tsv文件配置解析
1、Opt域
Opt是第一个项,此选项可以设置为"-"、"P"、"D"或"E",通常使用"-"或"P"。
"-":表示分区或者设备无需修改,如果Device域为 none,那么Opt强制为"-"。
"P": 表示需要向"分区"或者"设备"烧写固件。
STM32CubeProgrammer本质是通过boot来烧写系统的,也就是先把boot加载到板子的DDR里面并运行,然后使用uboot来烧写系统。uboot会请求需要烧写的二进制文件,然后将其烧写到"指定的分区"或者"指定的Falsh设备"里面。
"D":删除"指定的分区"或"指定的设备"。
"E":表示不更新"指定的分区"或"指定的设备",相关的"Id 项"会被跳过。
"P"还可以和"D"或"E"搭配使用:
"PE":不用更新程序,即"指定的分区"或"指定的设备"不需要烧写固件,这样,我们就可以单独更新tf-a、uboot、kernel或者rootfs。
"PD":删除并更新,也可以写作"DP"。
"PDE":删除并且保持为空,也可以写作 PED/DPE/DEP/EPD/EDP。
2、Id域
STM32CubeProgrammer通过"Id域"来确定烧写方法,使用它来识别下载到设备的"下一个二进制文件":
ROM 或者FSBL:二进制文件要加载到RAM中。
SSBL(uboot):二进制文件要烧写到Flash中。
默认的Id含义:
3、Name域
Name域为一段字符串,也就是目标内存段的名字;
4、Type域
"Type域"仅仅用于uboot,用来选择需要更新的 Flash 区域:
1)、SD卡或者EMMC设备对应的"GPT分区"。
2)、原始的Flash设备,如 NAND、NOR 等对应的MID分区。
SD/EMMC和NAND/NOR所支持的"Type类型":
STM32MP157开发板为EMMC类型,所以我们只讲EMMC下的"Type 域"含义:
Binary: 原始的二进制文件。
FileSystem: linux文件系统,为 ext2/ext4/fat格式
System: Linux内核。
5、Device 域
"Device域"指定"Uboot设备树"定义的设备和索引(从0开始),不同的设备其设备名字和索引不同:
"mmc+索引":如mmc0、mmcl、mmc2 等,对应 SD卡或EMMC。
比如:SD卡和EMMC分别接到MPI的SDMMC1和SDMMC2接口上,那么SD卡和EMMC 分别为mmc0 和mmcl。
"nor+索引":如 nor0,对应NOR或者OUADSPIFlash。
"nand+索引": 如 nand0,对应连接到FMC总线上的并行NAND Flash。
"spi-nand+索引":如 spi-nand0,对应连接到QSPI上的串行NAND Flash。
"none": 仅用于RAM,就是将固件加载到RAM里面,仅允许启动阶段使用,注意:其"Type域"要为Binary,"Offset域"要为0,Opt 域为'-'。
"ram+索引":如 ram0,将烧写固件加载到RAM中运行。
6、Offset域
Offset 就是偏移,支持的值如下:
1)、boot1:EMMC的第1个启动区域分区。
2):boot2:EMMC的第2个启动区域分区。
3):数字:具体的偏移值,单位为字节。
7、Binary域
STM32CubeProgrammer软件要使用的二进制文件。