痞子衡嵌入式:把玩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 ...
随机推荐
- [R] 如何快速生成许多差异明显的颜色?
这个需求真的太常见了!注意问题强调的几个关键词:一是快速,二是大量,三是差异明显.在生成大量元素比较图时要明显区分不同样本,比如宏基因组中的物种分析: 方法一:自定义 自定义颜色:优点是选择差异明显的 ...
- TP、PHP同域不同子级域名共享Session、单点登录
TP.PHP同域不同子级域名共享Session.单点登录 目的: 为了部署同个域名下不同子级域名共享会话,从而实现单点登录的问题,一处登录,同域处处子系统即可以实现自动登录. PHP支持通过设置coo ...
- 睡眠或者重启windows,无法ssh连接或者pingVMware的虚机
睡眠后无法直接ssh重连VMware主机问题 这个问题我在win8上出现过,win10看了下同事可以正常连,不知道其他有没有问题. 解决方法: 1.关闭vmnet8和vmnet0里面的 npcap 功 ...
- android Fragment跳转Fragment
android Fragment跳转Fragment,最新的android studio3 在系统模板建立的BottomNavigationView 中跳转方式 此版本下不能用FragmentMana ...
- Excel-在整个工作簿中查找/替换
13.在整个工作簿中查找/替换 调范围为:工作簿,默认是工作表:
- 二叉树——根据遍历结果,画出对应的二叉树 转载至:http://canlynet.blog.163.com/blog/static/255013652009112602449178/
这道题目很经典,具体如下: 已知遍历结果如下,试画出对应的二叉树: 前序:A B C E H F I J D G K 中序:A H E C I F J B D K G 解题要点: 1.前序.中序.后序 ...
- makefile高级用法
在某些文件里面找.o find ./ -name "*.o" -e ls- R 看文件目录下面的文件 嵌套 和 VPATH [1]VPATH的用法 (1)VPATH:虚路径 1) ...
- 详解getchar()函数与缓冲区
1.首先,我们看一下这段代码: 它的简单意思就是从键盘读入一个字符,然后输出到屏幕.理所当然,我们输入1,输出就是1,输入2,输出就是2. 那么我们如果输出的是12呢? 它的输出是1. 这里我们先简单 ...
- 去空格及换行制表符【c#】
string returnStr = tbxContractNO.Text.Replace("\n", "").Replace(" ", & ...
- aboard, abolish
aboard board做动词有上车/船/飞机的意思,boarding就是正在上.board做名词有板的意思,车厢地板的板. a是个词根,有三种意思:1. 以某种状态或方式,如: ablaze, af ...