查看: 474|回复: 0

[分享] [痞子衡]Serial NAND i.MX RT1xxx启动

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32034
    最后登录
    2024-4-26
    发表于 2023-8-29 08:44:46 | 显示全部楼层 |阅读模式
    Serial NAND i.MX RT1xxx启动
    随着技术的不断发展,在文件系统应用或者多媒体数据存储方面而言 Raw NAND 已经不是绝对优势了。最近越来越多的客户需要在 Serial NAND 操作文件系统,并实现应用代码启动。小编收到很多关于 i.MXRT1xxx Serial NAND 启动的咨询问题,这个启动设备突然火热起来了~
    借此机会,今天跟大家介绍一下 Serial NAND 上制作、下载、启动程序的方法。
    Note:文中贴图、代码主要以 i.MXRT1050 为例,其余 i.MXRT1xxx 系列原理类似


    支持的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 去启动:
    11.png
    如下是IMXRT1050EVK12_Rev.A 板上四线 QSPI Flash 连接设计,板载默认 U33 芯片是 Serial NOR Flash,可以换成同封装 Serial NAND,小编就将其换成了 MX35LF2G24AD 来做测试,当然 FLASH_VCC 也相应改成了 3.3V:
    12.png
    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。
    13.png
    下载Application进Serial NAND

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

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

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

    7. // 使用 Serial NAND 配置数据去配置 FlexSPI 接口以及写入完整 FCB, DBBT 数据
    8. blhost -u -- configure-memory 0x101 0x20202000
    复制代码
    上述fill-memory 命令中 FCB Opt 配置数据组织详见下表:
    14.png
    上述fill-memory 命令中 NAND Opt 配置数据组织详见下表:
    15.png

    上表12 - 44byte 数据提供的配置信息主要是 FCB 和NAND 属性。configure-memory 命令执行成功之后,底下只需要将 Bootable image 从 Serial NAND 对应 Block 地址处开始下载即可,具体步骤如下:
    1. // 擦除 Serial NAND 并将 image 下载进 Serial NAND
    2. blhost -u -- flash-erase-region 0x4 0x4 0x101     // 从第4个Block开始擦除,范围为4个Block长度
    3. blhost -u -- write-memory 0x4 bt_image.bin 0x101  // 从第4个Block开始下载含 ivt, bd 的镜像文件
    复制代码
    当然以上所有繁杂的命令行操作都可以使用 MCUBootUtility 工具(v5.2.1及以上)来一键完成:
    16.png
    进入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 即可。
    17.png
    这里单独解释下 COL_ADDRESS_WIDTH 默认 0 即 12bits,看起来对应了 4KB Page size,但是因为 ECC 特性,这样设置下的低 2KB page 空间存真实数据,高 2KB page 空间其实属于所谓 Spare 空间,会被 Flash 自动用来存放 ECC 校验码,不过这个 Spare 空间有效范围 64byte-128byte 不等(对于 MX35LF2G24AD 则是 128)。
    18.png
    上述所有步骤全部完成之后,复位芯片你就应该能看到你放在 Serial NAND 里的 Application 已经正常地启动了。感兴趣的伙伴可以实测一下~







    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-27 19:31 , Processed in 0.113265 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表