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

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

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

一、自动识别功能意义

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

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

二、开启自动识别功能

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

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

三、自动识别依赖的配置

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

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 未定义

四、自动识别功能测试

  了解了这个自动识别功能细节之后,让我们在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]引脚。

  随便选一个例程 \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主页知乎主页微信公众号 平台上。

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

痞子衡嵌入式:自识别特性(Auto Probe)可以让i.MXRT1060无需FDCB也能从NOR Flash启动的更多相关文章

  1. 痞子衡嵌入式:其实i.MXRT下改造FlexSPI driver同样支持AHB方式去写入NOR Flash

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下改造FlexSPI driver以AHB方式去写入NOR Flash. 痞子衡前段时间写过一篇 <串行NAND Fl ...

  2. 痞子衡嵌入式:深扒i.MXRTxxx系列ROM中集成的串行NOR Flash启动SW Reset功能及其应用场合

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中集成的串行NOR Flash启动SW Reset功能及其应用场合. 在串行 NOR Flash 热启动过程 ...

  3. 痞子衡嵌入式:揭秘i.MXRT1060,1010上串行NOR Flash冗余程序启动设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1060,1010上串行NOR Flash冗余程序启动设计. 工业产品设计里经常会有冗余程序/备份程序设计的需求,因为在工业 ...

  4. 痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案. 对于以 i.MXRT 这类没有内部 NVM (Non-Volati ...

  5. 痞子衡嵌入式:在i.MXRT启动头FDCB里使能串行NOR Flash的QPI/OPI模式

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在FDCB里使能串行NOR Flash的QPI/OPI模式. 我们知道 Flash 读时序里有五大子序列 CMD + ADDR + MO ...

  6. 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(2) - 识别当前i.MXRT型号

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记(2)之识别当前i.MXRT型号. 文接上篇 <超级下载算法(RT-UFL)开发笔记(1) - 执行在不同CM ...

  7. 痞子衡嵌入式:在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺. 恩智浦 MCU SE 团队近期一直在加班加点赶 SBL 项目 ...

  8. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU特性介绍(2)- RT1052DVL6性能实测

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的性能. 在前面的文章 i.MXRT微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2017年推出的新 ...

  9. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(9)- KBOOT特性(IntegrityCheck)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之完整性检测(Integrity Check)特性. Application完整性检测是非常 ...

随机推荐

  1. Testing Beta Round (Unrated)

    比赛链接:https://codeforces.com/contest/1390 A. 123-sequence 题意 给出一个只含有 $1,2,3$ 的数组,问使所有元素相同至少要替换多少元素. 题 ...

  2. Educational Codeforces Round 91 (Rated for Div. 2) D. Berserk And Fireball

    题目链接:https://codeforces.com/contest/1380/problem/D 题意 给出一个大小为 $n$ 的排列 $a$ 和一个序列 $b$,有两种操作: 花费 $x$ 消除 ...

  3. 【noi 2.6_9285】盒子与小球之三(DP)

    题意:有N个相同的球,M个不同的盒子,每个盒子最多放K个球.请计算将这N个球全部放入盒子中的方案数模1000007后的结果. 解法:f[i][j]表示i个盒子里放j个球的方案数. 1.得到3重循环的坐 ...

  4. Codeforces Round #652 (Div. 2) B. AccurateLee(思维)

    题意: 给你一个01字符串,现在你可以删除其中的一些子序列,要求如下:当遇到1 0的俩个连续子字符串后,可以删除其中的一个字符,现在要求把他删到尽量最短并且字典序最小,输出最后的字符串 题解: 刚开始 ...

  5. 使用eclipse搭建第一个java web应用

    一. 首先是eclipse得下载,你要下载Eclipse IDE for Java EE这种类型的,我之前下载的Eclipse IDE for Enterprise Java Developers是官 ...

  6. F(x) HDU - 4734

    题意: 给你一个n位的数x(A(n)A(n-1)...A(1)),那么F(x)=A(n)*2^(n-1)+A(n-1)*2^(n-2)......+A(1)*2^(0) 题目输入A.B 你需要找出来在 ...

  7. 请问什么时候对象分配会不在 TLAB 内分配

    Java 对象分配流程 我们这里不考虑栈上分配,这些会在 JIT 的章节详细分析,我们这里考虑的是无法栈上分配需要共享的对象. 对于 HotSpot JVM 实现,所有的 GC 算法的实现都是一种对于 ...

  8. [Golang]-1 Slice与数组的区别

    目录 数组 1.创建数组: 2.数组是值拷贝传递: 切片(slice) 1.首先看看slice的源码结构: 2.slice的创建: 3.slice使用make创建 4.切片作为参数传递 5.Golan ...

  9. struct 和 class的区别

    struct和class如果按照在C的时代,还是有很大差别的. c中struct的定义如下: struct  结构名 {   成员表 }: 因为struct是一种数据类型,那么就肯定不能定义函数,所以 ...

  10. C++含有无符号类型的表达式的计算

    unsigned u=10; int i=-42; cout<<i+i<<endl; cout<<u+i<<endl; 在第二个输出表达式中,相加前首先 ...