大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的1-bit SPI NOR恢复启动

  在前几篇里痞子衡介绍的Boot Device都属于主动启动的Master Boot Device(Serial(Multi-IO) NOR, SD/eMMC),试想一下如果遇到这样的情况,你选择启动的某个Master Boot Device正常工作一段时间后某次开机突然因为某种未知原因无法启动了,此时系统无法正常工作,但如果你希望系统能够有一定的容错/鲁棒能力,即使这种场合下也能够保证基本工作,那应该怎么做?别担心,i.MXRTxxx BootROM提供了一种解决方案,即Recovery Boot机制,BootROM支持Serial NOR作为Recovery Boot Device,你只需要将备份application事先放进Recovery Boot Device即可,任何主动启动的Master Boot Device启动失败,BootROM会自动启动Recovery Boot Device中的备份application保证系统能正常工作,是不是觉得recovery boot很贴心?今天痞子衡就为大家介绍Recovery Boot:

一、支持的Serial NOR

  i.MXRTxxx支持加载恢复启动的主要是1-bit SPI接口(其实Multi-IO也行,只要支持1bit read/normal read模式)的NOR Flash。Serial NOR厂商非常多,对应Serial NOR芯片型号也很多,如果你在选型时不确定到底该为i.MXRTxxx选择哪一款Serial NOR时,可选用下面三款芯片,痞子衡均实测过:

Adesto AT25SF641-SUB-T          (NOR Flash, Multiple I/O, 104MHz,     256B Page/4-32-64KB Sector/64Mb Device)
Micron MT25QL128ABA1ESE-OSIT (NOR Flash, Multiple I/O, 133MHz-STR, 64B Page/4-32-64KB Sector/128Mb Device)
Spansion S25FL129P (NOR Flash, Multiple I/O, 80MHz, 256B Page/4-8-64-256KB Sector/128Mb Device)

Note1: BootROM固定使用SPI Mode(0,0)(即CPOL=0, CPHA=0),24MHz SPI Clk去访问外部NOR。

Note2: 在BootROM的Device Boot模式下想要启动NOR不需要知道任何Flash属性参数(如Sector/Page Size),因此Device Boot模式下仅需要指定SPI Port连接即可。

Note3: 在BootROM的Serial ISP模式下擦写NOR时需要知道其Sector/Page Size,ROM支持两种方式获取Sector/Page Size,一是手工填写参数,另一个是利用SFDP。

Note4: BootROM主要支持3bytes(存储范围为1Mb - 128Mb)地址的外部NOR,其实市面上3bytes地址位的EEPROM也可以用作Recovery Boot Device(不过BootROM仅能在Device Boot模式下启动(读)EEPROM,但不支持Serial ISP模式下擦写EEPROM)。

二、Serial NOR硬件连接

  确定了Serial NOR芯片选型后,底下便进入Serial NOR硬件电路设计及与i.MXRTxxx的信号连接环节:

  i.MXRTxxx对于Serial NOR的底层接口支持是通过内部Flexcomm SPI这个IP实现的,i.MXRTxxx内部一共有8个Flexcomm SPI,BootROM对这8组Flexcomm SPI都支持,具体pinmux如下(适用RT600):

  如下是典型的QSPI NOR硬件连接设计,示例NOR芯片是AT25SF641-SUB-T,该NOR芯片为Multiple I/O,数据线为DQ[3:0],当用作1-bit SPI模式时,仅需连接DQ[1:0]:

Note: 当使用QSPI Flash作为1bit SPI Flash使用时,空置的引脚IO[3:2]必须上拉,否则Flash无法正常访问。

三、Serial NOR加载启动过程

  确保Serial NOR硬件相关设计无误之后,底下便是下载更新Bootable Image进Serial NOR以供BootROM加载启动了,在下载Bootable image之前有必要先了解Serial NOR的加载启动过程:

  痞子衡在启动系列文章的第五篇 Bootable image格式与加载(elftosb/.json) 里的最后已经介绍过Non-XIP image加载启动过程,这个过程其实已经充分地描述了Serial NOR的加载启动过程。

  有了Non-XIP image加载启动的背景知识,Serial NOR的加载启动过程便是上电之后,在主动选择的Master Boot Device启动失败之后,BootROM会从Serial NOR偏移0x1000地址处读取image header数据(一共64个字节),找到其中的imageLength和imageLoadAddress,这样就知道了Application加载起始地址以及总长度,然后再将Application全部拷贝到相应SRAM里去启动,其过程如下图所示:

