痞子衡嵌入式:飛思卡爾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逐漸沒落。

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),下面是其官網:

  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調試器(上篇)痞子衡便介紹完畢了,掌聲在哪里~~~

歡迎訂閱

文章會同時發布到我的 博客園主頁CSDN主頁微信公眾號 平台上。

微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM