1. 程式人生 > >痞子衡嵌入式:飛思卡爾Kinetis開發板OpenSDA偵錯程式那些事(上)- 背景與架構

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

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾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公司並不開源其開發的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偵錯程式(上篇)痞子衡便介紹完畢了,掌聲在哪裡~~~