痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10)- 从Serial NAND启动

痞子,嵌入式,mx,rt1xxx,系列,mcu,启动,那些,serial,nand · 浏览次数 : 206

小编点评

**恩智浦i.MXRT1xxx系列 MCU的Serial NAND启动指南** **一、支持的Serial NAND** 支持的Serial NAND厂商很多,具体型号取决于芯片型号。 * **Macronix MX35LF2G24AD** * **Winbond W25N01GV** * **GigaSemi SG5312P-10M** * **Sipeedcom SC7010** **二、应用程序下载更新** 在SRAM里临时存储Serial NAND配置数据(FCB和NAND)。 ```c // 在 SRAM 里临时存储 Serial NAND 配置数据(FCB和NAND Opt) blhost -u -- fill-memory 0x20202000 0x4 0xC2000103 // searchCount=2, searchStride = 64 pages, Address type: Block Address, Option Block size: 3 long words ``` **三、进入Serial NAND启动模式** * 设置BOOT_MODE[1:0]=2'b10,即芯片处于 Internal Boot 模式 * 选择 Boot Device,Boot Device 由 BOOT_CFG1[7:4] 这四个pin 的输入状态决定 * Serial NAND 启动模式为 4'b11xx **四、配置eFuse启动Serial NAND** * 设置 BOOT_SEARCH_COUNT bit 为 1,其余保持默认 0 * 具体解释下 COL_ADDRESS_WIDTH 默认 0 即 12bits,看起来对应了 4KB Page size,但因为ECC特性,这样设置下的低 2KB page 空间存真实数据,高 2KB page 空间其实属于所谓 Spare空间,会被Flash自动用来存放ECC校验码,不过这个Spare空间有效范围 64byte-128byte 不等(对于MX35LF2G24AD则是 128)

正文


  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT1xxx系列MCU的Serial NAND启动

  最近越来越多的客户在咨询 i.MXRT1xxx 从 Serial NAND 启动的事情,让这个本来比较冷门的启动设备突然火热起来。据痞子衡的了解,其实客户主要目的是在应用里基于 Serial NAND 去做文件系统(看起来随着技术的发展,就文件系统应用或者多媒体数据存储方面而言 Raw NAND 已经不是绝对优势了),然后顺便用它做应用代码启动。借此机会,今天痞子衡就给大家介绍一下 Serial NAND 上制作、下载、启动程序的方法:

  • Note:文中贴图、代码主要以 i.MXRT1050 为例,其余 i.MXRT1xxx 系列原理类似。

一、支持的Serial NAND

  Serial NAND 厂商非常多,对应 Serial NAND 芯片型号也很多,如果你在选型时不确定到底该为 i.MXRT 选择哪一款 Serial NAND 时,可选用下面四款芯片,痞子衡均实测过:

Macronix MX35LF2G24AD       (120MHz, x4 bits, 2KB Page/128KB Block/2Gb Device,  8-bit/544byte ECC, 3.3V)
Winbond W25N01GV            (104MHz, x4 bits, 2KB Page/128KB Block/1Gb Device,  1-bit/528byte ECC, 3.3V)
GigaDevice GD5F1GQ5UEYIG    (133MHz, x4 bits, 2KB Page/128KB Block/1Gb Device,  4-bit/528byte ECC, 3.3V)
Micron MT29F1G01ABA         (133MHz, x4 bits, 2KB Page/128KB Block/1Gb Device,  8-bit/Sector  ECC, 3.3V)

  需要特别注意的是,与 《i.MXRT从Raw NAND启动》 里既可使用纯软件 ECC 也可利用 Flash 自带硬件 ECC 特性不同的是,从 Serial NAND 启动必须依赖 Flash 自带硬件 ECC。

二、Serial NAND硬件连接

  除了 i.MXRT1010/1024/1064 不支持 Serial NAND 启动之外,其余 i.MXRT1xxx 都可以支持。其中 i.MXRT10xx 系列只支持一组引脚连接组合,而 i.MXRT11xx 则支持多组引脚连接组合。i.MXRT1050 BootROM 支持如下 pinmux 来连接 Serial NAND 去启动:

  如下是 IMXRT1050EVK12_Rev.A 板上四线 QSPI Flash 连接设计,板载默认 U33 芯片是 Serial NOR Flash,我们可以换成同封装 Serial NAND,痞子衡就将其换成了 MX35LF2G24AD 来做测试,当然 FLASH_VCC 也相应改成了 3.3V:

