吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺析Keil MDK下串行Flash的下載算法設計

454398 ? 來源:alpha007 ? 作者:alpha007 ? 2022-12-23 13:15 ? 次閱讀

今天給大家介紹的是 Keil MDK 工具下 i.MXRT 的串行 NOR Flash 下載算法設計。

在 i.MXRT 硬件那些事系列之《在串行 NOR Flash XIP 調試原理》一文中,痞子衡簡單提了一下串行 NOR Flash 下載算法的概念,并沒有介紹具體設計細節,關于 NOR Flash 下載算法每個 IDE/ 工具都有自己的一套設計,雖然基本設計理念是一樣的,但是細節方面還是有區別。上一篇痞子衡介紹了《J-Link 下算法設計》,今天痞子衡就來細聊 Keil MDK 下的 NOR Flash 下載算法:

一、Keil MDK5 對 i.MXRT 的支持

Keil μVision 可以說是 MCU 開發者最熟悉的 IDE 了,大部分人剛開始入行嵌入式學 MCS-51 系列單片機應該都是用得 Keil C51 環境(Keil μVision2),早期的 Keil 還只是一個小型的獨立軟件公司。2005 年 ARM 收購了 Keil,并于 2006 年集成了 RealView 編譯器開始支持 ARM Cortex-M 處理器,這便是后來的 Keil MDK(Keil μVision3)。

2013 年 Keil μVision5 發布,與 Keil MDK4 及之前版本不同,Keil MDK5 分成 MDK Core 和 Software Packs 兩部分。MDK Core 主要包含 uVision5 IDE 集成開發環境和 ARM Compiler5。Software Packs 則可以在不更換 MDK Core 的情況下,單獨管理(下載、更新、移除)設備支持包和中間件更新包。

因此首次安裝的 Keil MDK5 并沒有直接支持 i.MXRT,需要通過 Software Packs 組件來單獨安裝 i.MXRT 的相關軟件支持包。

二、使用 Pack Installer 添加新 i.MXRT 型號支持

Keil MDK5 里默認集成了 Pack Installer,在 IDE 里可以直接打開其界面,手動添加所需的 MCU 主控相關軟件包。軟件包主要有兩個:Device Family Pack (DFP)和 Board Support Pack (BSP) ,前者是對 MCU 芯片本身的支持,后者是對 MCU 開發板的支持。

如果你不主動安裝 MCU 軟件包也行,當你打開 SDK 里的任何一個例程(以 i.MXRT1060 為例),如果該例程對應的 MCU 軟件包沒有安裝,IDE 會自動觸發 Pack 的安裝。DFP 是必須要安裝的,BSP 要看你具體使用哪塊板卡,痞子衡用得官方 i.MXRT1060-EVK,因此還需要再手動安裝 NXP::EVK-MIMXRT1060_BSP:

安裝完 MCU 軟件包后,便可以正常編譯 SDK 工程,然后在 Flash 下載和調試了。痞子衡使用的是恩智浦官方 EVK,板子上自帶了 DAPLink 調試器,當然除了板載調試器,我們也可以外接 J-Link 調試器,在 MDK 工程選項里無論選擇哪種調試器,其默認 Flash 下載算法是一樣的,都來自于 DFP 包(/Keil_Packs/NXP/MIMXRT1062_DFP/12.2.0/arm/MIMXRT106x_QSPI_4KB_SEC.FLM)

如果默認選擇的 Flash 下載算法文件不適用你的板子,那么你需要自己提供合適的算法文件(.FLM),并將其放入 MDK 安裝目錄下(/Keil_v5/ARM/Flash),重新打開工程選項,新增的算法會自動刷新到待選算法列表(還有另一種添加方式,即做一個完整的 DFP 包,包里包含下載算法,雖然 ARM 寫了詳盡的文檔,但這種方式更適合芯片原廠去做):

搞定了合適的下載算法文件,最后還需要檢查下兩個地址范圍,一個是 Flash 對應的實際映射地址空間,另一個是下載算法文件運行 RAM 地址空間。這點跟上一篇介紹的 J-Link 算法 JLinkDevices.xml 文件里需要填的兩個地址空間設計是一致的。

三、NOR Flash 下載算法設計

Keil MDK 下 Flash 下載算法是開源的,有較詳細的文檔,文檔在 arm-software 的 github 主頁,根據這些文檔,我們基本可以了解其下載算法設計細節。

算法主頁:https://arm-software.github.io/CMSIS_5/Pack/html/flashAlgorithm.html

3.1 下載算法模板工程

Keil MDK 提供了一個 Flash 下載算法的基礎模板工程,工程在 /Keil_v5/ARM/Flash/_Template/NewDevice.uvprojx,該工程僅支持 MDK(不支持 MDK-Lite)編譯,除了工程設置外,該模板工程僅包含四個文件:


