大家好,我是痞子衡,,是正經(jīng)搞技術(shù)的痞子,。今天痞子衡給大家介紹的是J-Link工具下i.MXRT的串行NOR Flash下載算法設(shè)計。 在i.MXRT硬件那些事系列之《在串行NOR Flash XIP調(diào)試原理》一文中,,痞子衡簡單提了一下串行NOR Flash下載算法的概念,,并沒有介紹具體設(shè)計細節(jié),,關(guān)于NOR Flash下載算法每個IDE/工具都有自己的一套設(shè)計,雖然基本設(shè)計理念是一樣的,,但是細節(jié)方面還是有區(qū)別,,今天痞子衡就來細聊J-Link下的NOR Flash下載算法: 一,、J-Link各版本對i.MXRT的支持從Segger官網(wǎng)上看,,目前最新的J-Link驅(qū)動版本是V6.86b,其能夠支持目前所有已量產(chǎn)的i.MXRT系列,,而痞子衡PC上安裝的是V6.52e,,從 J-Link歷史各版本Release Note 上看,痞子衡目前的J-Link版本不支持全部i.MXRT型號,,那么如果想要支持新芯片(比如i.MXRT1170),,是不是一定要重新安裝最新J-Link呢?其實未必,!
J-Link對新MCU型號的下載支持并不是與自身版本嚴格綁定的,,其增加新芯片的方式很靈活,只需要按要求添加相應(yīng)的算法文件即可,,這樣我們可以不必等待Segger的正式發(fā)布,。 二,、為當前J-Link增加新i.MXRT型號支持關(guān)于增加i.MXRT新型號的支持,,痞子衡之前寫過一篇文章 《輕松為i.MXRT設(shè)計更新Segger J-Link Flash下載算法文件》,簡介了如何為v.6.52e版本新增i.MXRT600的支持(那篇文章其實有點疏忽,,v6.52版本已經(jīng)開始支持i.MXRT600,,直接集成進JLinkARM.dll中了,沒有顯式地放在JLinkDevices.xml文件中),。 為當前J-Link驅(qū)動增加新i.MXRT型號支持,,其實就是在 \SEGGER\JLink_V652e\JLinkDevices.xml 文件中按模板添加一些代碼,至于那些代碼是什么含義,,在 \SEGGER\JLink_V652e\Doc\Manuals\UM08001_JLink.pdf 文檔的 Chapter 12 Open Flashloader 有詳細解釋,。 讓我們試著分析 JLinkDevices.xml 文件中那些模板代碼的含義,且以最常見的 i.MXRT1060 型號為例:
模板代碼中參數(shù)主要分兩類:ChipInfo和FlashBankInfo,,前者描述算法適用的MCU芯片相關(guān)信息,,后者描述在該MCU上適用的Flash操作相關(guān)信息。 先說ChipInfo下的參數(shù):Vendor和Name主要是創(chuàng)建J-Flash工程或者在IDE里在線下載時彈出J-Link選項框時用于確定選擇這個下載算法文件的標識,。Core用于指定MCU芯片內(nèi)核類型,。JLinkScriptFile指定開始啟用下載算法前需預加載的Jlink腳本(可以根據(jù)MCU特性做一些特殊的初始化工作,,比如RT600的Debug Mailbox激活,RT1170的雙核切換等),。Aliases就是Name的詳細展開,。 ChipInfo下最重要的兩個參數(shù)其實是WorkRAMAddr和WorkRAMSize,它們指明了下載算法(某種elf格式文件)被加載進MCU內(nèi)部SRAM執(zhí)行的區(qū)域,,這兩個參數(shù)值與MCU型號息息相關(guān),,必須是合法有效的,但可以不唯一,。后面的文章里痞子衡會介紹下載算法設(shè)計原理,,其最重要的特性是Read-Only Position Independent和Read-Write Position Independent,即下載算法本身不是固定地址鏈接,,而是位置無關(guān)鏈接,,算法代碼機器碼是可以被放到任意地址去執(zhí)行的。 再說FlashBankInfo下的參數(shù):Name標明下載算法適用的Flash類型(FlashBankInfo可以有多個,,對應(yīng)不同F(xiàn)lash的下載算法),。BaseAddr和MaxSize標明該Flash在MCU系統(tǒng)內(nèi)存映射中的地址范圍,主要用于后續(xù)XIP調(diào)試,,跟下載關(guān)系不大,。Loader和LoaderType則指明下載算法文件位置和類型,這是核心,,對于新i.MXRT型號的下載支持,,大部分工作其實就是提供合適的Loader。 三,、NOR Flash下載算法設(shè)計前面講了J-Link對于新i.MXRT型號的下載支持,其實就是提供合適的Loader文件,,Loader文件的設(shè)計是核心,,那么J-Link的Loader到底是怎么設(shè)計的呢?這得先從理解LoaderType這個參數(shù)說起,。 搜遍整個UM08001_JLink文檔,,LoaderType僅有一個值,即FLASH_ALGO_TYPE_OPEN,,文檔里的解釋是使用公開的Flashloader算法設(shè)計,,這個公開的Flashloader指的是ARM官方的基于CMSIS的Flashloader。 ARM開源的Flashloader算法屬于CMSIS-Pack 中的 Device Family Pack (DFP) 里的一個組成部分,,它本來是專用于Keil MDK下的,,但是Segger為了保持其J-Link工具鏈的通用性,選擇了與ARM Flashloader的API接口保持一致,,這意味著Keil MDK與J-Link兩者的下載算法文件基本是可以交換使用的(當然設(shè)計上有一點小區(qū)別,,后面文章會介紹),。 鑒于Segger并沒有開源其下載算法源碼,因此我們無法得知其J-Link自帶的下載算法文件具體是怎么實現(xiàn)(例如Devices/NXP/iMXRT106x/NXP_iMXRT106x_QSPI.elf),,雖然我們可以根據(jù)每次的J-Link驅(qū)動版本更新時的記錄得知其動態(tài),,但總覺得是個黑盒子。
下一篇文章,,痞子衡將帶大家深入探究Keil MDK下的下載算法設(shè)計,,了解了這個MDK下載算法,我們便可以自己為J-Link設(shè)計下載算法,,從此再也不用擔心黑盒子,。 至此,J-Link工具下i.MXRT的串行NOR Flash下載算法設(shè)計痞子衡便介紹完畢了,,掌聲在哪里~~~ 歡迎訂閱文章會同時發(fā)布到我的 博客園主頁,、CSDN主頁、知乎主頁,、微信公眾號 平臺上,。 微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦,。 |
|