三、Serial NAND加载启动过程

  我们知道 Serial NAND 中仅能放置 Non-XIP Application(链接到内部 SRAM 或者 外部 RAM 空间),其启动加载流程跟 《从 Serial(1-bit SPI) NOR/EEPROM恢复启动》 加载流程差不多(参考文章第 3 小节)。

  i.MXRT BootROM 中对于 Serial NAND 启动流程处理和对于 Raw NAND 启动处理几乎是一样的,都是依赖 FCB 和 DBBT 这两个数据结构(当然 Serial NAND 和 Raw NAND 里对于这两个数据结构具体成员定义有差异)。关于 FCB 和 DBBT 的使用,痞子衡在《i.MXRT从Raw NAND启动》一文中三、四小节讲得很清楚,这里不再赘述。

  i.MXRT1050 参考手册 System Boot 章节里画了上电启动时 BootROM 代码搜索 FCB 和 DBBT 的流程,能找到这两个数据,应用程序就能够被正常加载。这里需要特别注意,FCB 和 DBBT 是在配套 Flashloader 执行过程中动态生成的,因为涉及 NAND Flash 里具体坏块分布信息,所以无法在 PC 端直接制作 FCB 和 DBBT,这就意味着我们无法像 NOR Flash 那样事先得到一个完整的含全部启动头(FCB&DBBT&IVT&BD)的 NAND bootable image。

四、下载Application进Serial NAND

  现在假定你已经制作好一个 Bootable image 并且使用 blhost 工具与 Flashloader 建立了基本通信,正要开始将 Bootable image 下载进 Serial NAND。此时我们只需要提供简化的 12 - 44byte 配置数据就可以完成 Serial NAND 的全部配置,下面是适用 MX35LF2G24AD 的 Application 下载更新示例:

// 在 SRAM 里临时存储 Serial NAND 配置数据(FCB Opt)
blhost -u -- fill-memory 0x20202000 0x4 0xC2000103 // searchCount=2, searchStride = 64 pages, Address type: Block Address, Option Block size: 3 long words
blhost -u -- fill-memory 0x20202004 0x4 0x2020200C // nand opt address
blhost -u -- fill-memory 0x20202008 0x4 0x4004     // image0 从 Block 4 开始,长度最大 4 个 Block

// 在 SRAM 里临时存储 Serial NAND 配置数据(NAND Opt)
blhost -u -- fill-memory 0x2020200C 0x4 0xC0020023 // Flash size: 2Gbit, 1 Plane, 64 Pages/Block, 2KB Page Size, Max Freq:60MHz

// 使用 Serial NAND 配置数据去配置 FlexSPI 接口以及写入完整 FCB, DBBT 数据
blhost -u -- configure-memory 0x101 0x20202000

  上述 fill-memory 命令中 FCB Opt 配置数据组织详见下表:

  上述 fill-memory 命令中 NAND Opt 配置数据组织详见下表:

  上表 12 - 44byte 数据提供的配置信息主要是 FCB 和 NAND 属性。configure-memory 命令执行成功之后,底下只需要将 Bootable image 从 Serial NAND 对应 Block 地址处开始下载即可,具体步骤如下:

// 擦除 Serial NAND 并将 image 下载进 Serial NAND
blhost -u -- flash-erase-region 0x4 0x4 0x101     // 从第4个Block开始擦除,范围为4个Block长度
blhost -u -- write-memory 0x4 bt_image.bin 0x101  // 从第4个Block开始下载含 ivt, bd 的镜像文件

  当然以上所有繁杂的命令行操作都可以使用 MCUBootUtility 工具(v5.2.1及以上)来一键完成:

五、进入Serial NAND启动模式

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

  先确定 BOOT_MODE[1:0]=2'b10,即芯片处于 Internal Boot 模式,再来选择 Boot Device,Boot Device 由 BOOT_CFG1[7:4] 这四个 pin 的输入状态决定,其中 Serial NAND 启动模式为 4'b11xx。

