大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是飞思卡尔Kinetis MCU开发板板载OpenSDA调试器(上篇)

  众所周知,嵌入式软件开发几乎离不开调试器,因为写一个稍有代码规模(5K行以上)的嵌入式应用程序一般不可能一次性搞定,没有任何bug,出了bug并不可怕,只要我们能尽快定位bug并修复即可,调试器就是定位bug的利器,有了调试器我们便可以进入系统主控芯片内部一窥究竟,控制芯片执行代码的动作,实时查看芯片内部状态,辅以各种调试技巧让bug无处藏身。
  飞思卡尔Kinetis MCU属于ARM Cortex-M系列芯片,因此本文主要介绍的Cortex-M系列芯片调试器,目前市面上Cortex-M调试器种类(这里主要指的是硬件生产商)非常多,主要分为如下两大阵营:

  • 第三方公司出品:SEGGER的J-Link、IAR的I-jet、ARM的ULINK、开源项目OpenJTAG等
  • 半导体厂商出品:Freescale的OpenSDA、NXP的LPC-Link、ST的ST-LINK、TI的Stellaris ICDI、Nuvoton的Nu-Link等。

  本文要讲的主角OpenSDA属于阵营里的后者,其一般不单独存在,都是附着在飞思卡尔Kinetis官方开发板上,你可以理解为OpenSDA调试器是专为Kinetis芯片设计的(但其实其firmware设计是可以做到通用于所有Cortex-M芯片的),今天痞子衡就为大家介绍OpenSDA项目的来龙去脉,让大家对OpenSDA项目有一个整体认识。

一、OpenSDA项目背景

  OpenSDA全称是Open-standard Serial and Debug Adapter,从名字上来看,这个项目是要做一个开放标准的串口与调试适配器,该项目主要是为了Kinetis芯片配套官方开发板而设计的,直接板载在Kinetis官方开发板上,用于取代传统的第三方仿真器(比如J-Link)+开发板的开发调试模式。
  众所周知,ARM公司于2010年2月正式发布Cortex-M4内核,飞思卡尔于2010年8月推出其第一款ARM Cortex-M内核芯片Kinetis K60,这也是业界一款Cortex-M4内核的芯片。OpenSDA项目并不是从Kinetis诞生之初便存在的,不信你可以查看最早的Kinetis Tower开发板 TWR-K60D100M 原理图(该板通用于Kinetis K10、K20、K60芯片),早期的Kinetis开发板板载调试器为OSBDM/OSJTAG,这是一种早已普遍应用于飞思卡尔HCS12、DSC、PowerPC系列芯片开发板上的调试器,OSBDM/OSJTAG调试器主芯片为MC9S08JM60CLD(S08JM系列)。

  随着Kinetis芯片的不断推出,OpenSDA项目逐渐酝酿成熟,尤其是2012年随着飞思卡尔Cortex-M0+内核Kinetis L系列芯片的走红,OpenSDA调试器开始大面积应用于Kinetis L系列芯片配套的Freedom开发板上,从此取代OSBDM/OSJTAG成为Kinetis开发板上的标准调试器,大家可以看一下下面这款经典的 FRDM-KL25Z 原理图,其板载调试器即为OpenSDA调试器(V1),OpenSDA调试器主芯片选用的MK20DX128VFM5(Kinetis K20系列)。

二、OpenSDA硬件电路

  概括来说,OpenSDA调试器主要由硬件和软件两部分组成,其中硬件主要分为主芯片和外围接口电路,下面痞子衡分别为大家介绍OpenSDA的主芯片和外围接口电路。

2.1 不可撼动的男主(MK20DX128VFM5)

  对于一个调试器项目来说,主芯片的选用至关重要,这直接决定了调试器的性能。OpenSDA调试器主芯片选用的是MK20DX128VFM5,这是一款Cortex-M4内核,主频50MHz,16KB SRAM,160KB ROM(128KB Flash,32KB FlexNVM(最大2KB EEPROM)),内置1个USBFS控制器,QFN32封装的芯片。
  为何选择Kinetis芯片作为调试器主控?当然是为了进一步推广Kinetis系列的知名度,毕竟飞思卡尔的Cortex-M芯片推出较晚。那么为何选择Kinetis K2x系列芯片呢?这要从下面Kinetis K系列的特性表里才能找到答案,从下表可以我们看出K2x系列是支持USB接口的入门芯片,而调试器主控是必须要支持USB接口的。

  为何选择型号为MK20DX128VFM5的K2x芯片呢?虽然这款芯片属于K2x系列里最低配型号(考虑到调试器将随着开发板大面积推广,成本也是一个不可忽略的因素),但是其外设(USBFS, UART, SPI)与存储(16KB RAM,160KB ROM)方面是满足调试器项目要求的。有人可能会问,50MHz主频会不会有点低,从而影响调试器性能?痞子衡可以明确地告诉你,性能是够的,作为对比SEGGER J-Link V7/V8里的主控是Atmel AT91SAM7S64(ARM7TDMI内核, 55MHz主频)。

