痞子衡嵌入式:在i.MXRT1xxx系列上用NAND型启动设备时可用两级设计缩短启动时间

这篇具有很好参考价值的文章主要介绍了痞子衡嵌入式:在i.MXRT1xxx系列上用NAND型启动设备时可用两级设计缩短启动时间。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是在i.MXRT1xxx系列上用NAND型启动设备时可用两级设计缩短启动时间

  去年痞子衡写过一篇骚操作文章 《借助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

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

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

二、支持eMMC读取的L2Boot设计

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

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

  为了不重复造轮子,痞子衡就在 \SDK_2_15_000_MIMXRT1170-EVKB\boards\evkbmimxrt1170\bootloader_examples\flashloader 基础上做了删减,仅保留 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)   // 用户程序体大小

  需要提醒的是,这个 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 正在执行,恭喜你,两级启动设计完成了。

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

欢迎订阅

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

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。文章来源地址https://www.toymoban.com/news/detail-855125.html

到了这里,关于痞子衡嵌入式:在i.MXRT1xxx系列上用NAND型启动设备时可用两级设计缩短启动时间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

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

    2024年02月02日
    浏览(26)
  • 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10.A)- FlexSPI NAND启动时间(RT1170)

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

    2024年02月15日
    浏览(72)
  • 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)

    https://www.cnblogs.com/henjay724/p/13770137.html 大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是 J-Link工具下i.MXRT的串行NOR Flash下载算法设计 。 在i.MXRT硬件那些事系列之《在串行NOR Flash XIP调试原理》一文中,痞子衡简单提了一下串行NOR Flash下载算法的概念,并

    2024年02月09日
    浏览(33)
  • 痞子衡嵌入式:MCUBootUtility v5.0发布,初步支持i.MXRT1180

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

    2024年02月05日
    浏览(35)
  • 痞子衡嵌入式:简析i.MXRT1170 MECC64功能特点及其保护片内OCRAM1,2之道

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是 i.MXRT1170 MECC64功能特点及其保护片内OCRAM1,2之道 。 ECC是 “Error Correcting Code” 的简写,ECC 能够实现错误检查和纠正,含有 ECC 功能的内存一般称为 ECC 内存,使用了 ECC 内存的系统在稳定性和可靠性上得到

    2024年02月04日
    浏览(28)
  • 痞子衡嵌入式:原来i.MXRT1170内部RAM的ECC初始化工作可全部由ROM完成

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是 i.MXRT1170内部RAM的ECC初始化工作可全部由ROM完成 。 痞子衡之前写了三篇文章 《M7 FlexRAM ECC》、《M4 L-MEM ECC》、《MECC64》 分别介绍了 i.MXRT1170 片上 2MB RAM 的不同 ECC 控制器用法,尤其是第三篇文章最后介绍

    2024年02月04日
    浏览(28)
  • 痞子衡嵌入式:借助i.MXRT10xx系列INIT_VTOR功能可以缩短程序热重启时间

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是 借助i.MXRT10xx系列INIT_VTOR功能可以缩短程序热重启时间 。 最近痞子衡写了篇文章 《i.MXRT从Serial NAND启动时间测量》,这篇文章详细测试了不同长度的 Non-XIP 程序在不同 NAND 访问速度下由 BootROM 加载启动所

    2024年02月14日
    浏览(32)
  • 痞子衡嵌入式:使能i.MXRT1050,1060 Hab签名或加密启动时App链接在片内SRAM的限制

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是 使能i.MXRT1050, 1060 Hab签名或加密启动时App链接在片内SRAM的限制 。 最近有客户反馈,在 RT1060 上测试 Non-XIP 程序启动,如果程序体部分链接进 0x20280000 地址之后的片内 OCRAM 区域(这部分是由 FlexRAM 分配出

    2024年04月12日
    浏览(28)
  • 痞子衡嵌入式:在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤(MIPI DSI接口)

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是 在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤 。 我们知道 LCD 屏的接口有很多:DPI-RGB、MIPI DSI、DBI/MCU(I8080)、LVDS、SPI 等等,接口不同,对应的软件驱动也不同。RT1170 片内外设对以上接口都能很好

    2024年02月03日
    浏览(41)
  • 《痞子衡嵌入式半月刊》 第 82 期

    这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回顾 :《痞子衡嵌入式半月刊: 第 81 期》

    2024年02月08日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包