大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1062 TencentOS Tiny EVB_AIoT开发板在Flash调试与离线启动

  腾讯 TencentOS 团队于2021年12月8日联合恩智浦半导体、安谋科技发起了一个线上开发者活动 - TencentOS Tiny AIoT 应用创新大赛。为了这个大赛,腾讯 TencentOS 团队联合恩智浦半导体、厚德物联网设计了一款高性能 AIoT 评估板,用于 TencentOS tiny 基础内核和 AIoT 应用功能体验和评估。

  痞子衡受邀为这个大赛准备一场直播课程(12月30日晚7点),主题是板载主控恩智浦 i.MXRT1062 芯片快速开发指南,由于课程时间限定在40分钟,要讲的内容又比较多,注定只能走马观花,所以这个系列文章就围绕 EVB_AIoT 开发板给这场直播做一个铺垫和补充。上一篇我们讲了 《开发环境搭建与点灯》,本文是第二篇,我们来讲讲在 Flash 调试与离线启动:

一、跑通串口打印

  上一篇文章我们借助板载 DAP-Link 调试器在芯片内部 RAM 里以在线调试的方式跑通了最入门的点灯实验,今天我们换个同样也非常经典的串口打印例程,恩智浦 SDK 包里有模板工程(记得用 MCUXpresso IDE 导出):

  • 串口例程:\SDK_2.10.1_EVK-MIMXRT1060\boards\evkmimxrt1060\demo_apps\hello_world

  hello_world 模板工程里使能的是 i.MXRT1062 UART1(管脚是 GPIO_AD_B0[13:12]]),我们查看 EVB_AIoT 板原理图,这两个 UART1 信号同样被引了出来(即下图 AT_PC_UART 信号),不过用了模拟开关 BCT4699 做了切换设计,这里我们需要改一下默认设置,将母板上 SW1 开关拨到 1-2,这样 UART1 就被连到了板载调试器虚拟串口上:

1. 开关 SW1 选择 2-3(出厂默认设置):
- 母板接插无线模块连通母板 DAP-Link 调试器虚拟串口
2. 开关 SW1 选择 1-2:
- 子板主控 UART2 连通母板接插无线模块
- 子板主控 UART1 连通母板 DAP-Link 调试器虚拟串口

  虽然不用更改 hello_world 模板工程的源代码,但是我们还是要按照第一篇文章 《开发环境搭建与点灯》 第 2.3 小节里指示在工程属性里勾选上 Link application to RAM 选项,此外还要调整一下工程属性 Memory details 窗口里 SRAM_DTC 的位置,不同于 led_blinky 模板工程默认用 SRAM_DTC 作主链接 RAM,这个 hello_world 模板工程默认是用外接 SDRAM 作为主链接 RAM,这个会涉及 SDRAM 初始化脚本加载问题,我们先不考虑这个问题,直接将 RAM3 移动到 RAM 位置:

  改完后编译工程,使用板载 DAP-Link 下载工程调试,然后用串口调试助手软件打开板载 DAP-Link 调试器虚拟出的 mbed Serial Port,在 IDE 里按 F8(Resume)键让程序跑起来,这时候应该能看到 'hello world.' 的打印输出。

二、i.MXRT1062 离线启动

  目前为止,我们跑的两个例程 led_blinky 和 hello_world 均是在 i.MXRT1062 内部 TCM 里在线调试,板子断电后程序就丢失了。那么如何去使能离线启动呢?

  这里就开始涉及 i.MXRT1062 启动话题了,建议先通读痞子衡旧文 《i.MXRT Boot简介》。i.MXRT1062 内部并没有非易失性代码存储器,所以你会在 EVB_AIoT 子板上看到有两颗华邦 W25Q64JVSIQ Flash,一颗连到了芯片 FlexSPI1 外设(管脚 GPIO_SD_B1[11:06],这并不是唯一的启动连接 pinmux 选择,详见 《i.MXRT1060 FlexSPI NOR启动连接方式大全》 ),另一颗连到了芯片 LPSPI3 外设(管脚 GPIO_AD_B0[3:0]),这两颗 Flash 都可以用于存储应用程序代码去启动,只不过前一种连接方式能支持 XiP,后者不支持 XiP,一般情况下我们更多是用 FlexSPI 连接的 NOR Flash 去做离线启动:

  i.MXRT1062 的启动工作主要是由固化在芯片内部的 ROM bootloader 来实现的,因为 ROM bootloader 在设计时要求支持非常多种类的存储器(串并行NOR/串并行NAND/SD卡/eMMC等)去启动,所以其定义了一套启动头来辅助启动,详见 《i.MXRT Bootable image格式与加载》一文。

  对于连接在 FlexSPI 外设上的串行 NOR Flash,其至少需要三个启动头,包括 qspiflash_config、image_vector_table、boot_data,它们需要被烧写到 Flash 中的固定偏移位置:0x0、0x1000、0x1020,这三个启动头已经在模板工程目录 xip 文件夹里的源文件里了。image_vector_table、boot_data 头正常不需要改动,qspiflash_config 头因连接的 Flash 而异:

三、MCUXpresso IDE下在Flash调试

  要实现在 Flash 调试,首先 IDE 要能把应用程序下载进 Flash,其次被下载的应用程序要能够从 Flash 中正常启动。前者需要一个合适的 Flash 下载算法(请阅读 《MCUXpresso IDE串行NOR Flash下载算法》一文),后者需要正确的启动头以及芯片启动模式设置(请阅读 《MCUXpresso IDE下在线调试时使用不同复位策略的现象总结》 一文)。

  板级设置方面只需要检查下子板上的 J2 拨码开关状态是不是 1-off, 2-on,即主控芯片 BOOT_MODE[1:0] 为 2'b10 - 从 Flash 启动模式,注意这个 J2 拨码开关的设置仅 POR 复位有效。

  因为 EVB_AIoT 板上使用的这颗华邦 W25Q64JVSIQ 与恩智浦官方 MIMXRT1060-EVK 评估板上使用的芯成 IS25WP064AJBLE 特性类似,均是符合 JESD216A 标准的四线串行 NOR Flash,而且管脚连接也一致,所以它俩对于 i.MXRT 来说下载算法和启动头是一样的,我们不需要做任何改动,直接使用模板工程配置就行了。

  在 MCUXpresso IDE 工程里去掉 Link application to RAM 选项,再检查下 LinkServer flash driver 的设置,这个默认 MIMXRT1060_SFDP_QSPI.cfx 下载算法直接可以用于下载调试 EVB_AIoT 子板上的华邦 Flash。试试看你可以在 Flash 里单步调试这个 hello_world 例程的。

四、独立烧录工具

  除了在 MCUXpresso IDE 里通过调试器去下载程序进 Flash 启动,恩智浦还提供了独立的上位机工具来完成程序烧录,这主要借助了 i.MXRT1062 的 ROM bootloader 以及二级 Flashloader 设计,这个功能不是依靠 SWD 调试口来下载程序,而是主控芯片上指定的 UART1(GPIO_AD_B0[13:12]) 或者 USB OTG1 口去下载。

  EVB_AIoT 母板上将 USB OTG1 信号引到了 PCIe 接头上,所以我们不方便用 USB 口去下载程序,只能用连到母板板载 DAP-Link 调试器虚拟串口上的 UART1 去下载了(这也是第一小节跑通串口打印例程的用意,确认下串口没问题)。

  使用独立烧录工具下载前,必须先将子板上的 J2 拨码开关状态设为 1-on, 2-off,即主控芯片 BOOT_MODE[1:0] 为 2'b01 - 串行下载模式,再次提醒这个 J2 拨码开关的设置仅 POR 复位有效。下载完成后需要将 J2 切回到 1-off,2-on 看芯片启动效果。

  独立烧录软件均支持常见的应用程序镜像文件格式(.elf/.axf/.srec/.hex/.bin),你随便用哪种格式都可以完成下载,非常方便。

4.1 MCUBootUtility

