大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是自识别特性(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. docker(8)Dockerfile指令介绍

    前言 Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明. Dockerfile简介 Dockerfile是用来构建Docker镜像的构建文件,是由一系列 ...

  2. 加快你ROS安装的一篇文章

    前言: 首先ROS大家应该比较熟悉了哈,如果需要补充一下请看我之前的这篇文章 <嵌入式的我们为什么要学ROS>,对于嵌入式来说ROS是一个很好的进阶方向,所以如何快速的安装一个ROS到我们 ...

  3. 【繁星Code】如何在EF将实体注释写入数据库中

    最近在项目中需要把各个字段的释义写到数据库中,该项目已经上线很长时间了,数据库中的字段没有上千也有上百个,要是一个项目一个项目打开然后再去找对应字段查看什么意思,估计要到明年过年了.由于项目中使用En ...

  4. 翻译:《实用的Python编程》00_Setup

    课程设置与概述 欢迎访问本课程(Practical Python Programming).这个页面包含一些关于课程设置的重要信息. 课程周期和时间要求 该课程最初是作为一个由讲师主导的,持续 3 - ...

  5. 设计模式(十七)——迭代器模式(ArrayList 集合应用源码分析)

    1 看一个具体的需求 编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系.如图: 2 传统的设计方案(类图) 3 传统的方式的问题分析 ...

  6. Codeforces Round #589 (Div. 2) D. Complete Tripartite(模拟)

    题意:给你n个点 和 m条边 问是否可以分成三个集合 使得任意两个集合之间的任意两个点都有边 思路:对于其中一个集合v1 我们考虑其中的点1 假设点u和1无边 那么我们可以得到 u一定和点1在一个集合 ...

  7. 2019牛客暑期多校训练营(第六场)C Palindrome Mouse (回文树+DFS)

    题目传送门 题意 给一个字符串s,然后将s中所有本质不同回文子串放到一个集合S里面,问S中的两个元素\(a,b\)满足\(a\)是\(b\)的子串的个数. 分析 首先要会回文树(回文自动机,一种有限状 ...

  8. 2019牛客暑期多校训练营(第一场)H XOR(线性基)

    题意:给你n个数字,然后让你求所有满足异或和为0的子集的大小之和. 先对n个数求线性基,设线性基大小为r,可以分别计算线性基内数的贡献和线性基外数的贡献 1.线性基外:共n-r个数,枚举每个数x,将线 ...

  9. Codeforces Round #622 (Div. 2) A. Fast Food Restaurant(全排列,DFS)

    Codeforces Round #622 (Div. 2) A. Fast Food Restaurant 题意: 你是餐馆老板,虽然只会做三道菜,上菜时还有个怪癖:一位客人至少上一道菜,且一种菜最 ...

  10. HDU4366 Successor【dfs序 分块】

    HDU4366 Successor 题意: 给出一棵根为\(1\)的树,每个点有两个权值\(x,y\),每次询问一个点的子树中\(x\)比这个点的\(x\)大且\(y\)值最大的那个点 题解: 如果以 ...