怎么重写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種工程,我們再看看他們之間的區(qū)別,就單單從生成的文件來看,M系列用的FLash是flm,ARM7/ARM9用的是flx,果然不簡單。。。。。。。
其他的當然是編譯器不一樣了,到了這里,元芳,你怎么看?
大人,此事必有蹊蹺。
確實。為嘛,要不同區(qū)分不同的核心呢?
其實這個工程生成的最終產物,xxx.flx或者xxx.flm算是一個bin,他是從axf產生出來的。在KEIL需要操作Flash的時候,他就調用這個工程里面的函數,首先他會把xxx.flx或者xxx.flm加載到某個ram的區(qū)間,然后再調用。這個當中還是有那么一點復雜。我也沒深入研究透徹。但是肯定的一點就是不同的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烧写程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式 Jlink中flash.csv和
- 下一篇: 逻辑分析仪使用方法