痞子衡嵌入式:自识别特性(Auto Probe)可让i.MXRT1060无需FDCB也能从NOR Flash启动


  你们好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给你们分享的是自识别特性(Auto Probe)可让i.MXRT1060无需FDCB也能从NOR Flash启动html

  接着上篇文章 《了解i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点》 继续聊。对于i.MXRT1050为表明的第一代型号,Flash里必需要放置用户FDCB配置块,存储在这颗Flash里的App才能被正常启动。这个设计在i.MXRT1060为表明的第二代型号里有了改良,BootROM中增长了一个新特性,叫Auto Probe(自动识别),这个特性能够在不放置用户FDCB配置块的状况下App也能被正常启动。今天痞子衡就跟你们好好聊聊这个特性:git

  • 备注:本文主角是i.MXRT1060,内容也基本适用i.MXRT1170,仅细节微小差异。

1、自动识别功能意义

  先从总体FlexSPI NOR启动初始化流程图上来看,自动识别(步骤X)被插入了初始化流程中,安排在FlexSPI外设第一次初始化以后,BootROM此时会尽力尝试去识别外接的Flash信息,若是识别成功则会获得一个自识别FDCB配置块,而后直接跳到FlexSPI NOR第二次初始化流程。若是识别失败,则继续按原来方式尝试读取用户FDCB配置块来获取外接Flash信息。github

  有了Flash自动识别功能,BootROM能够没必要再强制客户在Flash里放置FDCB块,不少时候客户未必特别了解Flash以及这个FDCB块结构,不用提供FDCB能够为客户省去不少耗费在Flash上的研发时间,客户仅须要全心关注App功能设计。数组

2、开启自动识别功能

  Flash自动识别功能开启位在fuse_0x450[0](或者BT_CFG[0]引脚),默认是不使能的。想要开启这个功能须要拉高相关CFG引脚或者烧写相应Fuse位。微信

fuse 0x450[0] - FLASH_AUTO_PROBE_EN,Flash自动识别功能开启

3、自动识别依赖的配置

  虽然说是Flash自动识别,但其实仍是依赖Fuse里一些配置的,一共有以下四处配置,BootROM会根据这四处配置去进入Flash自动识别程序从而获得一个匹配的FDCB配置块,因此其实这个功能更准确的说法应该是FDCB自动生成。app

fuse 0x450[10:8] - FLASH_TYPE,决定当前链接的Flash类型
fuse 0x450[3:2]  - FLASH_PROBE_TYPE,当FLASH_TYPE=0/1/7时,取代FLASH_TYPE来决定当前链接的Flash类型
fuse 0x6e0[3:1]  - xSPI_FLASH_BOOT_FREQUENCY,决定FlexSPI工做频率
fuse 0x6e0[11:8] - xSPI_FLASH_DUMMY_CYCLE,配置Flash读访问时序前须要的Dummy周期

  关于FDCB自动生成,其实就是利用了BootROM里那一套经典的FlexSPI NOR驱动(详见痞子衡以前的文章 《利用i.MXRT1xxx系列ROM提供的FlexSPI driver API可轻松IAP》 里的2.2和2.3节),自动识别就是根据配置值组合出一个匹配的 serial_nor_config_option_t option参数,经由flexSpiNorDriver->get_config()函数运行后即可获得完整的flexspi_nor_config_t config结构体(即FDCB)。函数

  serial_nor_config_option_t option参数组合规则以下表所示:工具

FLASH TYPE FLASH PROBE TYPE option值 备注
3'b000
3'b111
2'b00 0xc0000001 可进一步dummy cycle设置
2'b01 0xc0603001
2'b10 0xc0403001
2'b11 0xc0803001
3'b001 2'b00 0xc0100001 可进一步dummy cycle设置
2'b01 0xc0700001
2'b10 0xc0503001
2'b11 0xc0903001
3'b010 N/A 0xc0233001
3'b011 N/A 0xc0333001
3'b100 N/A 0xc0433001
3'b101 N/A 0xc0633001
3'b110 N/A 未定义

4、自动识别功能测试

  了解了这个自动识别功能细节以后,让咱们在MIMXRT1060-EVK上测试一下,首先须要将BT_CFG[0]引脚拉高(R325电阻焊上去,默认DNP),这就开启了自动识别功能。测试

  MIMXRT1060-EVK上默认链接的是IS25WP064AJBLE,这是一颗经典的133MHz QuadSPI NOR Flash,Fuse里的初始自动识别配置(FLASH_TYPE = 000 - Device supports 3B read,FLASH BOOT FREQ = 0 - 100MHz)适合这颗Flash,所以无需再烧录任何Fuse或拉高其余BT_CFG[x]引脚。flex

  随便选一个例程 \SDK\boards\evkmimxrt1060\demo_apps\led_blinky 。编译这个 led_blinky 工程(能够选择 flexspi_nor_debug build,工程选项里XIP_BOOT_HEADER_ENABLE=1如今能够去掉了),使用 NXP-MCUBootUtility 工具将其一键下载进Flash中,下载完成后注意擦除掉Flash前1KB的数据(即没有FDCB),切换启动模式后复位板子,能够看到LED正常闪烁,说明自动识别功能生效了。

  若是咱们将MIMXRT1060-EVK上的Flash改成S26KS512SDPBHI02,这是一颗典型的1.8V HyperFlash,那么还须要将BT_CFG2[2:0]设为 3'b010 - HyperFlash 1V8才能正常自识别。

  至此,自识别特性(Auto Probe)可让i.MXRT1060无需FDCB也能从NOR Flash启动痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到个人 博客园主页CSDN主页知乎主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就能够在手机上第一时间看了哦。