STM32系統中的2種數據掉電保護方法!


STM32系統中的2種數據掉電保護方法!

在嵌入式設備開發中,往往需要保存一些掉電不易失性的數據,如果系統配置、用戶定制信息等等,如果增加額外的ROM IC,比如(基於I2C24C02等等)往往會造成額外的PCB空間增大,硬件成本增加,降低產品的性價比。如果單從實用性來講,在stm32的系統中,諸如此類的應用,筆者推薦如下2個方法可以去嘗試和借鑒。

 

 

基於備份寄存器

 

原理:對於大容量的MCU系列來說,它有着4216bit的備份寄存器,而中小容量的微處理器卻只有1016bit的備份寄存器。以STM32F103C8T6為例,42個備份寄存器的地址偏移為:0x04~0x28,0x40~0xBC,共可以存儲84byte數據。備份寄存器是依賴者備份電源的,當外界的VDD掉電,只要系統的VBAT能正常存在,那么Bakeup Domaain Registers的內容可以被正常保存起來。

 

軟件編程要點,以一個項目中常用的case為例:

 

功能初始化:

 

備份寄存器讀出:void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data)

 

備份寄存器讀出:uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR)

 

該方法使用簡單,清晰,但是由於總共的可以利用的空間少,故該方法只是適合於保存小批量的數據,如穿戴設備中用戶的常用配置數據。

 

基於內部閃存

 

原理:FLASH 存儲器又稱為閃存,它也是可重復擦寫的儲器。它分為 NOR FLASH NAND FLASHNOR FLASH一般應用在代碼存儲的場合,如嵌入式控制器內部的程序存儲空間;而 NAND FLASH 一般應用在大數據量存儲的場合,如U 盤以及固態硬盤等,一般都是 NAND FLASH 類型的。

 

stm32芯片中,Flash的讀寫單位都是以“頁”為單位的,以STM32F103C8T6為例,它的每頁大小為2K bytes;

 

軟件編程要點

 

讀寫保護解除:使用這種方法前提是,當前讀和寫Flash的允許的,假設當前flash已經是允許寫的。所以暫時一些關於OptionBytes的操作和Flash的讀寫保護操作等API暫時不做討論。

 

FlashWrite:單個uint32_t數據的寫入簡易流程如圖:

 

FlashRead:對於單個int數據的讀出,比較簡單,通過下列語句完成:rdData= (*(__IOuint32_t *)dataAddr);

 

由於SW介入的API較多,並且有很多的額外的背景知識需要碼農去了解,使用該方法,相對比較復雜。但是由於保存數據以頁為單位,頁的大小可以多達2048bytes,所以該方法可以實用於保存掉電不易失的大數據。考慮到flash讀寫保護的邏輯機制,該方法最好在不考慮數據的安全性問題前提下,才使用這種方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM