查看: 2171|回复: 11

[分享] [痞子衡]哪些i.MXRT下可灵活选择Flash启动硬复位引脚?

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

    [LV.8]以坛为家I

    3303

    主题

    6550

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32056
    最后登录
    2024-4-30
    发表于 2021-8-3 09:26:48 | 显示全部楼层 |阅读模式
    哪些i.MXRT下可灵活选择Flash启动硬复位引脚?


    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择。


    关于 i.MXRT 系列 BootROM 中串行 NOR Flash 启动流程,痞子衡写过一篇非常详细的文章 《深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程》,这篇文章主要针对 i.MXRT1xxx 四位数系列,但基本上也适用 i.MXRTxxx 三位数系列,仅一些细节处有区别。


    在串行 NOR Flash 热启动过程中(非首次上电复位,而是单纯系统软复位 NVIC_SystemReset),有很多场景下均需要先复位一下 Flash ,将其恢复到默认的 Normal 模式,然后 Flash 才能被 BootROM 正常启动。这些场景包括 Flash 在上次系统运行时被配置到了某种特殊运行模式(QSPI 进入  Continuous Read 或者 QPI 模式,Octal Flash 进入 OPI 模式等),或者直接进到了低功耗模式(Deep Power Down)。


    本文就是介绍利用 BootROM 里集成的 Flash 硬复位功能来完成 Flash 复位操作。闲话少叙,进入正文:
    1. 备注1:本文主要针对已量产的 i.MXRT500/600 。
    2. 备注2:本文仅适用那些包含独立 RESET# 引脚的 Flash。
    复制代码
    一、BootROM中实现
    在 《深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程》 一文的 2.1 节里,我们知道在 i.MXRT1xxx 四位数系列 BootROM 里同样集成了 Flash 硬复位功能,但是用于连接 Flash RESET# 引脚的 GPIO 是固定的(i.MXRT1050 上是GPIO1[9],i.MXRT1170 上是GPIO4[3] / GPIO2[8]),这对 PCB 设计有一定限制,如果被指定的 GPIO 在项目设计里有不可替代的功能,那只能放弃 BootROM 里这个 Flash 复位功能了。


    鉴于 i.MXRT1xxx 里 GPIO 指定不够灵活的缺陷,恩智浦 ROM 小组在 i.MXRTxxx 系列里做了改进,我们来看 i.MXRT600 的 fusemap 表,其中 BOOT_CFG[1] 里关于 QSPI_RESET_PIN 定义如下:
    11.png
    我们看到了 3bit GPIO_PORT (0-7) 和 5bit GPIO_PIN_NUM (0-31) 设置,有了这个设置,用于连接 Flash RESET# 引脚 的 GPIO 选择就非常灵活了,基本可以涵盖所有 GPIO,因此项目 PCB 设计里只要随便找一个空闲的 GPIO 连到 Flash RESET# 引脚即可。


    该功能在 BootROM 里实现代码大概如下:
    1. const clock_ip_name_t k_GpioClocks[8] = { kCLOCK_HsGpio0, kCLOCK_HsGpio1, kCLOCK_HsGpio2, kCLOCK_HsGpio3,
    2.                                           kCLOCK_HsGpio4, kCLOCK_HsGpio5, kCLOCK_HsGpio6, kCLOCK_HsGpio7 };

    3. const RSTCTL_RSTn_t k_GpioResets[8] = { kHSGPIO0_RST_SHIFT_RSTn, kHSGPIO1_RST_SHIFT_RSTn, kHSGPIO2_RST_SHIFT_RSTn, kHSGPIO3_RST_SHIFT_RSTn,
    4.                                         kHSGPIO4_RST_SHIFT_RSTn, kHSGPIO5_RST_SHIFT_RSTn, kHSGPIO6_RST_SHIFT_RSTn, kHSGPIO7_RST_SHIFT_RSTn};

    5. if (OCOTP->OTP_SHADOW[0x61] & 0x400)
    6. {
    7.     // Initialize Reset Pin
    8.     uint32_t portInstance = (OCOTP->OTP_SHADOW[0x61] & 0x3800) >> 15;
    9.     uint32_t gpioInstance = (OCOTP->OTP_SHADOW[0x61] & 0x7c000) >> 18;

    10.     // Enable Clock before accessing registers
    11.     CLOCK_EnableClock(k_GpioClocks[portInstance]);
    12.     RESET_PeripheralReset(k_GpioResets[portInstance]);

    13.     // Configure the port to GPIO mode with pull-up resistor enabled.
    14.     IOPCTL->PIO[portInstance][gpioInstance] = IOPCTL_PIO_FSEL(0) | IOPCTL_PIO_PUPDENA(1) | IOPCTL_PIO_PUPDSEL(1) | IOPCTL_PIO_FULLDRIVE(1);
    15.     GPIO->DIRSET[portInstance] = (1u << gpioInstance);

    16.     // High
    17.     GPIO->SET[portInstance] = (1u << gpioInstance);
    18.     flexspi_sw_delay_us(250);
    19.     // Low
    20.     GPIO->CLR[portInstance] = (1u << gpioInstance);
    21.     flexspi_sw_delay_us(250);
    22.     // High
    23.     GPIO->SET[portInstance] = (1u << gpioInstance);
    24.     flexspi_sw_delay_us(500);
    25. }
    复制代码
    二、在MIMXRT685-EVK上实践
    我们现在在官方 MIMXRT685-EVK 上实测一下这个功能,EVK 上选用的 Flash 型号是旺宏的 MX25UM51345G,这颗 Flash 有独立的 RESET# 引脚(A4),它被连到了主芯片的 PIO2_12 脚上。
    12.png
    要想激活 BootROM 中 Flash 硬复位功能需要烧写 eFuse(也可以写相应 OCOTP Shadow Register 来替代,Shadow Register 只在上电或者触发 OCOTP refresh 命令时从 eFuse 中加载一次值,其后即使软复位 Shadow Register 值也不丢失),我们暂且用写 Shadow Register 方式来测试。


    正好前段时间痞子衡在做 SBL 项目写了篇文章 《在SBL项目实战中妙用i.MXRT1xxx里SystemReset不复位的GPR寄存器》,里面就有系统软复位需求,在支持 i.MXRT600 时就遇到了问题,因为第一次启动后 MIMXRT685-EVK 上的这颗 Octal Flash 被配置到了 OPI 模式,需要复位后才能正常被 BootROM 启动,所以我们直接就用上了 BootROM 里的 Flash 硬复位功能,代码很简单:
    1. void isp_cleanup_enter(uint32_t flag)
    2. {
    3.     CLOCK_EnableClock(kCLOCK_Rtc);
    4.     RTC->CTRL &= ~RTC_CTRL_SWRESET_MASK;
    5.     RTC->GPREG[0] = flag;

    6.     // Reset Flash to normal mode by BootROM
    7.     // QSPI_RESET_PIN_ENABLE = 1'b1, GPIO_PORT = 3'b010, GPIO_PIN_NUM = 5'b01100
    8.     OCOTP->OTP_SHADOW[0x61] = 0x314000;
    9.     __DSB();

    10.     NVIC_SystemReset();
    11. }
    复制代码
    至此,i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择痞子衡便介绍完毕了,掌声在哪里~~~





    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-1-31 09:34
  • 签到天数: 202 天

    [LV.7]常住居民III

    7

    主题

    1515

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3817
    最后登录
    2024-2-19
    发表于 2021-8-12 10:22:50 | 显示全部楼层
    学习下   
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-4-24 15:04
  • 签到天数: 508 天

    [LV.9]以坛为家II

    0

    主题

    1273

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3360
    最后登录
    2023-5-22
    发表于 2021-8-17 09:54:25 | 显示全部楼层
    学习一下
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-4-24 15:04
  • 签到天数: 508 天

    [LV.9]以坛为家II

    0

    主题

    1273

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3360
    最后登录
    2023-5-22
    发表于 2021-8-17 09:55:17 | 显示全部楼层
    学习一下
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 13:54
  • 签到天数: 2045 天

    [LV.Master]伴坛终老

    17

    主题

    4835

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    9924
    最后登录
    2024-5-3
    发表于 2021-8-20 22:14:44 | 显示全部楼层
    选择Flash启动硬复位引脚
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-18 09:13
  • 签到天数: 842 天

    [LV.10]以坛为家III

    1

    主题

    2091

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    4320
    最后登录
    2024-4-18
    发表于 2021-8-27 09:04:38 | 显示全部楼层
    学习一下
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 23:35
  • 签到天数: 958 天

    [LV.10]以坛为家III

    0

    主题

    2599

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    4942
    最后登录
    2024-5-2
    发表于 2021-8-30 14:58:41 | 显示全部楼层
    学习了
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-3-14 16:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    24

    帖子

    0

    新手上路

    Rank: 1

    积分
    22
    最后登录
    2022-3-14
    发表于 2022-3-14 17:19:39 | 显示全部楼层
    学到了,真厉害
    上班累哦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-3-14 16:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    24

    帖子

    0

    新手上路

    Rank: 1

    积分
    22
    最后登录
    2022-3-14
    发表于 2022-3-14 17:19:53 | 显示全部楼层
    学到了,真厉害
    上班累哦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-3-14 16:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    24

    帖子

    0

    新手上路

    Rank: 1

    积分
    22
    最后登录
    2022-3-14
    发表于 2022-3-14 17:27:53 | 显示全部楼层
    NOR Flash 热启动过程
    上班累哦
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-4 00:25 , Processed in 0.147783 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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