本帖最后由 小恩GG 于 2020-9-24 16:55 编辑
Auto Probe 功能除了i.MX RT1064,i.MX RT MCU系列本身是不含有内部Flash的,所以需要外挂存储设备来存放代码程序,这样i.MX RT MCU就可以在启动阶段加载它后运行。
i.MX RT支持的外挂存储设备包括 QSPI Flash,HyperFlash,SDcard,eMMC,Nand Flash,甚至还有并行 NOR Flash等,其中 QSPI Flash运用场景的最多,官方板子也基本上都是使用 QSPI Flash作为外挂存储设备,但是有个问题,不同的QSPI Flash的厂商提供的产品在命令,存储大小及分区方面都不是完全兼容和一致的,那如何让i.MX RT MCU识别这些有差异的QSPI Flash呢?
NXP通过Bootable image的代码结构来实现,存储在外挂存储设备的i.MXRT Bootable image除了包含Application binary数据之外还包括其它额外的信息,这些额外的信息数据按功能可分有6类,但这6类信息数据并不都是必须的,其中有4类是可选的,因此一个Bootable image最多由7部分组成,最少由3部分组成。
其中Bootable image的第一个组成部分叫FDCB,是个可选组成部分,FDCB是从Flash的起始地址处开始存放的,也是Bootable image最开始部分。FDCB最大为4KB,其本身没有统一的与Flash无关的structure,具体structure根据启动Flash的接口类型(Serial/Parallel)而定,其一般是用来存储当前连接的Flash的具体特性参数,Boot ROM上电后会使用通用且可靠的Flash接口控制器配置(即Boot ROM中默认参数配置,一般是比较低速的配置)去访问外接Flash并获取FDCB,然后根据FDCB存储的参数去重新配置Flash接口控制器再去进一步访问Flash,所以如果外挂设备是Serial NOR Flash,则FDCB必须被包含在Bootable image内,但是Auto Probe 功能可以允许我们无需配置FDCB,直接无视“它”,
使能Auto Probe 功能后,在启动阶段,ROM 代码可自动识别出外挂的Serial NOR Flash,并随后配置Flash接口控制器,下面的结构体是Serial NOR Flash的FDCB原型。 实验过程首先,Auto Probe功能是i.MX RT1060特有的,所以测试的硬件平台选为MIMXRT1060-EVK,而且为了增加实验的说服性,我除了使用板载的IS25WP064测试外,还会使用MX25U6435进行验证。测试步骤如下:
Fig 1
1.2 修改存储空间分配
Fig 2
1.3 重新编译工程,生成evkmimxrt1060_iled_blinky.s19文件
Fig 3
1.4 将开发板与NXP MCU BootUtility工具建立连接(Fig 4),随后烧录Bootable image 到QSPI Flash,烧录完成后就可看到FDCB就存储在QSPI Flash的起始位置(Fig 5)。
Fig 4
Fig 5
1.5 断开连接,重新配置SW7按键为从QSPI Flash启动,上电后,观察led_blinky工程是否运行成功
1.6 重新将开发板与NXP MCU BootUtility工具建立连接,然后删除FDCB部分(Fig 6),然后重复步骤5。
Fig 6
在板载的QSPI Flash换成MX25U6435(Fig 7),重复上述的4~6步骤。
Fig 7
实验结果不管是IS25WP064还是MX25U6435,在完成步骤5和步骤6后,iled_blinky都能成功运行,有规律的点亮LED。
|