/Keil_v5/ARM/Flash/FlashOS.h
/Keil_v5/ARM/Flash/_Template/FlashDev.c
/Keil_v5/ARM/Flash/_Template/FlashPrg.c
/Keil_v5/ARM/Flash/_Template/Target.lin

拿到基礎模板工程,我們需要根據目標 MCU 內核類型在工程選項里將默認的 ARMCM0 內核改掉,然后在 FlashDev.c 和 FlashPrg.c 里將算法 API 函數全部實現(默認是空的),最后編譯工程生成 .FLM 即是我們要的算法文件(最終 .FLM 其實是通過 After Build 里的腳本命令將 .axf 直接改名的,FLM 文件本質上就是 axf 格式文件)。

3.2 下載算法結構設計

算法本身結構其實很簡單,在 FlashDev.c 文件中有一個名為 FlashDevice 的結構體常量,其原型定義在 FlashOS.h 中。該結構體主要給 IDE 提供必要的 Flash 信息,其值必須根據實際板卡情況填寫正確。

structFlashDeviceconstFlashDevice={
FLASH_DRV_VERS,//DriverVersion,donotmodify!
"NewDevice256kBFlash",//DeviceName
ONCHIP,//DeviceType
0x00000000,//DeviceStartAddress
0x00040000,//DeviceSizeinBytes(256kB)
1024,//ProgrammingPageSize
0,//Reserved,mustbe0
0xFF,//InitialContentofErasedMemory
100,//ProgramPageTimeout100mSec
3000,//EraseSectorTimeout3000mSec

//SpecifySizeandAddressofSectors
0x002000,0x000000,//SectorSize8kB(8Sectors)
0x010000,0x010000,//SectorSize64kB(2Sectors)
0x002000,0x030000,//SectorSize8kB(8Sectors)
SECTOR_END
};

除了 FlashDevice 之外,最核心當然是 FlashPrg.c 里的 7 個 API 函數,這些 API 函數提供了實際的 Flash 擦寫驗功能,IDE 會自動按需調用這些 API 去實現在線下載。這些 API 原型是固定的,但具體函數實現是因板卡而異的。

關于算法工程還有一個不得不提的設計,那就是工程選項 C/C++(包括 Asm)下都勾選了 Read-Only Position Independent 和 Read-Write Position Independent,表明下載算法本身不是使用固定地址鏈接,而是位置無關鏈接(也叫相對地址鏈接),算法代碼機器碼是可以被放到任意地址去執行的,這也是為什么你可以在例程選項里去指定 RAM for Algorithm。

3.3 下載算法 API 調用流程

當在 IDE 里啟動在線下載時,IDE 會先將算法文件 .FLM 里的可執行機器碼加載進指定的 RAM 空間,然后組合調用來實現最重要的 Flash 擦除和寫入,只要用戶 App 被正確寫入 Flash,IDE 就能正常讀取 Flash 里代碼指令進行單步調試了。

下一篇文章,痞子衡將帶大家繼續探究 IAR EWARM 下的下載算法設計,讓我們把主流 Cortex-M 集成開發環境的算法設計思路全部擼一遍,看看哪家更巧妙。

至此,Keil MDK 工具下 i.MXRT 的串行 NOR Flash 下載算法設計痞子衡便介紹完畢了,掌聲在哪里~~~

審核編輯 黃昊宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 串行
    +關注

    關注

    0

    文章

    237

    瀏覽量

    33968
  • keil
    +關注

    關注

    69

    文章

    1214

    瀏覽量

    167276
  • MDK
    MDK
    +關注

    關注

    4

    文章

    209

    瀏覽量

    32152