2.2 几经搬迁的行宫(V1/V2/V2.1/V2.2)

  确定了调试器主芯片,下一步便是设计调试器外围接口电路,实际上外围电路发展至今不止一个版本,我们可以在飞思卡尔官网 OpenSDA项目主页 里的Download – OpenSDA Bootloader and Application下面找到如下各版本典型的开发板:

  不过这些版本主要都是硬件设计细节方面的小改动,而对于调试器软件开发而言其实并没有变化,因为接口Pinout并没有改变,痞子衡将上述各开发板原理图里的OpenSDA电路仔细查看对比整理出了如下通用的OpenSDA硬件原理简图:

  从上面原理简图我们可以看出,OpenSDA电路其实非常简洁,除了电源、晶振、主芯片K20自身的调试接口外,其他跟OpenSDA调试器功能相关的主要有五部分电路:

  1. 蓝色LED: 指示OpenSDA调试器工作状态,主要有两种状态,一种是常亮(正常运行模式),另一种是闪烁(自身Firmware更新模式)。
  2. Boot按键: 用于辅助进入OpenSDA调试器自身Firmware更新模式(也叫MSD Bootloader模式),电路上电前按下Boot按键不放即可进入MSD Bootloader模式(可在PC里看到新增名为BOOTLOADER的磁盘),往磁盘里拷贝相应调试器Firmware文件即可完成更新。
  3. USB接口: 与上位机PC连接,完成后续USB转串口(可到PC设备管理器看到新增串口设备), SWD调试交互功能。
  4. UART接口: 与目标MCU连接。
  5. SWD接口: 与目标MCU连接。

三、OpenSDA软件设计

  随着OpenSDA项目的不断迭代,目前(2018年9月)OpenSDA调试器版本已经更新到V2.2,飞思卡尔官网有 OpenSDA项目主页,在主页上我们可以看到如下OpenSDA项目版本对比:

3.1 软件架构

  不管是哪个版本的OpenSDA,其软件架构是一致的,如下图所示,OpenSDA软件主要由两部分组成:MSD Bootloader、OpenSDA Application(Firmware),其中MSD Bootloader占据调试器主控K20芯片内部Flash的上半区,K20芯片上电永远先执行MSD Bootloader程序,MSD Bootloader功能比较单一,就是用来更新OpenSDA Firmware,这样使得调试器软件升级比较容易。
  OpenSDA Firmware则是调试器的核心,调试器的主要功能(SWD调试、USB转串口)均是这个应用程序实现的,OpenSDA Firmware占据K20芯片内部Flash的下半区,其本身不能上电自动执行,必须由MSD Bootloader引导执行。

3.2 后宫佳丽有三个(软件服务商)

  说到OpenSDA Firmware的供应商,主要有三个,分别是P&EMicro、ARM Mbed、SEGGER,且听痞子衡一一道来:

3.2.1 原配P&E Micro

  P&EMicro公司是OpenSDA项目最早的Firmware软件服务商,其Firmware软件专为OpenSDA设计,我们可以从下面网站下载到其开发的Firmware和配套上位机驱动:

  • P&EMicro OpenSDA主页: http://www.pemicro.com/opensda/

  不过比较遗憾的是P&EMicro公司并不开源其开发的Firmware源码,而在OpenSDA这个立志要开源的调试器项目里,Firmware不开源是一件比较奇怪的事,因此P&EMicro版本的Firmware逐渐没落。

3.2.2 新欢ARM Mbed(DAPLink)

  ARM公司(Mbed)是OpenSDA项目第二个Firmware软件服务商,虽然ARM官方已经设计了自己的ULINK调试器(ULINK主控为Cypress增强8051内核芯片AN2131QC、ULINK2主控为NXP公司ARM7内核芯片LPC2148FB064,ULINKpro主控为Xilinx VIRTEX FPGA),但为了ARM芯片的开放生态,其也同时主导了DAPLink项目(早期叫CMSIS-DAP项目,后来更名为DAPLink),下面是其官网:

  • ARMMbed CMSIS-DAP主页: https://os.mbed.com/handbook/cmsis-dap-interface-firmware
  • ARMMbed CMSIS-DAP源码: https://github.com/mbedmicro/CMSIS-DAP
  • ARMMbed DAPLink主页: https://os.mbed.com/handbook/DAPLink
  • ARMMbed DAPLink源码: https://github.com/ARMmbed/DAPLink

  DAPLink项目是完全开源的,目前支持的主控芯片主要有5款:K20DX, KL26, LPC11U35, LPC4322, SAM3U2C,其中K20DX即是应用于OpenSDA的主控,另外4款芯片分别用于其他类型的调试器,此处不再展开。DAPLink版Firmware因其开放的生态使其大受欢迎,是目前的主流。

