恩智浦i.MXRT1xxx系列MCU的Serial NAND启动

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦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 wordsblhost -u -- fill-memory 0x20202004 0x4 0x2020200c // nand opt addressblhost -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 nandblhost -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启动痞子衡便介绍完毕了,掌声在哪里~~~


直流伺服电机的优缺点有哪些
PLC网络的几种常用通讯方式
华为的子品牌Honor正准备在俄罗斯推出新手机
互联网公司的争议为和如此引人注目?
智能显示器的应用将引领智能家居的新潮流
恩智浦i.MXRT1xxx系列MCU的Serial NAND启动
大众汽车宣布正在开发新的前大灯以改善道路行驶安全
常见的MOSFET以及IGBT绝缘栅极隔离驱动技术解析
如何在手动模式下为DS1863/DS1865 PON控制器设置偏置DAC
人工智能可助力航运业打击海盗行为
RFID技术发展中如何克服金属和水的阻碍?
苹果MacBook比普通电脑好在哪里?很多用过MacBook Pro的朋友都说再也用不回普通机了
红外测温人脸识别机一体机的设计优势
2024年全球手机市场复苏 传音打响出海品牌进阶之战
PIC单片机的特点及在设计应用中的注意事项
5G设备功耗将是运营商推进5G建设的一个严峻挑战
3D打印传感器的优势_3D打印传感器的类型
光电传感器在自动化生产线上的应用
未来农业市场应该是什么样的?看看这篇文章就知道了
圆八脚继电器与圆八脚液位继电器可以共用一个底座吗?