怎麼重寫MDK(KEIL)Flash燒寫程式

2021-08-14 12:38:17 字數 2212 閱讀 9472

syd8801是一款低功耗高效能藍芽低功耗soc,整合了高效能2.4ghz射頻收發機、32位arm cortex-m0處理器、128kb flash儲存器、以及豐富的數字介面。syd8801片上整合了balun無需阻抗匹配網路、高效率dcdc降壓轉換器,適合用於可穿戴、物聯網裝置等。具體可諮詢:

摘錄於:

只是作為學習之用!

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

看注釋基本就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,果然不簡單。。。。。。。

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

大人,此事必有蹊蹺。

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

其實這個工程生成的最終產物,***.flx或者***.flm算是乙個bin,他是從axf產生出來的。在keil需要操作flash的時候,他就呼叫這個工程裡面的函式,首先他會把***.flx或者***.flm載入到某個ram的區間,然後再呼叫。這個當中還是有那麼一點複雜。我也沒深入研究透徹。但是肯定的一點就是不同的mcu是需要不同的編譯器的,因為指令都不一樣,編譯出來的flx自然是不一樣的。

完了在再到工程裡看看

哇哈哈,有了!

選擇測試下。

第一次測試,ok鳥~~~~

同理,需要實現mdk像寫內部flash那樣寫外部spiflash,只需要重寫這個flash的燒寫程式就行了。

我附上乙個空白的程式給大家看看,其實是乙個空操作,沒對flash進行任何的操作。

需要說明的一點是,必須放到c:\keil\arm\flash(不同的安裝目錄參考相對路徑)因為裡面會有乙個flashos.h標頭檔案,還有就是他會自動把生成的flx/flm copy到flash\資料夾裡。

Extjs6 怎麼重寫框架的類

建立乙個覆寫 override 類的推薦方法如下 override ext.panel.panel close function helloworld function 1 首先,為你的應用程式的 overrides 目錄中的 override 類定義乙個合適的命名空間 2 新增 override ...

在C 裡怎麼重寫已實現的介面

本文通過虛函式來實現介面在繼承類裡的重寫。實現語言為c 通常如果我們定義了乙個介面如下 inte ce imyinte ce void foo int i 然後我們在類base裡實現了此介面,如下 class myclassbase protected void foo int i private ...

IDEA 重寫equals重寫toString

重寫equals方法 idea中直接輸入eq回車進入重寫方法 第二步如果obj這個物件連學生 student 這個型別都不是,那麼肯定返回false if obj instanceof student 第三步如果是學生型別,強制把obj轉換成學生物件,不轉換預設是objeke student s s...