痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(2) - 在Flash调试及离线启动
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是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调试及离线启动的更多相关文章
- 痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(1) - 开发环境搭建与点灯
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1062 TencentOS Tiny EVB_AIoT开发板环境搭建与点灯. 腾讯 TencentOS 团队于2021年1 ...
- 痞子衡嵌入式:知名半导体MCU大厂软件开发C代码规范
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是飞思卡尔软件开发C语言编码规范. 2020鼠年春节是个漫长的假期,痞子衡在家百无聊赖,翻出了2016年10月1日(这个时间是痞子衡正式开始 ...
- 痞子衡嵌入式:深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程. 从外部串行NOR Flash启动问题是i.MXRT系列开发最 ...
- 痞子衡嵌入式:了解i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点. 前段时间痞子衡写了一篇 <深入i.MXRT1050系 ...
- 痞子衡嵌入式:高性能MCU之Media应用开发那些事 - 索引
大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是高性能MCU之Media应用开发相关知识. 飞思卡尔半导体(现恩智浦半导体)2017年推出的i.MX RT系列第一款芯片i.MXRT1 ...
- 痞子衡嵌入式:飞思卡尔Kinetis系列MCU开发那些事 - 索引
大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是飞思卡尔Kinetis系列微控制器相关知识. 飞思卡尔半导体(现恩智浦半导体)于2010年开始推出的Kinetis系列昭示着ARM C ...
- 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU硬件那些事(2.2)- 在串行NOR Flash XIP调试原理
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列EVK在串行NOR Flash调试的原理. 本文是i.MXRT硬件那些事系列第二篇的续集,在第二篇首集 ...
- 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(提问篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060上LCD横向渐变色显示出亮点问题的分析解决经验. 痞子衡前段时间在支持一个i.MXRT1060客户项目时遇到了LCD ...
- 痞子衡嵌入式:基于恩智浦i.MXRT1060的MP4视频播放器(RT-Mp4Player)设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是基于i.MXRT1062的MP4播放器参考设计. i.MXRT1062是恩智浦i.MXRT四位数系列的中端型号,外设搭配上很均衡,辅以6 ...
随机推荐
- C++匿名函数的使用
c++匿名函数使用方法 1.匿名函数的使用 匿名函数的基本语法为: //[捕获列表](参数列表)->返回类型{函数体} int main() { auto Add = [](int a, int ...
- fastq文件基本信息统计工具
之前写的一个小工具,写的很简陋,名字取的也很随意就叫skr,哈哈.主要是fq转fa.合并多个染色体的vcf文件等,功能不多(主要是C写起来太操蛋了T_T),通常我也只用来统计fastq文件信息: 这里 ...
- C4.5决策树-为什么可以选用信息增益来选特征
要理解信息增益,首先要明白熵是什么,开始很不理解熵,其实本质来看熵是一个度量值,这个值的大小能够很好的解释一些问题. 从二分类问题来看,可以看到,信息熵越是小的,说明分类越是偏斜(明确),可以理解为信 ...
- Google服务器架构图解简析
无疑是互联网时代最闪亮的明星.截止到今天为止,Google美国主站在Alexa排名已经连续3年第一,Alexa Top100中,各国的Google分站竟然霸占了超过20多个名额,不得不令人感叹Goog ...
- 网站性能调优实战-学相伴KuangStudy
面对并发我们是如何优化KuangStudy网站性能的? 每个项目都会随着用户和数据的增长调整架构,来面对未来的问题,我们也不例外,在1月5号我们平台正式公测后,引起了很多观众的热烈反响,仅仅4天,注册 ...
- 使用dumi生成react组件库文档并发布到github pages
周末两天玩了下号称西湖区东半球最牛逼的react文档站点生成工具dumi,顺带结合github pages生成了react-uni-comps文档站, 一套弄下来,感觉真香,现在还只是浅尝,高级的特性 ...
- flink---实时项目--day01--1. openrestry的安装 2. 使用nginx+lua将日志数据写入指定文件中 3. 使用flume将本地磁盘中的日志数据采集到的kafka中去
1. openrestry的安装 OpenResty = Nginx + Lua,是⼀一个增强的Nginx,可以编写lua脚本实现⾮非常灵活的逻辑 (1)安装开发库依赖 yum install -y ...
- ALitum技巧
创建异型焊盘的方法 SCH与PCB同步修改后元器件乱跑的解决方法 Altium 在PCB重新编号更新到SCH原理图的方法 同步问题 其他技巧: 当前层亮色,其他层灰色切换:SHIFT+S
- Docker学习(三)——Docker镜像使用
Docker镜像使用 当运行容器时,使用的镜像如果在本地中不存在,docker就会自动从docker镜像仓库中下载,默认是从Docker Hub公共镜像源下载. 1.镜像使用 (1)列 ...
- mystar01 nodejs MVC 公共CSS,JS设置
mystar01 nodejs MVC gulp 项目搭建 config/express.js中定义别名 //将下载的第三方库添加到静态资源路径当中,方便访问 app.use('/jquery', e ...