色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

工程師 ? 來源:博客園 ? 作者:痞子衡 ? 2020-10-23 14:30 ? 次閱讀

大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是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主頁,根據這些文檔,我們基本可以了解其下載算法設計細節。

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信息,其值必須根據實際板卡情況填寫正確。

struct FlashDevice const FlashDevice = { FLASH_DRV_VERS, // Driver Version, do not modify! “New Device 256kB Flash”, // Device Name ONCHIP, // Device Type 0x00000000, // Device Start Address 0x00040000, // Device Size in Bytes (256kB) 1024, // Programming Page Size 0, // Reserved, must be 0 0xFF, // Initial Content of Erased Memory 100, // Program Page Timeout 100 mSec 3000, // Erase Sector Timeout 3000 mSec// Specify Size and Address of Sectors 0x002000, 0x000000, // Sector Size 8kB (8 Sectors) 0x010000, 0x010000, // Sector Size 64kB (2 Sectors) 0x002000, 0x030000, // Sector Size 8kB (8 Sectors) 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里代碼指令進行單步調試了。如下圖便是擦除和寫入操作的實際API組合調用流程:

責任編輯:haq

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

    關注

    146

    文章

    17304

    瀏覽量

    352148
  • FlaSh
    +關注

    關注

    10

    文章

    1641

    瀏覽量

    148402
  • keil
    +關注

    關注

    68

    文章

    1214

    瀏覽量

    167135
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

    keil5怎么給ti燒錄程序

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

    keil5怎么把程序燒到板子上

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

    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 ?3355次閱讀
    怎么啦?你的<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
    主站蜘蛛池模板: 荡公乱妇HD中文字幕| 精品午夜寂寞影院在线观看| 久久se精品一区二区国产| 午夜免费啪视频观看视频| 国产国拍亚洲精品永久软件| 日日操夜夜操天天操| 草莓视频在线免费观看| 人善交XUANWEN200喷水| 草莓视频在线看免费高清观看| 青娱乐在线一区| 成年人视频在线免费播放| 人妻中文字幕无码系列| 超碰在线线公开免费视频| 视频一区视频二区在线观看| 国产精品嫩草影院在线观看免费| 翁止熄痒禁伦短文合集免费视频| 国产精品一久久香蕉国产线看| 亚洲AV久久久久久久无码| 国产囗交10p| 一区二区不卡在线视频| 恋夜直播午夜秀场最新| 99久久国产免费福利| 日本无翼恶漫画大全优优漫画| 高H黄暴NP辣H一女多男| 亚洲爆乳少妇精品无码专区| 久久re这里精品在线视频7| 24小时日本在线观看片| 日本漂亮妈妈7观整有限中| 国产人妻人伦精品836700| 一二三四中文字幕在线看| 久久伊人精品青青草原2021| xxx暴力xxx| 亚洲AV电影天堂男人的天堂| 伦理片在线3348| 高挑人妻无奈张开腿| 亚洲精品视频观看| 女人一级毛片免费视频观看| 国产精品久免费的黄网站| 亚洲午夜电影| 欧美精品v欧洲高清| 国产亚洲AV精品无码麻豆|