3.2.3 野花SEGGER(J-Link)

  SEGGER公司是OpenSDA项目第三个Firmware软件服务商,虽然SEGGER设计已久的通用型J-Link调试器是目前市场上最流行的,但SEGGER并没有因此固步自封,SEGGER看到OpenSDA调试器在Kinetis开发板上大面积推广,想到了一个非常聪明的策略,那便是免费为OpenSDA设计一个与J-Link软件兼容的Firmware,使OpenSDA摇身一变成为一个简配版J-Link。

  • SEGGER OpenSDA主页: https://www.segger.com/products/debug-probes/j-link/models/other-j-links/opensda-sda-v2/

  由于SEGGER公司是个靠软件服务收费的商业公司,因此SEGGER版Firmware并不开源,并且调试功能上也受一定限制,但这并不影响SEGGER版Firmware的流行,因此J-Link调试器实在是太普及了,J-Link上位机软件功能(J-Link Commander等)也非常强大。

  至此,飞思卡尔Kinetis MCU开发板板载OpenSDA调试器(上篇)痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

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

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

痞子衡嵌入式:飞思卡尔Kinetis开发板OpenSDA调试器那些事(上)- 背景与架构相关推荐

  1. 痞子衡嵌入式:在MDK开发环境下将关键函数重定向到RAM中执行的几种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下将关键函数重定向到RAM中执行的几种方法. 这个关键函数重定向到 RAM 中执行系列文章,痞子衡已经写过 <IA ...

  2. 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...

  3. 痞子衡嵌入式:在IAR开发环境下将整个源文件代码重定向到任意RAM中的方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将整个源文件代码重定向到任意RAM中的方法. 痞子衡旧文 <在IAR下将关键函数重定向到RAM中执行的方法> ...

  4. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU特性那些事(2)- RT1052DVL6性能实测(CoreMark)...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的性能. 在前面的文章 i.MXRT1xxx微控制器概览 里,痞子衡给大家简介过恩智浦半导体在20 ...

  5. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU特性那些事(2)- RT685EVKA性能实测(Dhrystone)...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的性能. 在前面的文章 i.MXRTxxx微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2018 ...

  6. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.2)- 在串行NOR Flash XIP调试原理

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

  7. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(3)- Serial ISP模式(blhost)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的Serial ISP模式. 在上一篇文章 Boot配置(ISP Pin, OTP) 里痞子衡为大家 ...

  8. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.2)- FlexSPI NOR连接方式大全(RT1060/1064(SIP))...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1060/1064(SIP)两款MCU的FlexSPI NOR启动的连接方式. 上一篇文章<FlexSPI N ...

  9. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(4)- Flashloader初体验(blhost)...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Flashloader. 在上一篇文章 Serial Downloader模式(sdphost, ...

最新文章

  1. python处理excel大数据-【Python 模块】 xlrd 读取 Excel 文件
  2. Android超简单的进度条源码
  3. c++数据结构中 顺序队列的队首队尾_数据结构与算法—队列详解
  4. 总线制和多线制示意图_主机总线线 总线制和多线制示意图
  5. [置顶] iOS中让省略号垂直居中
  6. mmapcopy函数的编写
  7. MVCC(Multiversion concurrency control)
  8. 新库上线 | CnOpenDataA股上市公司裁判文书数据
  9. 新年里真挚的情怀共祝愿南阳好
  10. K8S学习之污点容忍
  11. 点击放大 swiper+photoswipe
  12. trigger()方法
  13. AI幼儿园教育火了,人人都是深度学习界的明日之星?
  14. Thinkpad安装系统后,在设备管理器中有一其他设备叹号为“PCI 数据捕获和信号处理控制器”...
  15. 格式工厂能转换kux吗 转成MP4 转成avi 工具软件方法
  16. Nginx反向代理、负载均衡和动静分离
  17. python巧妙拼接图片
  18. 理想和现实总是有差距
  19. 计算机板报课作文500字,板报_500字日记作文_初中作文_大文斗范文网
  20. 华为技术之ARP-地址解析协议

热门文章

  1. 直流无刷电机FOC控制算法 理论到实践 —— 理论(一)
  2. 什么是微信附近推广告宣传?效果怎么样?是以什么方式推广?
  3. reduceByKeyAndWindow基于滑动窗口的热点搜索词实时统计(Scala版本)
  4. 基于java失物招领系统
  5. 市场营销学5——消费者购买行为分析
  6. 2020春招---飞鱼科技 一面面经
  7. cache策略实现的原理(200、304返回码含义)
  8. 【转】情牵牛仔裤 情色一生
  9. 第九周 任务一
  10. 谁发明了计算机人工智能,麻省理工学院发明了人工智能芯片