大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列EVK上板载调试器的用法

  本文是i.MXRT硬件那些事系列第二篇,第一篇痞子衡给大家整体介绍了i.MXRT官方EVK,从本文开始痞子衡将细聊EVK上的组件,今天要讲的是一个非常经典而且常用的组件 - 板载调试器。如今各大半导体厂商推出的EVK基本都会配置自己家设计的板载调试器,方便客户开箱即用,不需要自己额外准备仿真器。众所周知,在嵌入式开发里调试器的作用是非常巨大的,用好调试器可以事半功倍。那么恩智浦出品的板载调试器有哪些特点呢?痞子衡将会为你揭秘:

一、背景简介

  说到i.MXRT系列EVK板载调试器的背景,那真是一段长长的历史。恩智浦在2015年收购了飞思卡尔,这两家知名半导体公司在这之前都设计了自己的板载调试器,飞思卡尔是OpenSDA调试器,主要用于Kinetis系列Tower/FRDM开发板;恩智浦是LPC-Link调试器,主要用于LPC系列LPCXpresso开发板。i.MXRT系列是在两家合并之后新推出的MCU产品,那么到底要采用哪一种板载调试器呢?设计i.MXRT EVK的工程师也曾纠结过,这个纠结最终也反映到了i.MXRT EVK上。
  i.MXRT系列最先发布的两款芯片是RT1050、RT1020,其后是RT1060、RT1015、RT1010、RT1170...,让我们分别打开它们EVK原理图找到其中板载调试器接口部分,如下所示:

  早期i.MXRT芯片(RT1050/RT1020)EVK上配置的是OpenSDA调试器,从RT1060以及之后的芯片开始,EVK上板载调试器全部换成了Freelink(其实Freelink就是LPC-Link,在i.MXRT EVK上叫LPC-Link听起来怪怪的,所以改了个名字),为什么会从OpenSDA调试器换到Freelink调试器?因为i.MXRT芯片主要是由原飞思卡尔团队设计的,所以板载调试器第一选择当然是轻车熟路的OpenSDA,但是Freelink主控芯片LPC4322(双核CM4+CM0, 204MHz)相比OpenSDA主控MK20DX128(单核CM4, 50MHz)要强大得多,使用LPC4322作为调试器主控不仅性能更佳,未来功能拓展性也更好(君不见SEGGER J-Link从V10开始主控也选择了LPC4300系列LPC4337),因此高性能的Freelink调试器显然更适合i.MXRT EVK。
  看起来当前i.MXRT EVK存在两种不同的调试器接口,不过仅从功能上来说,OpenSDA和Freelink有区别吗?其实没有区别,恩智浦出厂为这两种不同的调试器主控烧录了相同的固件DAPLink,DAPLink是ARM官方开源的Cortex-M调试器项目,在DAPLink项目主页上,MK20和LPC4322均在器件支持列表里,并且ARM官方还为OpenSDA和LPC-Link电路做了I/O级别的兼容:

二、核心功能

  上一节讲了无论是OpenSDA接口还是Freelink接口的调试器,其实从调试使用角度来说,它们本质上都是DAPLink调试器,其功能特点都取决于DAPLink固件,继续回到DAPLink项目主页,可以看到如下功能介绍:

  总体来说DAPLink固件主要有三大功能,第一是CMSIS-DAP协议的在线调试,知名IDE(Keil MDK、IAR EWARM)里都有CMSIS-DAP协议选项;第二是虚拟串口,嵌入式开发里,串口是常用的交互方式,DAPLink使用USB CDC虚拟了串口,为你省去了一个USB转串口的模块(如CH340T模块);第三是拖拽进U盘下载,DAPLink还额外做了一个U盘拖拽下载的功能,方便用户将应用程序下载到片内/片外Flash里。需要注意的是,虚拟串口与U盘下载功能都是板级相关的,跟I/O连接以及Flash型号绑定了。

三、使用示例

  讲完了DAPLink三大核心功能,下面痞子衡将结合恩智浦官方SDK里的示例工程为大家具体演示这三大功能。

3.1 准备工作

  • 准备一块IMXRT1050-EVKB(Rev.A)或者MIMXRT1060-EVK(Rev.A1),假设板载调试器里的DAPLink固件是完好的。
  • 准备一台PC,最好是Win10系统,如果是Win10以下系统需要手动安装好 serial port driver,注意要连接EVK上安装驱动,详见 安装注意事项
  • 准备一根Micro USB连接线,一端接上EVK的J14口,另一端连PC,EVK供电方式选择DAPLink(将J1的Pin5和Pin6连接)。
  • 在PC上安装至少一个IDE(MCUXpresso/MDK/IAR),痞子衡安装的是IAR EWARM v8.32.2。
  • 进入 MCUXpresso SDK Builder主页 下载最新的RT1050或RT1060 SDK开发包,Toolchain全部勾选上。

  一切准备工作就绪,你应该可以看到EVK上电源灯D3显示黄色,这表明DAPLink供电正常,再打开设备管理器,可以看到如下三处设备,表明DAPLink驱动也在正常工作。

3.2 演示一:在线调试

  首先演示的是在线调试,其实更准确的说是在内部SRAM中调试,即利用板载DAPLink调试器直接将应用程序下载进i.MXRT内部SRAM中,并跳转到应用程序中单步执行。当然有朋友会疑问,除了在内部SRAM调试,还有在外部SDRAM调试和在外部SPI NOR Flash调试,后两种不是本小节讨论的内容,痞子衡会在后续的文章中再细聊。
  以RT1050-EVKB为例,使用IAR打开SDK里的 \boards\evkbimxrt1050\demo_apps\hello_world\iar 工程,hello_world是SDK里最典型的例程,该例程一共包含6个Project build(不算xx_debug/xx_release区别),其中debug或ram_0x1400_debug是链接到SRAM中的工程(.text段在ITCM里,.data段在DTCM里),这两个build即可用作在SRAM调试,选中debug工程,确认工程Options里的Debugger选的是CMSIS-DAP,然后点击IAR菜单栏上的“Download and Debug (Ctrl+D)”按钮,便能进入单步调试。

3.3 演示二:虚拟串口

  继续演示虚拟串口,RT1050/RT1060 SDK里hello_world例程使能的是UART1(GPIO_AD_B0_12/13),OpenSDA/Freelink主控芯片与i.MXRT芯片的UART连接正是这个,因此DAPLink虚拟出来的串口可直接用于hello_world例程。
  进入hello_world工程单步调试以后,随便打开一个串口调试助手,COM口设为39(与3.1节里设备管理器里设备号一致),然后直接按F5运行,可以在串口调试助手接收区里看到"hello world."打印出来。如果没有看到打印信息,请检查J30/J31(RT1050-EVKB)或J45/J46(RT1060-EVK)是否已连接。

3.4 演示三:U盘拖拽下载

  最后演示U盘拖拽下载,前面讲的在线调试是把应用程序直接下载到i.MXRT内部SRAM中,断电重启后应用程序就丢失了,而U盘拖拽下载是将应用程序下载到外部SPI NOR Flash中,断电重启后ROM会负责启动SPI NOR Flash中的程序,因此可以实现离线运行。如果你看过痞子衡 《i.MXRT启动那些事》 系列文章,你应该知道所有类型的应用程序都可以存储在SPI NOR Flash中,无论是在Flash中XIP执行,还是在SRAM/SDRAM中执行,但是这些需要离线运行的应用程序必须要加上必要的i.MXRT启动头(FDCB,IVT, BootData)形成Bootable image才可以存储在SPI NOR Flash中,而U盘拖拽下载仅适用Bootable image。
  仍以RT1050-EVKB为例,前面说过hello_world一共包含6个Project build,其中flexspi_nor_debug和flexspi_nor_sdram_debug工程可以直接生成Bootable image,因为这两个Build使能了XIP_BOOT_HEADER_ENABLE,这个宏决定了evkbimxrt1050_flexspi_nor_config.c中的hyperflash_config结构体常量和fsl_flexspi_nor_boot.c中的image_vector_table、boot_data结构体常量是否会被链接进最终的可执行文件。

  痞子衡讲过,U盘拖拽下载是跟Flash类型相关的,咱们再打开RT1050-EVKB原理图,找到其中NOR Flash部分,从原理图上来看,RT1050-EVKB有两种类型NOR Flash可选,分别是八线HyperFlash(S26KS512SDPBHI02)和四线QSPI Flash(IS25WP064AJBLE),而默认连接的是八线HyperFlash,SDK例程里的flexspi_nor_xx build使能的启动头(FDCB)也正是对应HyperFlash(即evkbimxrt1050_flexspi_nor_config.c文件里的hyperflash_config)。

  在进行U盘拖拽之前,首先需要设置RT1050-EVKB的拨码开关SW7,从原理图上看,SW7的3、4位对应Boot Mode,我们需要将Boot Mode设为2'b01,即设置i.MXRT芯片进入Serial Downloader模式,然后重新上电,再进行U盘拖拽下载。为什么需要这么做?这是因为如果i.MXRT芯片处于非Serial Downloader模式(比如Internal Boot),板子上电,ROM会尝试初始化FlexSPI模块去访问外部Flash,如果FlexSPI模块被初始化过一次,这可能会导致DAPLink中的FlexSPI驱动不能正常工作。
  现在让我们选中flexspi_nor_debug工程,确认工程Options里Output Converter中Output format选择的是"Raw binary",编译工程生成可执行文件hello_world.bin,然后将这个bin文件拖拽进名为 "RT1050-EVK" 的虚拟U盘里:

  U盘拖拽下载已成功,现在让我们检验一下应用程序是否能够离线运行,首先需要将Boot Mode设为2'b10,即设置i.MXRT芯片进入Internal Boot模式,然后还需要设置i.MXRT从外部SPI NOR Flash启动,从原理图上看,SW7的1、2位对应BOOT_CFG[9]、BOOT_CFG[6],我们需要将BOOT_CFG[6]设成1'b0,即从FlexSPI1 NOR启动,然后再将BOOT_CFG[9]设成1'b1,即FLASH_TYPE选择010 - HyperFlash 1V8,与EVK上连接的Flash类型保持一致。此时断电重启,你应该可以看到hello world离线运行了。

  至于RT1060-EVK的U盘拖拽下载,其实与RT1050-EVKB差不多,只是需要注意的是RT1060-EVK上默认连接的Flash是四线QSPI Flash,SDK例程里的flexspi_nor_xx build使能的启动头(FDCB)也对应的是QSPI Flash(即evkimxrt1060_flexspi_nor_config.c文件里的qspiflash_config)。U盘下载成后BOOT_CFG[9]需设成1'b0,即FLASH_TYPE选择000 - Device supports 3B read by default。

四、更新固件

  讲完了DAPLink调试器的功能与使用,最后再介绍一下更新DAPLink固件的方法。那么我们为什么需要更新DAPLink固件?我们知道ARM官方一直在维护DAPLink项目,代码也在不断地更新,或修复bug或新增功能,使用最新的DAPLink固件总不是坏事。有人可能会说,只要旧的DAPLink固件功能足够我使用,我就没有必要更新,确实有一定道理,但出现如下两种情况,你就不得不更新DAPLink固件:

  • 你为i.MXRT-EVK更换了Flash连接(比如从HyperFlash换到了QSPI Flash),而且你还想继续使用DAPLink的U盘拖拽下载
  • i.MXRT官方SDK的重大升级,并且DAPLink固件与SDK存在某种联系。据痞子衡所知,SDK 2.3.x的时候,DAPLink是可以自动为拖拽进U盘的裸image加启动头的,而到了SDK 2.6.x的时候,DAPLink就是直接下载Bootable image。

  现在让我们试一下更换DAPLink固件,其实操作很简单,你还记得DAPLink调试器的U盘拖拽下载吗?其实DAPLink固件的更新也是用U盘拖拽下载的方式,因为DAPLink项目本身包含DAPLink Bootloader和DAPLink固件,下载用户应用程序我们借助的是DAPLink固件,而更新DAPLink固件,我们则需要借助DAPLink Bootloader。
  首先让我们准备一个DAPLink固件,我们不需要去DAPLink项目主页自己去编固件,直接进到恩智浦 OpenSDA主页 ,还是以RT1050-EVKB为例吧,默认DAPLink固件是支持onboard hyper-flash的,我们现在将其换为支持onboard spi-flash的固件,点击DAPLink v0244 - Supports onboard spi-flash下面的Download Binary即可下载到k20dx_mimxrt1050_evk_qspi_if_crc_20180419.zip包,将包解压后里面即是我们要的固件(.bin格式)。

  有了新固件,这时候需要让DAPLink进入Bootloader模式,确认J27(RT1050-EVKB)/J43(RT1060-EVK)连接的是Pin1-2,然后按住SW4(RT1050-EVKB)/SW9(RT1060-EVK)按钮,断电重启,如果出现名为 "MAINTENANCE" 的虚拟U盘,即表明进入DAPLink Bootloader模式成功,这时候将新固件拖拽进去即大功告成。

  至此,飞思卡尔i.MX RTyyyy系列EVK上板载调试器的用法痞子衡便介绍完毕了,掌声在哪里~~~

痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU硬件那些事(2.1)- 玩转板载OpenSDA,Freelink调试器的更多相关文章

  1. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU硬件那些事(1)- 官方EVK简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的配套EVK板. 半导体设计厂商发布任何一块MCU芯片新品,一般都会同步推出基于这款MCU的配套 ...

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

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

  3. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.6)- 串行NOR Flash下载算法(MCUXpresso IDE篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE开发环境下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行N ...

  4. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash X ...

  5. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.4)- 串行NOR Flash下载算法(Keil MDK工具篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是Keil MDK工具下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash ...

  6. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.5)- 串行NOR Flash下载算法(IAR EWARM篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是IAR开发环境下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash XI ...

  7. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(4)- OTP及其烧写方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的OTP. 在i.MXRTxxx启动系列第二篇文章 Boot配置(ISP Pin, OTP) 里痞子 ...

  8. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(1)- Boot简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的BootROM功能简介. 截止目前为止i.MX RTxxx系列已公布的芯片仅有一款i.MXRT60 ...

  9. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(2)- Boot配置(ISP_Pin, OTP)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的Boot配置. 在上一篇文章 Boot简介 里痞子衡为大家介绍了Boot基本原理以及i.MXRTx ...

随机推荐

  1. 基于注解的读取excel的工具包

    easyexcel-wraper easyexcel-wraper是什么? 一个方便读取excel内容,且可以使用注解进行内容验证的包装工具 easyexcel-wraper有哪些功能? 在easye ...

  2. 【占坑】IDEA从github 导入并运行 SpringBoot + VUE项目

    最近工程实践的项目内容是开发一个类似于博客和bbs论坛的系统,在github上找了一个类似的项目可以照着写一写.所以这里先占着坑,等把后端的数据库连接学完了再来填坑. github项目链接:githu ...

  3. ubantu下配置共享文件

    原文转自 http://blog.chinaunix.net/uid-25305993-id-3754109.html 一 samba的安装: sudo apt-get install samba   ...

  4. 编码神器Lombok,学会后开发效率至少提高一倍!

    Lombok会利用注解自动生成javaBean中的getter.setter.equals.toString等一系列方法,大大提供开发效率,本文详细介绍下Lombok的安装及使用. 本文目录 一.Lo ...

  5. 'mvn' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    一定要发现自己的问题不要盲目从众 1.把maven的安装包解压 2.配置环境变量 3.配置path路径 4.在dos下测试一下 结果出现:'mvn' 不是内部或外部命令,也不是可运行的程序 或批处理文 ...

  6. 开发必配的Finder设置

    1.显示标签页.显示路径栏.显示状态栏的设置位置,在访达->显示-> 显示状态栏 个人三个都设置了,但是觉得显示状态栏用的并不多,反而多一行,下面是显示状态栏的效果,主要可以一眼看出有多少 ...

  7. spring data jpa介绍

    首先了解JPA是什么? JPA(JavaPersistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.他的出现主 ...

  8. 利用github搭建私人maven仓库

    一.背景 最近在做HBase的项目,不免会引用到一些工具类,如StringUtils,NumberUtils,DateUtils这些,公司底层有封装好可以直接使用. 但是项目完成,用maven打包部署 ...

  9. Anroid逆向学习从编写so到静动态调试分析arm的一次总结

    Anroid逆向学习从编写so到静动态调试分析arm的一次总结 一.前言 最近跟着教我兄弟学逆向这篇教程学习Android逆向,在第七课后作业反复折腾了好几天,正好在折腾的时候对前面的学习总结一波,动 ...

  10. java8 新特性精心整理(全)

    前言 越来越多的项目已经使用 Java 8 了,毫无疑问,Java 8 是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和 JVM 等方面的十多个新特 ...