日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2025/4/16 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎么重写MDK(KEIL)Flash烧写程序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

有個(gè)NewDevice的工程文件,打開里面可以看到程序的架構(gòu)。

分2部分,第一部分是Program Functions實(shí)現(xiàn)Flash的初始化,讀,寫等函數(shù);第二部分是Device Description,是一個(gè)結(jié)構(gòu)體變量,里面定義的是Flash的相關(guān)信息。

先看第一部分:

如果使用內(nèi)部Flash只需實(shí)現(xiàn)以上5個(gè)函數(shù)就可以了,如果是外部Flash,還需實(shí)現(xiàn)

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了,需要說(shuō)明的一點(diǎn)是,Device Type 是個(gè)在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接口的。這個(gè)是SPI將是我們的所需要的。

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

?

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

新建一個(gè)工程,我們看看是否已經(jīng)加入

厄,很遺憾沒(méi)有。。。。。

腫么回事?

再看看這個(gè)工程,

?

OH my_ladygaga!

原來(lái)是有2種工程,我們?cè)倏纯此麄冎g的區(qū)別,就單單從生成的文件來(lái)看,M系列用的FLash是flm,ARM7/ARM9用的是flx,果然不簡(jiǎn)單。。。。。。。

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

大人,此事必有蹊蹺。

確實(shí)。為嘛,要不同區(qū)分不同的核心呢?

其實(shí)這個(gè)工程生成的最終產(chǎn)物,xxx.flx或者xxx.flm算是一個(gè)bin,他是從axf產(chǎn)生出來(lái)的。在KEIL需要操作Flash的時(shí)候,他就調(diào)用這個(gè)工程里面的函數(shù),首先他會(huì)把xxx.flx或者xxx.flm加載到某個(gè)ram的區(qū)間,然后再調(diào)用。這個(gè)當(dāng)中還是有那么一點(diǎn)復(fù)雜。我也沒(méi)深入研究透徹。但是肯定的一點(diǎn)就是不同的MCU是需要不同的編譯器的,因?yàn)橹噶疃疾灰粯?#xff0c;編譯出來(lái)的flx自然是不一樣的。

?

完了在再到工程里看看

哇哈哈,有了!

選擇測(cè)試下。 第一次測(cè)試,OK鳥~~~~

?

同理,需要實(shí)現(xiàn)MDK像寫內(nèi)部Flash那樣寫外部SPIFlash,只需要重寫這個(gè)Flash的燒寫程序就行了。

我附上一個(gè)空白的程序給大家看看,其實(shí)是一個(gè)空操作,沒(méi)對(duì)flash進(jìn)行任何的操作。NewDevice.rar

需要說(shuō)明的一點(diǎn)是,必須放到C:\Keil\ARM\Flash(不同的安裝目錄參考相對(duì)路徑)因?yàn)槔锩鏁?huì)有一個(gè)FlashOS.h頭文件,還有就是他會(huì)自動(dòng)把生成的flx/flm copy到Flash\文件夾里


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

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。