stm32使用SD卡IAP固件升級筆記

        最近開發了stm32用SD卡進行IAP固件升級用的bootloader,特整理一下筆記:

        首先說一下升級原理,固件升級需要有2套程序,1套就是加載引導程序,也就是所謂的bootloader。另一套就是APP程序。

主要的難點就是bootloader程序了。下面講解如何寫基於SD卡的bootloader程序。

編寫基於SD卡的固件升級bootloader,需要做一下幾項工作:

  • 編寫移植能驅動SD卡的SDIO驅動bsp
  • 移植能讀寫SD卡的文件系統
  • 對flash程序存儲區進行分區
  • 移植能進行stm32的片內flash讀寫的驅動
  • 從SD卡加載讀取APP程序,以及寫flash,跳轉
  • Keil編譯出.bin文件

(1) SD卡SDIO驅動 && 文件系統移植

首先,要想能支持從SD卡進行固件升級,首先MCU需要能從SD卡進行讀寫。操作SD卡對於stm32有集成的硬件SDIO接口,然後還需要移植能讀寫SD卡的文件系統。說到移植SD卡的文件系統,這裏有個小插曲不得不說,一開始我移植的文件系統,發現太大了,編譯出來的bootloader足足有180多kB,佔據了stm32的flash的半壁江山。後來對文件系統進行了裁剪後之後不到30k了。

1.1 SDIO驅動:

SDIO驅動我也是沒時間自己去寫,而是直接移植的官方的sdio驅動部分,裏面集成了基於SDIO的讀寫擦操作的API接口,移植好後可以直接調用。說到SDIO驅動,我就再多說兩句吧,請看下面的電氣連接:

SD卡中有4個DATAx數據總線(DATA0-DATA3),實際應用電路中,如果對讀寫速度沒有太高的要求,可以直接使用DATA0作爲數據傳輸線,其它都不必連接。這時的SDIO驅動中需要將 SDIO_BusWide_4b換成 SDIO_BusWide_1b。如下圖

把以上兩處都換成1根數據線的驅動後,就可以快樂的使用sdio總線讀寫SD卡了。

1.2 文件系統移植

我這裏移植了野火例程的FATFS文件系統,該系統使用的是ff9,如下圖

移植的時候只將diskio.c  ff.c以及cc936.c放到工程裏面即可,如下圖:

我剛移植完時,發現編譯出來的文件,足足有180多k, 絕大多數都是因爲中文編碼的文件佔用了太多儲存,根本不能作爲bootloader使用,需要對文件系統進行裁剪,裁剪方法就是將

ffconf.h裏面的宏修改一下:

這個宏默認是936,也就是支持中文編碼,現在把它改爲1,也就是不支持中文等,編譯出來一下子就會變小了,哈哈O(∩_∩)O哈哈~。

2. 對stm32的片內flash進行分區處理:

我使用的是512kB Flash存儲的片內flash,這是stm32的片內flash映射圖:

 

 

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