痞子衡嵌入式:飛思卡爾Kinetis開發板OpenSDA調試器那些事(上)- 背景與架構


  你們好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給你們介紹的是飛思卡爾Kinetis MCU開發闆闆載OpenSDA調試器(上篇)git

  衆所周知,嵌入式軟件開發幾乎離不開調試器,由於寫一個稍有代碼規模(5K行以上)的嵌入式應用程序通常不可能一次性搞定,沒有任何bug,出了bug並不可怕,只要咱們能儘快定位bug並修復便可,調試器就是定位bug的利器,有了調試器咱們即可以進入系統主控芯片內部一窺究竟,控制芯片執行代碼的動做,實時查看芯片內部狀態,輔以各類調試技巧讓bug無處藏身。
  飛思卡爾Kinetis MCU屬於ARM Cortex-M系列芯片,所以本文主要介紹的Cortex-M系列芯片調試器,目前市面上Cortex-M調試器種類(這裏主要指的是硬件生產商)很是多,主要分爲以下兩大陣營:github

  • 第三方公司出品: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項目有一個總體認識。架構

1、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 K十、K20、K60芯片),早期的Kinetis開發闆闆載調試器爲OSBDM/OSJTAG,這是一種早已廣泛應用於飛思卡爾HCS十二、DSC、PowerPC系列芯片開發板上的調試器,OSBDM/OSJTAG調試器主芯片爲MC9S08JM60CLD(S08JM系列)。dom

  隨着Kinetis芯片的不斷推出,OpenSDA項目逐漸醞釀成熟,尤爲是2012年隨着飛思卡爾Cortex-M0+內核Kinetis L系列芯片的走紅,OpenSDA調試器開始大面積應用於Kinetis L系列芯片配套的Freedom開發板上,今後取代OSBDM/OSJTAG成爲Kinetis開發板上的標準調試器,你們能夠看一下下面這款經典的 FRDM-KL25Z 原理圖,其板載調試器即爲OpenSDA調試器(V1),OpenSDA調試器主芯片選用的MK20DX128VFM5(Kinetis K20系列)。ide

2、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主頻)。lua

2.2 幾經搬遷的行宮(V1/V2/V2.1/V2.2)

  肯定了調試器主芯片,下一步即是設計調試器外圍接口電路,實際上外圍電路發展至今不止一個版本,咱們能夠在飛思卡爾官網 OpenSDA項目主頁 裏的Download – OpenSDA Bootloader and Application下面找到以下各版本典型的開發板:debug

  不過這些版本主要都是硬件設計細節方面的小改動,而對於調試器軟件開發而言其實並無變化,由於接口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鏈接。

3、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公司並不開源其開發的Firmware源碼,而在OpenSDA這個立志要開源的調試器項目裏,Firmware不開源是一件比較奇怪的事,所以P&EMicro版本的Firmware逐漸沒落。

  ARM公司(Mbed)是OpenSDA項目第二個Firmware軟件服務商,雖然ARM官方已經設計了本身的ULINK調試器(ULINK主控爲Cypress加強8051內核芯片AN2131QC、ULINK2主控爲NXP公司ARM7內核芯片LPC2148FB064,ULINKpro主控爲Xilinx VIRTEX FPGA),但爲了ARM芯片的開放生態,其也同時主導了DAPLink項目(早期叫CMSIS-DAP項目,後來改名爲DAPLink),下面是其官網:

  DAPLink項目是徹底開源的,目前支持的主控芯片主要有5款:K20DX, KL26, LPC11U35, LPC4322, SAM3U2C,其中K20DX便是應用於OpenSDA的主控,另外4款芯片分別用於其餘類型的調試器,此處再也不展開。DAPLink版Firmware因其開放的生態使其大受歡迎,是目前的主流。

  SEGGER公司是OpenSDA項目第三個Firmware軟件服務商,雖然SEGGER設計已久的通用型J-Link調試器是目前市場上最流行的,但SEGGER並無所以固步自封,SEGGER看到OpenSDA調試器在Kinetis開發板上大面積推廣,想到了一個很是聰明的策略,那即是免費爲OpenSDA設計一個與J-Link軟件兼容的Firmware,使OpenSDA搖身一變成爲一個簡配版J-Link。

  因爲SEGGER公司是個靠軟件服務收費的商業公司,所以SEGGER版Firmware並不開源,而且調試功能上也受必定限制,但這並不影響SEGGER版Firmware的流行,所以J-Link調試器實在是太普及了,J-Link上位機軟件功能(J-Link Commander等)也很是強大。

  至此,飛思卡爾Kinetis MCU開發闆闆載OpenSDA調試器(上篇)痞子衡便介紹完畢了,掌聲在哪裏~~~

相關文章
相關標籤/搜索