【经验分享】RT1064 serial download模式blhost命令行烧录
一 文档简介
之前一直借助于MCUBootUtility工具或者flashloader MFGTool去下载代码到RT外部QSPI flash并实现代码boot功能,对RT整个烧录流程与memory的具体过程总是有点模糊不清,所以为了弄清具体的serial download模式下下载的情况,与flashloader以及外部memory具体对应过程情况,本次文档准备好flashloader文件,app文件,然后使用blhost命令行直接操作flashloader并且实现QSPI flash的擦除烧录读写功能。这样更能够帮助理解具体的memory烧录情况。
二 文档内容
如果多次使用过MCUBootUtility工具烧录,相信对memory烧录之后的image空间情况比较清楚,这里以明文不带任何加密,RT1064的内部QSPIflash为例,可以知道一个app烧录之后的空间情况如下:
图1
从0X70000000开始的512字节为FDCB,放flash device config代码,用于boot起来配置flexSPI接口相关信息。 然后从0X70001000开始放IVT,DCD数据,再后面通常试0X70002000之后开始放app具体代码。那么这些代码都是什么时候,通过什么命令去下载的呢?这里,一般再烧录之前,把image空间分为两部分:FDCB和IVT+APP
FDCB:是通过flashloader给定具体命令ID,然后flash loader去生成FDCB并且烧录的。
IVT+APP:是通过elftosb + imx-flexspinor-normal-signed.bd+ app image文件,生成的组合文件,然后再烧录的。
首先把如下文件都准备好放到一个文件夹:
blhost.exe
elftosb.exe
sdphost.exe
rt1064_ivt_flashloader.bin
evkmimxrt1064_iled_blinky.s19
imx-flexspinor-normal-unsigned.bd
共6个文件,除了evkmimxrt1064_iled_blinky.s19是自己生成的不带XIP 头(XIP_BOOT_HEADER_ENABLE=0)的app image之外,其他的都可以到flashloader里面找到:
或者SDK middleware里面也可以找到相关的软件,最新版本blhost, elftosb工具可以到官网搜索下载。
MIMXRT1064进入serial download模式:SW71-OFF,2-OFF,3-OFF, 4-ON, 然后reset开发板,进入serial download模式。
另外PC device management里面查看开发板对应的UART COM port,这里是COM41。
下面给出这次操作相关的所有命令: - elftosb.exe -f imx -V -c imx-flexspinor-normal-unsigned.bd -o ivt_evkmimxrt1064_iled_blinky.bin evkmimxrt1064_iled_blinky.s19
- sdphost.exe -t 50000 -p COM41,115200 -j -- write-file 0x20000000 rt1064_ivt_flashloader.bin
- sdphost.exe -t 50000 -p COM41,115200 -j -- jump-address 0x20000400
- blhost.exe -t 50000 -p COM41,115200 -j -- get-property 1 0
- blhost.exe -t 50000 -p COM41,115200 -j -- get-property 24 0
- blhost.exe -t 5242000 -p COM41,115200 -j -- fill-memory 0x20202000 4 0xc0000007 word
- blhost.exe -t 5242000 -p COM41,115200 -j -- fill-memory 0x20202004 4 0 word
- blhost.exe -t 50000 -p COM41,115200 -j -- configure-memory 9 0x20202000
- blhost -t 5242000 -p COM41,115200 -j -- read-memory 0x70000000 1024 flexspiNorCfg.dat 9
- blhost -t 2048000 -p COM41,115200 -j -- flash-erase-region 0x70000000 0x6000 9
- blhost -t 5242000 -p COM41,115200 -j -- fill-memory 0x20203000 4 0XF000000F word
- blhost -t 50000 -p COM41,115200 -j -- configure-memory 9 0x20203000
- blhost -t 5242000 -p COM41,115200 -j -- read-memory 0x70000000 1024 flexspiNorCfg.dat 9
- blhost -t 5242000 -p COM41,115200 -j -- write-memory 0x70001000 ivt_evkmimxrt1064_iled_blinky_nopadding.bin 9
- blhost -t 5242000 -p COM41,115200 -j -- read-memory 0x70000000 0x6000 flexspiNorCfg.dat 9
复制代码
2.1 生成IVT+APP文件
elftosb.exe -f imx -V -c imx-flexspinor-normal-unsigned.bd -oivt_evkmimxrt1064_iled_blinky.bin evkmimxrt1064_iled_blinky.s19
imx-flexspinor-normal-unsigned.bd定义了起始地址,IVT地址等
- options {
- flags = 0x00;
- startAddress = 0x70000000;
- ivtOffset = 0x1000;
- initialLoadSize = 0x2000;
- //DCDFilePath = "dcd.bin";
- # Note: This is required if the default entrypoint is not the Reset_Handler
- # Please set the entryPointAddress to the base address of vector table
- // entryPointAddress = 0x70002000;
- }
- sources {
- elfFile = extern(0);
- }
- section (0)
- {
- }
复制代码
运行之后,生成两个文件:ivt_evkmimxrt1064_iled_blinky.bin, ivt_evkmimxrt1064_iled_blinky_nopadding.bin
即app补了IVT的代码,ivt_evkmimxrt1064_iled_blinky.bin从0开始填0,然后0X1000放IVT, 0x2000放APP. ivt_evkmimxrt1064_iled_blinky_nopadding.bin没有填0,直接从IVT开始。后面会使用blhost将ivt_evkmimxrt1064_iled_blinky_nopadding.bin烧录到0X70001000区域。
2.2 烧录带IVT的flashloader到DTCM 0x20000000
sdphost.exe -t 50000 -p COM41,115200 -j -- write-file0x20000000 rt1064_ivt_flashloader.bin
使用sdphost工具,烧录rt1064_ivt_flashloader.bin 带IVT的flashloader到DTCM
2.3 跳转到flashloader IVT地址
sdphost.exe -t 50000 -p COM41,115200 -j -- jump-address0x20000400
由于flashloader是non-xip的,所以它的IVT是在偏移地址0X400,所以要跳转到flashloader的IVT,直接跳转到0X20000400.
查看rt1064_ivt_flashloader.bin文件,也可以看到在0X400放了IVT数据:
图2
跳转之后,将会运行flashloader代码。
2.4 通过bootloader查看属性
blhost.exe -t 50000 -p COM41,115200 -j -- get-property 1 0
blhost.exe -t 50000 -p COM41,115200 -j -- get-property 24 0
0x01 The Current Version of the MCU bootloader
0x18 Target Version - the target build version number
具体情况,可以到blhost user’s guider查看:
\Flashloader_RT1064_1.0_GA\doc
2.5 临时存放flash option
blhost.exe -t 5242000 -pCOM41,115200 -j -- fill-memory 0x20202000 4 0xc0000007 word
blhost.exe -t 5242000 -pCOM41,115200 -j -- fill-memory 0x20202004 4 0 word
通过RM 的ROM章节,我们知道RT106X ROM有两个option,option0 和option1可以定义flash相关配置,具体查看RM, Table 9-39,Table9-40. Table 9-41.
0xc0000007 各位的情况:
#1. Prepare Flash option
# 0xc0000007 is the tag for Serial NORparameter selection
# bit [31:28] Tag fixed to 0x0C
# bit [27:24] Option size fixed to 0
# bit [23:20] Flash type option
# 0 - QuadSPI SDR NOR
# bit [19:16] Query pads (Pads used forquery Flash Parameters)
# 0 - 1
# bit [15:12] CMD pads (Pads used for queryFlash Parameters)
# 0 - 1
# bit [11: 08] Quad Mode Entry Setting,fixed to 0 for this device
# bit [07: 04] Reserved, fixed to 0
# bit [03: 00] Flash Frequency, devicespecific
图3
这里的命令只是将0xc0000007 flash option的配置,临时存放在内部的OCRAM。
2.6 配置外部memory
blhost.exe -t 50000 -pCOM41,115200 -j -- configure-memory 9 0x20202000
该命令用于使用刚才放在0X20202000的option配置,去配置memory ID为9的情况。
MemoryID和外部memory 设备对应情况如下:
图4
2.7 读取FDCB区域为空
blhost -t 5242000 -pCOM41,115200 -j -- read-memory 0x70000000 1024 flexspiNorCfg.dat 9
该命令用于从0X70000000读取1024个字节存放在flexspiNorCfg.dat区域
通过上面的命令运行,查看之后可以发现,flexspiNorCfg.dat里面的数据还为空。
图5
2.8 擦除外部QSPIFLASH memory
blhost -t 2048000 -pCOM41,115200 -j -- flash-erase-region 0x70000000 0x6000 9
可以先计算好app的长度,然后加上1024字节的FDCB,可以擦除掉对应的区域,用于后续写相关的数据。这里生成的Ivt_evkmimxrt1064_iled_blinky_nopadding.bin长度以及达到0X44CD,所以加0X1000,这里擦掉0X6000的长度供后续使用。
如果不放心,也可以擦除之后,再读出来看看是不是都是0XFF。
2.9 配置写FDCB区域并读出
blhost -t 5242000 -pCOM41,115200 -j -- fill-memory 0x20203000 4 0XF000000F word
blhost -t 50000 -pCOM41,115200 -j -- configure-memory 9 0x20203000
blhost -t 5242000 -pCOM41,115200 -j -- read-memory 0x70000000 1024 flexspiNorCfg.dat 9
首先把0XF000000F写入到临时RAM区域0x20203000,然后使用configure-memory配置对应的FDCB区域。
0xf000000f是通知flashloader烧写FDCB(FlexSPI NOR config block)的标志。
图6
可以发现,运行了上面的命令之后,FDCB区域以及写入了数据。
2.10 写入带IVT的app到0X70001000
blhost -t 5242000 -pCOM41,115200 -j -- write-memory 0x70001000 ivt_evkmimxrt1064_iled_blinky_nopadding.bin9
将之前准备好的ivt_evkmimxrt1064_iled_blinky_nopadding.bin文件烧录到0X70001000从IVT开始的地址区域。
blhost -t 5242000 -pCOM41,115200 -j -- read-memory 0x70000000 0x6000 flexspiNorCfg.dat 9
读出整个image查看,可以发现FDCB+IVT+APP已经完整了。
MIMXRT1064进入boot frominternal模式:SW7: 1-OFF, 2-OFF, 3-ON, 4-OFF
Reset开发板,可以发现LED闪烁,完成了image的烧录。
如下是整个log的情况,附件分享对应的command的bat文件。 - C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>"C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app\rt1064 cmd.bat"
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>elftosb.exe -f imx -V -c imx-flexspinor-normal-unsigned.bd -o ivt_evkmimxrt1064_iled_blinky.bin evkmimxrt1064_iled_blinky.s19
- Section: 0x0
- iMX bootable image generated successfully
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sdphost.exe -t 50000 -p COM41,115200 -j -- write-file 0x20000000 rt1064_ivt_flashloader.bin
- {
- "command" : "write-file",
- "response" : [ 2290649224 ],
- "status" : {
- "description" : "1450735702 (0x56787856) HAB disabled.",
- "value" : 1450735702
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 100
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sdphost.exe -t 50000 -p COM41,115200 -j -- jump-address 0x20000400
- {
- "command" : "jump-address",
- "response" : [],
- "status" : {
- "description" : "1450735702 (0x56787856) HAB disabled.",
- "value" : 1450735702
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 200
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost.exe -t 50000 -p COM41,115200 -j -- get-property 1 0
- {
- "command" : "get-property",
- "response" : [ 1258422528 ],
- "status" : {
- "description" : "0 (0x0) Success.",
- "value" : 0
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost.exe -t 50000 -p COM41,115200 -j -- get-property 24 0
- {
- "command" : "get-property",
- "response" : [ 1409351680 ],
- "status" : {
- "description" : "0 (0x0) Success.",
- "value" : 0
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost.exe -t 5242000 -p COM41,115200 -j -- fill-memory 0x20202000 4 0xc0000007 word
- {
- "command" : "fill-memory",
- "response" : [],
- "status" : {
- "description" : "0 (0x0) Success.",
- "value" : 0
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost.exe -t 5242000 -p COM41,115200 -j -- fill-memory 0x20202004 4 0 word
- {
- "command" : "fill-memory",
- "response" : [],
- "status" : {
- "description" : "0 (0x0) Success.",
- "value" : 0
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost.exe -t 50000 -p COM41,115200 -j -- configure-memory 9 0x20202000
- {
- "command" : "configure-memory",
- "response" : [],
- "status" : {
- "description" : "0 (0x0) Success.",
- "value" : 0
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 100
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 5242000 -p COM41,115200 -j -- read-memory 0x70000000 1024 flexspiNorCfg.dat 9
- {
- "command" : "read-memory",
- "response" : [ 1024 ],
- "status" : {
- "description" : "0 (0x0) Success.",
- "value" : 0
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 200
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 2048000 -p COM41,115200 -j -- flash-erase-region 0x70000000 0x6000 9
- {
- "command" : "flash-erase-region",
- "response" : [],
- "status" : {
- "description" : "0 (0x0) Success.",
- "value" : 0
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 100
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 5242000 -p COM41,115200 -j -- fill-memory 0x20203000 4 0XF000000F word
- {
- "command" : "fill-memory",
- "response" : [],
- "status" : {
- "description" : "0 (0x0) Success.",
- "value" : 0
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 50000 -p COM41,115200 -j -- configure-memory 9 0x20203000
- {
- "command" : "configure-memory",
- "response" : [],
- "status" : {
- "description" : "0 (0x0) Success.",
- "value" : 0
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 5242000 -p COM41,115200 -j -- read-memory 0x70000000 1024 flexspiNorCfg.dat 9
- {
- "command" : "read-memory",
- "response" : [ 1024 ],
- "status" : {
- "description" : "0 (0x0) Success.",
- "value" : 0
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 200
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 5242000 -p COM41,115200 -j -- write-memory 0x70001000 ivt_evkmimxrt1064_iled_blinky_nopadding.bin 9
- {
- "command" : "write-memory",
- "response" : [],
- "status" : {
- "description" : "0 (0x0) Success.",
- "value" : 0
- }
- }
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 200
- C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 5242000 -p COM41,115200 -j -- read-memory 0x70000000 0x6000 flexspiNorCfg.dat 9
- {
- "command" : "read-memory",
- "response" : [ 24576 ],
- "status" : {
- "description" : "0 (0x0) Success.",
- "value" : 0
- }
- }
复制代码
blhost app.zip
(834.4 KB, 下载次数: 21)
|