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

来源:https://www.cnblogs.com/henjay724/archive/2018/09/25/9697837.html
-Advertisement-
Play Games

飛思卡爾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調試器功能相關的主要有五部分電路:

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 很多人學習python,爬蟲入門,在python爬蟲中,有很多庫供開發使用。 用於請求的urllib(python3)和request基本庫,xpath,beautiful soup,pyquery這樣的解析庫。其中xpath中用到大量的正則表示式,對於新手來說,寫正則很容易出錯,在這裡,從beau ...
  • Spring Cloud Hystrix是一個容錯庫,它實現了斷路器模式,使得當服務發生異常時,會自動切斷連接,並將請求引導至預設的回調方法。 服務端 在Spring Tool Suite的文件菜單中,點擊新建Spring Starter Project。建立一個普通的Restful風格的服務。 a ...
  • 本文用到的測試數據生成的代碼和分析: "《測試數據自動生成》" 文章圖片來源於 GitHub,網速不佳的朋友 "請點我看原文" 。 順便軟廣一下個人技術小站: "godbmw.com" 。歡迎常來 ♪\(^∇^\ \) 1. 談談高級排序 本文主要介紹高級排序演算法中的歸併排序和快速排序。他們有運用了 ...
  • 題目:彈飛綿羊 這道題,據說是lct裸題,但是lct那麼高級的數據結構,我並不會,所以採取了學長講過的分塊做法,我們對序列分塊,可以定義兩個數組,其中一個表示從當前位置跳出當前塊需要多少步,另一個數組表示從當前位置跳到下一塊會落在哪個位置,然後新修改就暴力修改當前塊,查詢就直接暴力跑塊外的結果。數組 ...
  • 最近在學習排序演算法的時候,需要利用程式自動生成測試數據,代碼和思路整理在這篇文章裡面。 文章圖片來源於 GitHub,網速不佳的朋友 "請點我看原文" 。 順便軟廣一下個人技術小站: "https://godbmw.com" 。歡迎常來 ♪\(^∇^\ \) 1. 設計思路 因為會被很多排序演算法調用 ...
  • 鄙人最近重新裝完系統之後,在安裝和配置jdk1.8的時候,發現網上許多教程配置jdk環境變數時都還在沿用傳統的方式配置,但是隨著技術的更新,完全沒有必要那麼麻煩了。 下載和安裝jdk的教程,在這裡就不詳細敘述了,網上有好多教程。但是對於新手可能會在安裝過程中彈出兩次選擇安裝目錄感到迷茫,敝人在這裡強 ...
  • 3)為什麼介面能勝任作為和外部系統打交道的合同而抽象類就不行?(見下麵我的山和車,肥皂的例子)【新手可忽略不影響繼續學習】答:馬克-to-win:假設你用抽象類作為合同,(視頻下載) (全部書籍)外部系統有個類A,它本來固有就必須得繼承一個類B,現在還必須得繼承你這個抽象類,語法上不允許。反過來,如 ...
  • 背景:VS2015+MySql+EF6(DB First) 採坑順序:按照以前的記憶,操作依次如下: 1,安裝 MySQL Connector/NET(不用想,裝最新的,8.0.12) 2.安裝 MySQL for Visual Studio (最新1.2.8) 3.在VS2015創建WEB項目 4 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...