【轉載】更進一步的瞭解Keil Flash的下載算法

轉載自:     https://jingyan.baidu.com/article/414eccf64f03be6b431f0af8.html  

  前面提到了通用算法的選擇,那麼問題來了,這個算法文件如何來的呢?如果你所用的MCU不是默認支持的品牌,如何編寫屬於自己的算法呢?

更進一步的瞭解Keil Flash的下載算法

工具/原料

  • Keil uVision

  • ULINK2仿真器

方法/步驟

  1. 打開Keil安裝所在文件夾,如圖示路徑,你可以看到算法存儲位置,也就是說你通過ADD按鈕所選擇的程序來自於這裏,但是這個文件是如何來的呢?

    更進一步的瞭解Keil Flash的下載算法

  2. 拖動滾動條,可以找到這樣一個文件夾,如圖示,打開它發現一個Keil工程,這就是flash算法的源碼。

    更進一步的瞭解Keil Flash的下載算法

    更進一步的瞭解Keil Flash的下載算法

  3. 打開這個工程,工程裏面主要是兩個C file,注意圖中標示。其中FlashDev.c文件顧名思義是設備Flash的接口定義,我們可以看到裏面有STM32F0xx系列的接口。

    更進一步的瞭解Keil Flash的下載算法

  4. 任意截圖一例如下圖,這是一個結構體,右邊有相應的註釋。從註釋上看,Device Name是可以更改,這個也就是你點擊ADD按鈕時所呈現的名字。接下來有Device start address和Device size。繼續定義programming page size,初始化內容填充值,一個page下載的timeout,擦除一個sector的timeout。 sector size等,看起來應該很清晰明白。

    更進一步的瞭解Keil Flash的下載算法

  5. 有了這些接口定義就對flash本身有了很清楚的瞭解,我們在看FlashPrg.c文件。這是算法主文件。文件的開頭是一些結構體和宏的定義。請仔細閱讀你所選擇的芯片的flash部分寄存器定義,你就可以找到。

    更進一步的瞭解Keil Flash的下載算法

  6. 接下來可注意到下面有不同的函數定義,Init()函數很顯然是對flash的一個初始化,仔細閱讀芯片specification即可知道。對應的是UnInit()。你還可以看到int EraseChip (void) , int EraseSector (unsigned long adr),int ProgramPage (unsigned long adr, unsigned long sz, unsigned char *buf), 是不是很熟悉的感覺?

    更進一步的瞭解Keil Flash的下載算法

  7. 讓我們再次回顧下圖中藍色標註部分,你可看到其實在下載之初你已經選擇過類似的接口,下載過程中將會調用出現在該文件中的程序,而如果你自己編寫,就只要替換其中的代碼即可,接口Keil已經爲你準備完畢。如何編寫,那麼清仔細閱讀相應flash controller章節的定義。

    更進一步的瞭解Keil Flash的下載算法

  8. 到此爲止,對於如何編寫屬於自己的flash算法心裏應該很清楚了,如有疑問請留言。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章