四、下载Application进Serial NOR

  理解了Serial NOR加载启动过程,我们便可以开始使用BootROM的Serial ISP模式去下载Application进Serial NOR芯片中:

  痞子衡在启动系列文章的第三篇 Serial ISP模式(blhost)) 和第五篇 Bootable image格式与加载(elftosb/.json) 里分别介绍了Serial ISP模式的使用以及如何将你的Application制作成Bootable image,后续内容假定你已经制作好一个Bootable image并且使用blhost工具与BootROM的Serial ISP模式建立了基本通信,正要开始将Bootable image下载进Serial NOR。

  跟Master Boot Device不同的是,Serial NOR不支持configuration block,configuration block结构原型是下面的spi_mem_config_t,下文提及的简化option block其实就是用来设置这个configuration block的。

//! @brief Serial NOR Config block structure
typedef struct
{
uint8_t tag;
uint8_t memoryType;
uint8_t blockEraseAvailable;
uint8_t sfdpTableAvailable;
uint8_t sectorEraseCmd;
uint8_t blockEraseCmd;
uint8_t chipEraseCmd;
uint8_t addressBits;
uint32_t pageSizeInBytes;
uint32_t sectorSizeInBytes;
uint32_t blockSizeInBytes;
uint32_t memorySizeInBytes;
} spi_mem_config_t;

  前面扯了些没用的,那么到底怎么样将Bootable image数据下载进Serial NOR中呢?当然还是靠Serial ISP模式,我们只需要提供简化的4byte配置数据即可。下面是一种Application下载更新示例(该示例适用于 Serial NOR芯片AT25SF641-SUB-T):

// 在SRAM里临时存储1bit SPI NOR配置数据
blhost -p COMx -- fill-memory 0x1C000 0x4 0xC0100000 // Flexcomm SPI1, Default NOR Flash // 使用1bit SPI NOR配置数据去配置Flexcomm SPI接口
blhost -p COMx -- configure-memory 0x110 0x1C000

  在上述示例里痞子衡首先使用了fill-memory命令在0x1C000地址处暂存了4byte配置数据,然后通过config-memory将这4byte数据里的信息配置到Serial NOR接口中,实际上这2个命令成功执行后,你就可以开始使用Serial ISP命令下载Bootable image了。那么这4byte配置数据到底是怎么组织的?详见下表:

  从上表我们可以知道,其实这4byte数据提供的配置信息主要是SPI连接以及NOR Device属性配置。configure-memory命令执行成功之后,底下image的下载很简单,只需要将Bootable image从Serial NOR起始地址开始下载即可,具体步骤如下:

// 擦除1bit SPI NOR并将image下载进1bit SPI NOR
blhost -p COMx -- flash-erase-region 0x0 0x20000 0x110
blhost -p COMx -- write-memory 0x1000 bt_image.bin 0x110

  Bootable image下载成功之后,我们可以试着用read-memory从Serial NOR芯片里读回Application确认一下,Bootable image起始地址在0x1000,痞子衡下载的是一个长度为13516byte,从0x80000处开始链接的Non-XIP image,这从读回的image header解析里可以证实:

  至此,Application的下载工作便结束了。