4.2 MCUXpresso Secure Provisioning Tool

  至此,i.MXRT1062 TencentOS Tiny EVB_AIoT开发板在Flash调试与离线启动痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

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

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(2) - 在Flash调试及离线启动的更多相关文章

  1. 痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(1) - 开发环境搭建与点灯

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1062 TencentOS Tiny EVB_AIoT开发板环境搭建与点灯. 腾讯 TencentOS 团队于2021年1 ...

  2. 痞子衡嵌入式:知名半导体MCU大厂软件开发C代码规范

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是飞思卡尔软件开发C语言编码规范. 2020鼠年春节是个漫长的假期,痞子衡在家百无聊赖,翻出了2016年10月1日(这个时间是痞子衡正式开始 ...

  3. 痞子衡嵌入式:深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程. 从外部串行NOR Flash启动问题是i.MXRT系列开发最 ...

  4. 痞子衡嵌入式:了解i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点. 前段时间痞子衡写了一篇 <深入i.MXRT1050系 ...

  5. 痞子衡嵌入式:高性能MCU之Media应用开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是高性能MCU之Media应用开发相关知识. 飞思卡尔半导体(现恩智浦半导体)2017年推出的i.MX RT系列第一款芯片i.MXRT1 ...

  6. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是飞思卡尔Kinetis系列微控制器相关知识. 飞思卡尔半导体(现恩智浦半导体)于2010年开始推出的Kinetis系列昭示着ARM C ...

  7. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU硬件那些事(2.2)- 在串行NOR Flash XIP调试原理

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列EVK在串行NOR Flash调试的原理. 本文是i.MXRT硬件那些事系列第二篇的续集,在第二篇首集 ...

  8. 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(提问篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060上LCD横向渐变色显示出亮点问题的分析解决经验. 痞子衡前段时间在支持一个i.MXRT1060客户项目时遇到了LCD ...

  9. 痞子衡嵌入式:基于恩智浦i.MXRT1060的MP4视频播放器(RT-Mp4Player)设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是基于i.MXRT1062的MP4播放器参考设计. i.MXRT1062是恩智浦i.MXRT四位数系列的中端型号,外设搭配上很均衡,辅以6 ...

随机推荐

  1. 监听浏览器tab切换

    监听浏览器切屏 为了完成验证用户在切换浏览器tab时进行登录再次认证需求需要监听浏览器切换窗口 if (document.hidden !== undefined) { document.addEve ...

  2. R shinydashboard——3.外观

    目录 1.皮肤 2.注销面板 3.CSS 4. 标题延长 5.侧边栏宽度 6.图标 7.状态和颜色 1.皮肤 shinydashboard有很多颜色主题和外观的设置.默认为蓝色,可指定黑丝.紫色.绿色 ...

  3. ggplot2 颜色渐变(离散颜色)设置

    一.示例数据准备 数据格式如下: 二.作图 1.直接作图结果如下,默认蓝色渐变. 1 ggplot(df,aes(x=BP_A,y=P.value,colour=R2))+ 2 geom_point( ...

  4. C++面试基础篇(二)

    1.数组与指针的区别 数组下标运算实际上都是通过指针进行的. 数组名代表着指向该数组中下标为0的元素的指针,但有例外:sizeof(数组名)返回整个数组的大小,而非指针大小:&数组名返回一个指 ...

  5. 《Redis设计与实现》知识点目录

    Redis设计与实现 第一部分 数据结构与对象 第二章 简单动态字符串 p8 简单动态字符串SDS 2.1 SDS的定义 p9 每个sds.h/sdshdr结构表示一个SDS值 2.2 SDS与C字符 ...

  6. Java偏向锁浅析

    偏向锁的定义 顾名思义,偏向锁会偏向第一个访问锁的线程. 如果在接下来的运行过程中,该锁没有被其他线程访问,这持有偏向锁的线程将永远不需要同步 如果在运行过程中,遇到了其他线程抢占锁,则持有偏向锁的线 ...

  7. hadoop-uber作业模式

    如果作业很小,就选择和自己在同一个JVM上运行任务,与在一个节点上顺序运行这些任务相比,当application master 判断在新的容器中的分配和运行任务的开销大于并行运行它们的开销时,就会发生 ...

  8. flink02------1.自定义source 2. StreamingSink 3 Time 4窗口 5 watermark

    1.自定义sink 在flink中,sink负责最终数据的输出.使用DataStream实例中的addSink方法,传入自定义的sink类 定义一个printSink(),使得其打印显示的是真正的ta ...

  9. centos7 自动同步时间

    rm -rf /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime vim /etc/sysconfig/cloc ...

  10. recyclerView DiffUtil使用

    DiffUtil是和RecyclerView一块用的,DiffUtil用来比较两个数据集,他的最大用处是在RecyclerView刷新时,不在无脑. 以前adapter.notifyDataSetCh ...