查看: 3340|回复: 0

[原创] 【经验分享】RT1064 serial download模式blhost命令行烧录

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20003
最后登录
2024-4-24
发表于 2020-9-15 18:07:55 | 显示全部楼层 |阅读模式

【经验分享】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.jpg

图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。

下面给出这次操作相关的所有命令:
  1. elftosb.exe -f imx -V -c imx-flexspinor-normal-unsigned.bd -o ivt_evkmimxrt1064_iled_blinky.bin evkmimxrt1064_iled_blinky.s19

  2. sdphost.exe -t 50000 -p COM41,115200 -j -- write-file 0x20000000 rt1064_ivt_flashloader.bin

  3. sdphost.exe -t 50000 -p COM41,115200 -j -- jump-address 0x20000400

  4. blhost.exe -t 50000 -p COM41,115200 -j -- get-property 1 0

  5. blhost.exe -t 50000 -p COM41,115200 -j -- get-property 24 0

  6. blhost.exe -t 5242000 -p COM41,115200 -j -- fill-memory 0x20202000 4 0xc0000007 word

  7. blhost.exe -t 5242000 -p COM41,115200 -j -- fill-memory 0x20202004 4 0 word

  8. blhost.exe -t 50000 -p COM41,115200 -j -- configure-memory 9 0x20202000

  9. blhost -t 5242000 -p COM41,115200 -j -- read-memory 0x70000000 1024 flexspiNorCfg.dat 9

  10. blhost -t 2048000 -p COM41,115200 -j -- flash-erase-region 0x70000000 0x6000 9

  11. blhost -t 5242000 -p COM41,115200 -j -- fill-memory 0x20203000 4 0XF000000F word

  12. blhost -t 50000 -p COM41,115200 -j -- configure-memory 9 0x20203000

  13. blhost -t 5242000 -p COM41,115200 -j -- read-memory 0x70000000 1024 flexspiNorCfg.dat 9

  14. blhost -t 5242000 -p COM41,115200 -j -- write-memory 0x70001000 ivt_evkmimxrt1064_iled_blinky_nopadding.bin 9

  15. 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地址等

  1. options {
  2.     flags = 0x00;
  3.     startAddress = 0x70000000;
  4.     ivtOffset = 0x1000;
  5.     initialLoadSize = 0x2000;
  6.     //DCDFilePath = "dcd.bin";
  7.     # Note: This is required if the default entrypoint is not the Reset_Handler
  8.     #       Please set the entryPointAddress to the base address of vector table
  9.     // entryPointAddress = 0x70002000;
  10. }

  11. sources {
  12.     elfFile = extern(0);
  13. }

  14. section (0)
  15. {
  16. }
复制代码

运行之后,生成两个文件: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.jpg

图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.jpg
3_1.jpg

图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.jpg

图4


2.7 读取FDCB区域为空

blhost -t 5242000 -pCOM41,115200 -j -- read-memory 0x70000000 1024 flexspiNorCfg.dat 9

该命令用于从0X70000000读取1024个字节存放在flexspiNorCfg.dat区域

通过上面的命令运行,查看之后可以发现,flexspiNorCfg.dat里面的数据还为空。

5.jpg

图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.jpg