六、配置eFuse启动Serial NAND

  设置好芯片启动模式是从 Serial NAND 启动之后,我们还需要最后关注一下与 Serial NAND 相关的具体特性配置,主要集中在芯片内部 eFuse 0x6e0/0x450 区域里,根据前面配置,这里我们只需要设置 BOOT_SEARCH_COUNT bit 为 1,其余保持默认 0 即可。

  这里单独解释下 COL_ADDRESS_WIDTH 默认 0 即 12bits,看起来对应了 4KB Page size,但是因为 ECC 特性,这样设置下的低 2KB page 空间存真实数据,高 2KB page 空间其实属于所谓 Spare 空间,会被 Flash 自动用来存放 ECC 校验码,不过这个 Spare 空间有效范围 64byte-128byte 不等(对于 MX35LF2G24AD 则是 128)。

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

  至此,恩智浦i.MXRT1xxx系列MCU的Serial NAND启动痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

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

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

与痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10)- 从Serial NAND启动相似的内容:

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(12.A)- uSDHC eMMC启动时间(RT1170)

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1170 uSDHC eMMC启动时间。 本篇是 i.MXRT1170 启动时间评测第五弹,前四篇分别给大家评测了 Raw NAND 启动时间(基于 MIMXRT1170-EVK_Rev.B)、Serial NOR

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(12)- 从SD/eMMC启动

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT1xxx系列MCU的SD/eMMC卡启动。 最近在恩智浦官方社区上支持了一个关于 i.MXRT 从 SD 卡启动的案例,这让痞子衡想起了一年前写过的一篇《i.MXRT600从SD/eMMC启动》,那一篇重点介绍了基于

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10)- 从Serial NAND启动

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是**恩智浦i.MXRT1xxx系列MCU的Serial NAND启动**。 最近越来越多的客户在咨询 i.MXRT1xxx 从 Serial NAND 启动的事情,让这个本来比较冷门的启动设备突然火热起来。据痞子衡的了解,其实客户主要目

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10.A)- FlexSPI NAND启动时间(RT1170)

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是**恩智浦i.MX RT1170 FlexSPI NAND启动时间**。 本篇是 i.MXRT1170 启动时间评测第四弹,前三篇分别给大家评测了 [Raw NAND 启动时间](https://www.cnblogs.com/henj

痞子衡嵌入式:对比恩智浦全系列MCU(包含Kinetis/LPC/i.MXRT/MCX)的GPIO电平中断设计差异

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦全系列MCU(包含Kinetis, LPC, i.MXRT, MCX)的GPIO电平中断设计差异。 在痞子衡旧文 《以i.MXRT1xxx的GPIO模块为例谈谈中断处理函数(IRQHandler)的标准流程》里,痞子衡主要介绍得是

痞子衡嵌入式:MCUBootUtility v5.0发布,初步支持i.MXRT1180

-- 痞子衡维护的NXP-MCUBootUtility工具距离上一个大版本(v4.0.0)发布过去4个多月了,期间痞子衡也做过两个小版本更新,但不足以单独介绍。这一次痞子衡为大家带来了全新大版本v5.0.0,这次更新主要是想和大家特别聊聊恩智浦新一代 i.MXRT 旗舰 RT1180。 ### 一、

痞子衡嵌入式:恩智浦经典LPC系列MCU内部Flash IAP驱动入门

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦经典LPC系列MCU内部Flash IAP驱动。 LPC 系列 MCU 是恩智浦公司于 2003 年开始推出的非常具有代表性的产品,距今已经有近 20 年的生命。按时间线演进来说,其主要分为三代: - 元老:基于 ARM7/9 内

痞子衡嵌入式:AppCodeHub - 一站网罗恩智浦MCU应用程序

近日,恩智浦官方隆重上线了应用程序代码中心(Application Code Hub,简称 ACH),这是恩智浦 MCUXpresso 软件生态的一个重要组成部分。痞子衡之所以要如此激动地告诉大家这个好消息,是因为 ACH 并不是又一个恩智浦官方 github project site 那么简单而已

痞子衡嵌入式:我为2021 TencentOS Tiny AIoT应用创新大赛做了场直播培训

TencentOS Tiny AIoT 应用创新大赛是腾讯 TencentOS 团队联合恩智浦半导体、安谋科技(Arm China)发起的线上开发者活动,主要面向中小企业嵌入式工程师、广大嵌入式开发者、物联网爱好者、创客团队等,期待广大开发者能参与到国内开源项目中,通过开源协同,基于 Tencent

痞子衡嵌入式:低功耗&高性能边缘人工智能应用的新答案 - MCXN947

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦MCX系列MCU的新品MCXN947。 自 2015 年恩智浦和飞思卡尔合并成新恩智浦之后,关于它们各自的 Arm Cortex-M 内核通用微控制器代表作系列 LPC 和 Kinetis 接下来怎么发展一直没有定论(两个系列都在