加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

飞思卡尔 Kinetis MCU 开发板板载 OpenSDA 调试器(上)

2019/10/10
350
阅读需 36 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

今天给大家介绍的是飞思卡尔 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 调试器功能相关的主要有五部分电路:

蓝色 LED: 指示 OpenSDA 调试器工作状态,主要有两种状态,一种是常亮(正常运行模式),另一种是闪烁(自身 Firmware 更新模式)。

Boot 按键: 用于辅助进入 OpenSDA 调试器自身 Firmware 更新模式(也叫 MSD Bootloader 模式),电路上电前按下 Boot 按键不放即可进入 MSD Bootloader 模式(可在 PC 里看到新增名为 BOOTLOADER 的磁盘),往磁盘里拷贝相应调试器 Firmware 文件即可完成更新。

USB 接口: 与上位机 PC 连接,完成后续 USB 转串口(可到 PC 设备管理器看到新增串口设备), SWD 调试交互功能。

UART 接口: 与目标 MCU 连接。

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 调试器(上篇)痞子衡便介绍完毕了,掌声在哪里~~~

相关推荐

电子产业图谱

硕士毕业于苏州大学电子信息学院,目前就职于恩智浦(NXP)半导体MCU系统部门,担任嵌入式系统应用工程师。痞子衡会定期分享嵌入式相关文章