收藏 人收藏

    評論

    相關推薦

    分享一個keil MDK編譯信息增強工具

    今天給大家分享一個 keil MDK 編譯信息增強工具:keil-build-viewer. 1 keil-build-viewer介紹 這是一個
    的頭像 發表于 11-14 11:01 ?713次閱讀

    新唐科技率先發布免費版Arm Keil MDK,助力嵌入式開發

    2024年11月5日,新唐科技正式推出了免費版的Arm? Keil? MDK Nuvoton Edition,成為全球首家向開發者提供Keil MDK完整版本的半導體公司。這款專業開發
    的頭像 發表于 11-06 11:07 ?1317次閱讀

    keil軟件實現編程仿真需要哪些步驟

    MDK-ARM 首先,您需要從 Keil 官方網站下載并安裝 Keil MDK-ARM。安裝過程中,請確保選擇適合您開發板的組件和工具鏈。
    的頭像 發表于 09-02 10:28 ?1320次閱讀

    keil5怎么利用sys進行配置ti環境

    以下是一些關鍵步驟和建議: 安裝Keil MDK-ARM: 首先,您需要從Keil官方網站下載并安裝Keil
    的頭像 發表于 09-02 10:19 ?679次閱讀

    keil5怎么給ti燒錄程序

    安裝Keil MDK-ARM軟件: 訪問Keil官方網站(https://www.keil.com/)并下載
    的頭像 發表于 09-02 10:18 ?1181次閱讀

    keil5怎么把程序燒到板子上

    安裝Keil MDK-ARM: 從Keil官網下載Keil MDK-ARM安裝包。 按照安裝向導
    的頭像 發表于 08-22 09:30 ?2456次閱讀

    RT-Thread Studio導入keil MDK工程失敗的原因?怎么解決?

    RT-Thread Studio導入keil MDK工程失敗
    發表于 07-15 06:56

    Keil MDK5.38 STM32全系列 最新PACK包離線包高速網盤下載分享收藏(持續更新...)

    ***](https://blog.csdn.net/shizes1989/article/details/93982092) (訪問密碼:9795) [***Keil MDK5.38版本軟件下載
    發表于 05-07 14:52

    如何在Keil MDK-ARM環境開發STM32L011K4T6?

    Keil MDK-ARM環境開發STM32L011K4T6
    發表于 04-22 06:49

    KEIL MDK為什么無法debug library中的代碼?

    KEIL MDK 5.32及以下版本,都沒法debug library中的代碼,即使有c source文件也不能debug,怎么回事啊?
    發表于 04-10 06:20

    stm32G473vct6通過keil下載程序到0x8020000就會報flash error down怎么解決?

    STM32G473VCT6,IDE使用的是keil下載器用的是jlink,下載接口用的是SW。目前出現一個問題,每次下載到0x8020000的時候就會報
    發表于 04-01 06:47

    怎么啦?你的Keil C51和Keil MDK還無法共存嗎?

    路徑設置為:D:\software\Keil\Keil_MDK\ARM\PACK三、KeilC51與KeilMDK共存打開C51與MDK的安裝目錄,然后把C51安
    的頭像 發表于 03-24 08:09 ?3408次閱讀
    怎么啦?你的<b class='flag-5'>Keil</b> C51和<b class='flag-5'>Keil</b> <b class='flag-5'>MDK</b>還無法共存嗎?

    在STLinkV2用下載算法將程序下載到外部flash報錯怎么解決?

    你好:在uVision用下載算法將程序下載到外部flash(QSPIFLASH W25Q256JV) .使用CMSIS_DAP可以下載,執行正常. 但是改用STLinkV2,就會出現
    發表于 03-20 06:12

    NUCLEO-H7A3ZIQ使用keil外部下載算法后提示Flash Timeout的原因?

    我用ospi驅動w25q128,可以讀出id,可以寫入和讀取數據。然后自己寫了個KEIL的外部下載算法,修改了鏈接器腳本讓圖片資源存儲在w25q128。 但是點擊下載后,Erase過程
    發表于 03-19 06:18

    rtthread studio已經成功編寫了外部flash下載算法,程序也能下載進去但是不能進行調試怎么辦?

    已經成功編寫了外部flash下載算法,程序也能下載進去,但是不能進行調試怎么辦? 我想放在內部flash調試,但是發現已經
    發表于 02-20 07:24
    做生意进门风水| 六合彩开奖查询| 百家乐官网号论坛博彩正网| 百家乐优惠现金| 德州扑克小说| 巴黎人百家乐官网的玩法技巧和规则| 蓝盾百家乐的玩法技巧和规则 | 澳门百家乐官网技术| 百家乐菲律宾| 百家乐官网最好的玩法| 百家乐视频游戏网址| 赌博堕天录 和也篇| 百家乐下注的规律| 陇南市| 百家乐赌缆十三式| 郴州市| 百家乐桌布| 百家乐官网有几种玩法| 百家乐网盛世三国| 娱乐城百家乐官网怎么样| 菲律宾百家乐娱乐| 百家乐官网可以出千吗| 大发888官网下载| 皇室百家乐官网的玩法技巧和规则 | 百家乐官网赌博机假在哪里| 威尼斯人娱乐城官方网址| 安桌百家乐官网游戏百家乐官网 | 电脑打百家乐官网怎么赢| 德州扑克概率| 赌百家乐的高手| 优博百家乐官网现金网| 网上百家乐是不是真的| 百家乐官网百家乐官网视频游戏世界| 威尼斯人娱乐网代理| 利都百家乐官网国际娱乐| 金濠国际| 百家乐官网稳赢秘笈| 德州扑克3d豪华版| 真人百家乐好不好玩| 免费百家乐官网在线| 大发888坑人么|