0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在i.MXRT1xxx系列上用NAND型启动设备时可用两级设计缩短启动时间

痞子衡嵌入式 来源:痞子衡嵌入式 2024-05-01 09:19 次阅读

去年痞子衡写过一篇骚操作文章 《借助i.MXRT10xx系列INIT_VTOR功能可以缩短程序热重启时间》,这对于 NAND 型启动设备上程序热重启时间的缩短非常有帮助。我们知道随着项目进程的推进,代码功能逐渐完善,程序体积也会变得越来越大,相应地启动时间也会增大(每次复位 BootROM 都会搬移一次程序,搬移时间和程序长度成正比),痞子衡已经为大家解决了程序热重启时间问题,但是程序上电启动(冷启动)时间仍然过长怎么办?

最近痞子衡在支持一个 RT1170 汽车电子客户,他们使用了 eMMC 作为启动设备,他们就对程序启动时间比较担心。鉴于此,痞子衡决定给他们做一个示例,这个方法其实痞子衡在 《测量RT1170 Raw NAND启动时间》 一文 2.2 小节里简单提及过,就是小 L2Boot + 大 App 两级启动设计(L2Boot尽量小,App可以很大,L2Boot起来之后去做一些用户启动任务,然后由L2Boot再去慢慢加载App)。那会痞子衡只是放个嘴炮,这次咱们就动个真格:

Note:本文以 eMMC 启动设备为例,但思想方法同样适用 Raw/Serial NAND, SD 等启动设备。

一、RT1170从eMMC启动

RT1xxx 系列包含两个 uSDHC 模块,其中 uSDHC1 主要支持 1/4-bit 模式,而 uSDHC2 可以支持 1/4/8-bit 模式,因此大部分客户都会将 8-bit eMMC 挂在 uSDHC2 上。这个汽车电子客户选用了来自江波龙的兼容 eMMC5.1 标准的 8GB 容量芯片 FEMDME008G-A8A39,硬件设计上内存介质供电 VCC 是 3.3V,主机接口供电 VCCQ 是 1.8V(高速):

VCCQ = 1.8V,低功耗模式,可支持 HS200/HS400
VCCQ = 3.3V,高功耗模式,可支持 52MHz CLK SDR/DDR
b6cd042c-fff1-11ee-a297-92fbcf53809c.png

要从 eMMC 启动,首先需要准备一个 Non-XIP 程序,具体可参考 《RT上Non-App制作限制》。有了程序,然后将芯片 Boot Mode 设置为 2'b01 串行下载模式,再使用痞子衡 MCUBootUtility 工具做一键下载即可,软件配置如下:

b6e0fdb0-fff1-11ee-a297-92fbcf53809c.png

程序下载完成之后,将芯片 Boot Mode 设置为 2'b10,此外 BOOT_CFG[1/5/7/8/9] 均设为1,即从 uSDHC2 8-bit 1.8V High-Speed 模式启动,断电复位,你应该能看到程序从 eMMC 中被启动了。

b6e997c2-fff1-11ee-a297-92fbcf53809c.png

二、支持eMMC读取的L2Boot设计

确认基本的 eMMC 启动过程没问题了,现在开始设计 L2Boot。其实这个 L2Boot 也没啥玄机,本质上也是一个 Non-XIP 程序,只不过程序功能包含:用户启动任务执行、eMMC 数据读取驱动、用户程序加载执行。痞子衡这里的 L2Boot 设计主要涉及 eMMC 数据读取以及用户程序加载执行。

目前官方 SDK_2_15_000_MIMXRT1170-EVKB 里没有单纯的 eMMC 例程,但是其它 RT 型号倒是有例程 SDK_2_15_000_EVKB-IMXRT1050oardsevkbimxrt1050sdmmc_examplesmmccard_freertos,痞子衡其实就想要一个最简单的裸机版本的 eMMC 读写测试。

为了不重复造轮子,痞子衡就在 SDK_2_15_000_MIMXRT1170-EVKBoardsevkbmimxrt1170ootloader_examplesflashloader 基础上做了删减,仅保留 eMMC 读写以及程序跳转功能,代码仓库如下:

https://github.com/JayHeng/RT-SDMMC/tree/dev_l2boot_emmc/boards/mcu/mmc_boot

这个 L2Boot 工程里最核心的函数 bootloader_run() 如下,其中用户程序拷贝过程目标地址和长度使用了 HARDCODE,这里其实是可以改进的(可参考 RTxxx 系列启动设计在用户程序中断向量表保留区域放置 APP_EXEC_START 和 APP_LENGTH)。此外 APP_EMMC_START 设 0x80000,是因为这款 eMMC 芯片擦除单元(erase group)为 512KB,第一个 group 我们放置了 L2Boot,用户 App 可从第二个 Group 开始放。

#define APP_EMMC_START  (0x80000)  // 用户程序数据在eMMC中起始位置
#define APP_EXEC_START  (0x2000)   // 用户程序首地址(中断向量表地址),这里是 ITCM 偏移 0x2000 处(偏移不强制)
#define APP_LENGTH      (0x6000)   // 用户程序体大小
b6f68518-fff1-11ee-a297-92fbcf53809c.png

需要提醒的是,这个 L2Boot 务必要遵循 BootROM 对于 Non-XIP 程序加载的链接限制(空出前面位置给启动头),因为上电后其由 BootROM 加载执行。

三、L2Boot与App联动

为了测试 L2Boot 功能是否正常,痞子衡在仓库里也放了一个示例用户 App 工程(其实就是 SDK 里的 hello world 例程),这个 App 由于是被 L2Boot 加载执行,所以它也不存在 BootROM 关于 Non-XIP 程序的链接地址限制问题了,完全看 L2Boot 的代码设计要求。

https://github.com/JayHeng/RT-SDMMC/tree/dev_l2boot_emmc/boards/mcu/mmc_app

现在我们用 MCUBootUtility 工具依次将痞子衡仓库里的 mmc_boot 程序(一键下载方式)和 mmc_app 程序(通用编程器下载方式,如下图)下载进 eMMC 里。切换 Boot Mode 后断电复位,如果你看到 mmc_app 正在执行,恭喜你,两级启动设计完成了。

b7042a06-fff1-11ee-a297-92fbcf53809c.png

至此,在i.MXRT1xxx系列上用NAND型启动设备时可用两级设计缩短启动时间痞子衡便介绍完毕了,掌声在哪里~~~


审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NAND
    +关注

    关注

    16

    文章

    1663

    浏览量

    135916
  • Vcc
    Vcc
    +关注

    关注

    2

    文章

    305

    浏览量

    35738
  • emmc
    +关注

    关注

    7

    文章

    195

    浏览量

    52529
  • 裸机
    +关注

    关注

    0

    文章

    39

    浏览量

    6327

原文标题:eMMC两级启动设计,从此再也不用担心启动时间了

文章出处:【微信号:pzh_mcu,微信公众号:痞子衡嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

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

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT1xxx系列MCU的Serial NAND启动
    发表于 08-21 09:20 315次阅读
    恩智浦<b class='flag-5'>i.MXRT1xxx</b><b class='flag-5'>系列</b>MCU的Serial <b class='flag-5'>NAND</b><b class='flag-5'>启动</b>

    i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择

    篇非常详细的文章 《深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程》,这篇文章主要针对 i.MXRT1xxx 四位数系列
    发表于 12-21 06:34

    如何解决i.MXRT1xxx系列启动应用程序发生异常跑飞问题?

    i.MXRT1xxx系列启动应用程序如何解决异常跑飞问题?
    发表于 12-23 07:41

    i.MXRT1xxx Boot的Serial Downloader模式相关资料分享

    (sdphost, mfgtool) 里痞子衡为大家介绍了i.MXRT1xxx Boot的Serial Downloader模式,这种模式主要是用来引导启动Flashloader,那么Flashlo...
    发表于 01-26 08:12

    系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败的解决办法

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败问题。  我们知道,i.MXRT1xxx家族早
    发表于 02-08 06:09

    i.MXRT1xxx上的普通GPIO与高速GPIO的差异是什么?

    i.MXRT1xxx上的普通GPIO与高速GPIO的差异是什么?
    发表于 02-08 06:54

    i.MXRT1xxx系列里暗藏的Product ID寄存器介绍

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1xxx系列里暗藏的Product ID寄存器。  MCU 厂商定义一个产品系列时,通常是会预先规划产
    发表于 02-11 06:24

    介绍的是i.MX RT1xxx系列MCU的Parallel NOR启动

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Parallel NOR启动。  上一篇讲
    发表于 02-22 06:31

    介绍i.MX RT1xxx系列MCU的Raw NAND启动

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Raw NAND启动。  前面铺
    发表于 02-22 07:20

    i.MXRT系列的ROM API设计

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是 i.MXRTxxx 系列 ROM API 设计细节。 痞子衡之前写过篇文章 《利用 i.MXRT1xxx
    的头像 发表于 10-30 10:52 534次阅读

    痞子衡嵌入式:系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败问题。  我们知道,i.MXRT1xxx家族早
    发表于 12-04 19:36 1次下载
    痞子衡嵌入式:系统时钟配置不当会导致<b class='flag-5'>i.MXRT1xxx</b><b class='flag-5'>系列</b>下OTFAD加密<b class='flag-5'>启动</b>失败

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

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Parallel NOR启动。  上一篇讲
    发表于 12-28 19:19 8次下载
    痞子衡嵌入式:恩智浦<b class='flag-5'>i</b>.MX RT<b class='flag-5'>1xxx</b><b class='flag-5'>系列</b>MCU<b class='flag-5'>启动</b>那些事(9)- 从Parallel NOR<b class='flag-5'>启动</b>

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

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Raw NAND启动。  前面铺
    发表于 12-28 19:19 10次下载
    痞子衡嵌入式:恩智浦<b class='flag-5'>i</b>.MX RT<b class='flag-5'>1xxx</b><b class='flag-5'>系列</b>MCU<b class='flag-5'>启动</b>那些事(8)- 从Raw <b class='flag-5'>NAND</b><b class='flag-5'>启动</b>

    利用i.MXRT1xxx系列ROM集成的DCD功能可轻松配置指定外设

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是利用i.MXRT1xxx系列ROM集成的DCD功能可轻松配置指定外设。
    的头像 发表于 04-21 09:40 718次阅读

    Serial NAND i.MX RT1xxx启动

    很多关于  i.MXRT1xxx Serial NAND 启动的 咨询 问题,这个启动设备突然火热起来了~ 借此机会,今天跟大家介绍一下 S
    的头像 发表于 08-17 08:50 616次阅读
    Serial <b class='flag-5'>NAND</b> <b class='flag-5'>i</b>.MX RT<b class='flag-5'>1xxx</b><b class='flag-5'>启动</b>