图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文件。
  1. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>"C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app\rt1064 cmd.bat"

  2. 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
  3.         Section: 0x0
  4. iMX bootable image generated successfully

  5. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10

  6. 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
  7. {
  8.    "command" : "write-file",
  9.    "response" : [ 2290649224 ],
  10.    "status" : {
  11.       "description" : "1450735702 (0x56787856) HAB disabled.",
  12.       "value" : 1450735702
  13.    }
  14. }

  15. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 100

  16. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sdphost.exe -t 50000 -p COM41,115200 -j -- jump-address 0x20000400
  17. {
  18.    "command" : "jump-address",
  19.    "response" : [],
  20.    "status" : {
  21.       "description" : "1450735702 (0x56787856) HAB disabled.",
  22.       "value" : 1450735702
  23.    }
  24. }

  25. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 200

  26. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost.exe -t 50000 -p COM41,115200 -j -- get-property 1 0
  27. {
  28.    "command" : "get-property",
  29.    "response" : [ 1258422528 ],
  30.    "status" : {
  31.       "description" : "0 (0x0) Success.",
  32.       "value" : 0
  33.    }
  34. }

  35. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10

  36. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost.exe -t 50000 -p COM41,115200 -j -- get-property 24 0
  37. {
  38.    "command" : "get-property",
  39.    "response" : [ 1409351680 ],
  40.    "status" : {
  41.       "description" : "0 (0x0) Success.",
  42.       "value" : 0
  43.    }
  44. }

  45. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10

  46. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost.exe -t 5242000 -p COM41,115200 -j -- fill-memory 0x20202000 4 0xc0000007 word
  47. {
  48.    "command" : "fill-memory",
  49.    "response" : [],
  50.    "status" : {
  51.       "description" : "0 (0x0) Success.",
  52.       "value" : 0
  53.    }
  54. }

  55. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10

  56. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost.exe -t 5242000 -p COM41,115200 -j -- fill-memory 0x20202004 4 0 word
  57. {
  58.    "command" : "fill-memory",
  59.    "response" : [],
  60.    "status" : {
  61.       "description" : "0 (0x0) Success.",
  62.       "value" : 0
  63.    }
  64. }

  65. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10

  66. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost.exe -t 50000 -p COM41,115200 -j -- configure-memory 9 0x20202000
  67. {
  68.    "command" : "configure-memory",
  69.    "response" : [],
  70.    "status" : {
  71.       "description" : "0 (0x0) Success.",
  72.       "value" : 0
  73.    }
  74. }

  75. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 100

  76. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 5242000 -p COM41,115200 -j -- read-memory 0x70000000 1024 flexspiNorCfg.dat 9
  77. {
  78.    "command" : "read-memory",
  79.    "response" : [ 1024 ],
  80.    "status" : {
  81.       "description" : "0 (0x0) Success.",
  82.       "value" : 0
  83.    }
  84. }

  85. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 200

  86. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 2048000 -p COM41,115200 -j -- flash-erase-region 0x70000000 0x6000 9
  87. {
  88.    "command" : "flash-erase-region",
  89.    "response" : [],
  90.    "status" : {
  91.       "description" : "0 (0x0) Success.",
  92.       "value" : 0
  93.    }
  94. }

  95. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 100

  96. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 5242000 -p COM41,115200 -j -- fill-memory 0x20203000 4 0XF000000F word
  97. {
  98.    "command" : "fill-memory",
  99.    "response" : [],
  100.    "status" : {
  101.       "description" : "0 (0x0) Success.",
  102.       "value" : 0
  103.    }
  104. }

  105. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10

  106. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 50000 -p COM41,115200 -j -- configure-memory 9 0x20203000
  107. {
  108.    "command" : "configure-memory",
  109.    "response" : [],
  110.    "status" : {
  111.       "description" : "0 (0x0) Success.",
  112.       "value" : 0
  113.    }
  114. }

  115. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 10

  116. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 5242000 -p COM41,115200 -j -- read-memory 0x70000000 1024 flexspiNorCfg.dat 9
  117. {
  118.    "command" : "read-memory",
  119.    "response" : [ 1024 ],
  120.    "status" : {
  121.       "description" : "0 (0x0) Success.",
  122.       "value" : 0
  123.    }
  124. }

  125. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 200

  126. 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
  127. {
  128.    "command" : "write-memory",
  129.    "response" : [],
  130.    "status" : {
  131.       "description" : "0 (0x0) Success.",
  132.       "value" : 0
  133.    }
  134. }

  135. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>sleep 200

  136. C:\KerryPC\IMXRTCode\Question\RT1064\flashloader\flashloader baudrate\blhost app>blhost -t 5242000 -p COM41,115200 -j -- read-memory 0x70000000 0x6000 flexspiNorCfg.dat 9
  137. {
  138.    "command" : "read-memory",
  139.    "response" : [ 24576 ],
  140.    "status" : {
  141.       "description" : "0 (0x0) Success.",
  142.       "value" : 0
  143.    }
  144. }
复制代码
blhost app.zip (834.4 KB, 下载次数: 21)
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-4-24 19:12 , Processed in 0.116249 second(s), 19 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表