飛思卡爾Kinetis MCU屬於ARM Cortex-M系列晶元,因此本文主要介紹的Cortex-M系列晶元調試器,目前市面上Cortex-M調試器種類(這裡主要指的是硬體生產商)非常多,主要分為如下兩大陣營(第三方公司,半導體廠商),本文要講的主角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調試器功能相關的主要有五部分電路:
- 藍色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公司是個靠軟體服務收費的商業公司,因此SEGGER版Firmware並不開源,並且調試功能上也受一定限制,但這並不影響SEGGER版Firmware的流行,因此J-Link調試器實在是太普及了,J-Link上位機軟體功能(J-Link Commander等)也非常強大。
至此,飛思卡爾Kinetis MCU開發板板載OpenSDA調試器(上篇)痞子衡便介紹完畢了,掌聲在哪裡~~~