五、进入Serial NOR备份启动模式

  Application已经被成功下载进Serial NOR芯片之后,此时我们便可以开始设置芯片从Serial NOR启动:

  痞子衡在前面的文章 Boot配置(ISP Pin/OTP) 介绍过Boot行为模式有两种选择方式(通过OTP或ISP pin)。在OTP里,如果设置PRIMARY_BOOT_SRC[3:0]为SPI_FLASH_BOOT(即4b'0111),则芯片直接从1bit SPI NOR启动,不再需要先经过Master Boot Device,这相当于将1bit SPI NOR地位提升到Master Boot Device。

  不过1bit SPI NOR启动最常用的Boot行为模式配置不是上面那种,而是真的用作Recovery Boot Device,这才是它的最大意义所在,如下表所示,共有6种不同的配置(橘色框里)均能使能备份启动模式(适用RT600)。

六、配置OTP启动Serial NOR

  设置好芯片启动模式是从Serial NOR备份启动之后,我们还需要最后关注一下与Serial NOR相关的具体特性配置:

  Serial NOR的Device配置非常简单,只需要在OTP里指定SPI index即可(在BOOT_CFG[0]里的REDUNDANT_SPI_PORT里),痞子衡在文章第一节的Note2里就备注过,在BootROM的Device Boot模式下想要启动1bit SPI NOR不需要知道任何Flash属性参数(如Sector/Page Size),因此只要指定是哪个SPI Port就行了。

七、几个注意事项

  1. 市面上基本大于64KB的QSPI NOR均支持1bit read/normal read模式。
  2. 虽然从Serial NOR启动的设计目的是用于recovery boot,但如果你硬要将Serial NOR作为系统里的唯一Boot Device,也并不是不可以(假设Recovery Boot没有升级为Master Boot),你需要在板级设计时考虑与Master Boot Device连接的i.MXRTxxx相关引脚在上电时的电平转换(BootROM总是会尝试先启动Master Boot Device)的影响。

  上述所有步骤全部完成之后,复位芯片你就应该能看到你放在Serial NOR里的Application已经正常地启动了。

  至此,恩智浦i.MX RTxxx系列MCU的1-bit SPI NOR恢复启动痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页微信公众号 平台上。

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

痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(8)- 从Serial(1-bit SPI) NOR恢复启动的更多相关文章

  1. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是恩智浦i.MX RTxxx系列微控制器相关知识. 恩智浦半导体于2018年10月发布的i.MX RTxxx系列开启了ML/AI MCU ...

  2. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU特性那些事(1)- 概览

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的基本特性. 恩智浦半导体于2017年开始推出的i.MX RT系列重新定义了MCU,其第一款芯片i. ...

  3. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是飞思卡尔Kinetis系列微控制器相关知识. 飞思卡尔半导体(现恩智浦半导体)于2010年开始推出的Kinetis系列昭示着ARM C ...

  4. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU特性介绍(2)- RT685EVKA性能实测(Dhrystone)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的性能. 在前面的文章 i.MXRTxxx微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2018 ...

  5. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(3)- Serial ISP模式(blhost)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的Serial ISP模式. 在上一篇文章 Boot配置(ISP Pin, OTP) 里痞子衡为大家 ...

  6. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(4)- OTP及其烧写方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的OTP. 在i.MXRTxxx启动系列第二篇文章 Boot配置(ISP Pin, OTP) 里痞子 ...

  7. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(1)- Boot简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的BootROM功能简介. 截止目前为止i.MX RTxxx系列已公布的芯片仅有一款i.MXRT60 ...

  8. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(2)- Boot配置(ISP_Pin, OTP)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的Boot配置. 在上一篇文章 Boot简介 里痞子衡为大家介绍了Boot基本原理以及i.MXRTx ...

  9. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(6.1)- FlexSPI NOR连接方式大全(RT600)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT600的FlexSPI NOR启动的连接方式. 痞子衡前段时间一鼓作气写完了三篇关于i.MXRT1xxx系列Flex ...

随机推荐

  1. Unity4-用户输入

    Input是一个类,可以接收用户的输入 使用AddComponentMenu("Demo1/InputTest1"),将脚本加入到工程中. //例子: void Update() ...

  2. MySQL批量插入的分析以及注意事项

    目录 1.背景 2.两种方式对比 2.1.一次插入一条数据 2.2.一次插入多条数据 3.拓展一下 4.Other 1.背景 我们在工作中基本都会碰到批量插入数据到DB的情况,这个时候我们就需要根据不 ...

  3. Scrapy爬虫day1——环境配置

    安装 Scrapy pip install scrapy 配置虚拟环境 mkvirtualenv Spider 创建项目 在Spider的虚拟环境中运行 scrapy startproject Boo ...

  4. 8.1 NOIP模拟11

    8.1 NOIP模拟 11 今天上午返校之后,颓了一会,然后下午就开始考试,中午睡着了,然后刚开始考试的时候就困的一匹,我一看T1,woc,这不是之前线段树专题的题啊,和那道题差不多,所以我..... ...

  5. 使用 vue-element-admin 动态路由渲染

    附上:vue-element-admin 官方文档 vue-element-admin https://panjiachen.github.io/vue-element-admin-site/zh/g ...

  6. vue学习笔记(五)条件渲染和列表渲染

    前言 在众多的编程语言中,我们的基础语法总是少不了一些专业语法,比如像定义变量,条件语句,for循环,数组,函数等等,vue.js这个优秀的前端框架中也有同样的语法,我们换一个名词,将条件语句改成专业 ...

  7. 多线程之美1一volatile

    目录 一.java内存模型 1.1.抽象结构图 1.2.概念介绍 二.volatile详解 2.1.概念 2.2.保证内存可见性 2.3.不保证原子性 2.4.有序性 一.java内存模型 1.1.抽 ...

  8. deepin MySQL 安装以及编码格式的修改utf-8

    deepin MySQL 安装以及编码格式的修改utf-8: 1.sudo apt-get install mysql-server mysql-client 2.sudo mysql -u root ...

  9. linux目录数

    FHS Filesystem Hierarchy Standard(文件系统层次化标准,[ˈhaɪərɑ:rki] 等级制度)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系 ...

  10. LF模式解决的问题

    一说起Leader/Followers并发模式,都会与Half-Async/Half-Sync并发模式进行比较,说LF模式更加高性能,成了一个高性能名词标签 符号,相反HA/HS仿佛成了一个低性能的名 ...