日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

怎么重写MDK(KEIL)Flash烧写程序

發布時間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎么重写MDK(KEIL)Flash烧写程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MDK提供了Flash燒寫程序接口,位于文件夾C:\Keil\ARM\Flash (不同的安裝目錄參考相對路徑)。KEIL提供了各種的demo,打開_Template文件夾

有個NewDevice的工程文件,打開里面可以看到程序的架構。

分2部分,第一部分是Program Functions實現Flash的初始化,讀,寫等函數;第二部分是Device Description,是一個結構體變量,里面定義的是Flash的相關信息。

先看第一部分:

如果使用內部Flash只需實現以上5個函數就可以了,如果是外部Flash,還需實現

int BlankCheck? (unsigned long adr,?? // Blank Check
???????????????????????????????? unsigned long sz,
???????????????????????????????? unsigned char pat);

unsigned long Verify????? (unsigned long adr,?? // Verify Function
???????????????????????????????? unsigned long sz,
???????????????????????????????? unsigned char *buf);

?

第二部分:

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
};

看注釋基本就OK了,需要說明的一點是,Device Type 是個在FlashOS.h里面的宏定義,如下:

#define UNKNOWN??? 0?????????? // Unknown
#define ONCHIP???? 1?????????? // On-chip Flash Memory
#define EXT8BIT??? 2?????????? // External Flash Device on 8-bit? Bus
#define EXT16BIT?? 3?????????? // External Flash Device on 16-bit Bus
#define EXT32BIT?? 4?????????? // External Flash Device on 32-bit Bus
#define EXTSPI???? 5?????????? // External Flash Device on SPI
?


到這里可能大家看明白了,KEIL的Flash不單單支持Onchip的,不單單支持Bus的,還支持SPI接口的。這個是SPI將是我們的所需要的。

編譯工程,將生成:NEW_DEVICE.FLX? ,并且copy到了flash文件夾里(注意查看工程的Command)

?

PS.還有另外一種格式是FLM,我下面會介紹不同的用法

新建一個工程,我們看看是否已經加入

厄,很遺憾沒有。。。。。

腫么回事?

再看看這個工程,

?

OH my_ladygaga!

原來是有2種工程,我們再看看他們之間的區別,就單單從生成的文件來看,M系列用的FLash是flm,ARM7/ARM9用的是flx,果然不簡單。。。。。。。

其他的當然是編譯器不一樣了,到了這里,元芳,你怎么看?

大人,此事必有蹊蹺。

確實。為嘛,要不同區分不同的核心呢?

其實這個工程生成的最終產物,xxx.flx或者xxx.flm算是一個bin,他是從axf產生出來的。在KEIL需要操作Flash的時候,他就調用這個工程里面的函數,首先他會把xxx.flx或者xxx.flm加載到某個ram的區間,然后再調用。這個當中還是有那么一點復雜。我也沒深入研究透徹。但是肯定的一點就是不同的MCU是需要不同的編譯器的,因為指令都不一樣,編譯出來的flx自然是不一樣的。

?

完了在再到工程里看看

哇哈哈,有了!

選擇測試下。 第一次測試,OK鳥~~~~

?

同理,需要實現MDK像寫內部Flash那樣寫外部SPIFlash,只需要重寫這個Flash的燒寫程序就行了。

我附上一個空白的程序給大家看看,其實是一個空操作,沒對flash進行任何的操作。NewDevice.rar

需要說明的一點是,必須放到C:\Keil\ARM\Flash(不同的安裝目錄參考相對路徑)因為里面會有一個FlashOS.h頭文件,還有就是他會自動把生成的flx/flm copy到Flash\文件夾里


http://group.chinaaet.com/149/68464

總結

以上是生活随笔為你收集整理的怎么重写MDK(KEIL)Flash烧写程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。