在嵌入式設備的開發中,斷電時通常需要保存一些非易失性數據。如果添加了系統配置,用戶定義的信息等,并且添加了額外的ROM IC(例如基于I2C的24C02等),則額外的PCB空間將增加,硬件成本將增加,并且產品將減少。如果僅從實用角度出發,在諸如STM32系統的應用中,作者建議可以嘗試以下兩種方法并作為參考。
基于備份寄存器
原理:對于大容量MCU系列,它具有42個16位備份寄存器,而中小型微處理器僅具有10個16位備份寄存器。以stm32f103c8t6為例,這42個備份寄存器的地址偏移量為:0x04?0x28、0x40?0xbc,可以存儲84個字節的數據。備用寄存器取決于備用電源。當外部VDD掉電時,只要系統的Vbat可以正常存在,Bakeup domaain寄存器的內容就可以正常保存。
軟件編程的要點如下:以一個項目中常用的案例為例
函數初始化:
讀取備份寄存器:void BKP_ WriteBackupRegister(uint16_ t BKP_ DR,uint16_ t Data)
讀取備份寄存器:uint16_ t BKP_ ReadBackupRegister(uint16_ t BKP_ DR)
此方法簡單明了,但由于缺少可用空間,因此僅適用于保存少量數據,例如用戶在可穿戴設備中的通用配置數據。
基于內部閃存
原理:閃存,也稱為閃存,也是可以重寫的存儲器。它分為nor flash和NAND flash。閃存通常不用于代碼存儲場合,例如嵌入式控制器中的程序存儲空間。而NAND閃存通常用于大數據存儲場合,例如U盤和固態硬盤,它們通常是NAND閃存類型。
在STM32芯片中,閃存的讀寫單位均基于“頁面”。以stm32f103c8t6為例,每頁大小為2K字節;
軟件編程要點
釋放寫保護釋放:此方法基于以下前提:允許當前的讀寫Flash,并且允許當前的Flash進行寫操作。因此,目前暫時不討論某些API,例如optionbytes操作和flash讀寫保護操作。
Flashwrite:單個uint32_ T數據寫入的簡單流程圖如下:
Flashread:對于單個int數據讀取,它相對簡單,可以通過以下語句完成:rddata =(*()__ IOuint32_ t *)dataAddr);
由于SW中涉及許多API,并且編碼人員還需要理解許多其他背景知識,因此使用此方法相對復雜。但是,由于數據保存在頁面中,因此頁面大小最大為2048字節,因此該方法可用于保存掉電時不容易丟失的大數據。考慮到閃存讀寫保護的邏輯機制,最好在不考慮數據安全性的情況下使用此方法。
對于這種斷電保護數據方法,這里只是丟磚引玉,歡迎您提出更好的方案。
編輯:hfy
-
寄存器
+關注
關注
31文章
5363瀏覽量
121158 -
嵌入式設備
+關注
關注
0文章
110瀏覽量
17034 -
可穿戴設備
+關注
關注
55文章
3820瀏覽量
167297
發布評論請先 登錄
相關推薦
如何在實際產品中執行斷電程序
基于RFID的電影信息管理系統的設計方案
![基于RFID的<b class='flag-5'>電影</b>信息管理<b class='flag-5'>系統</b>的設計方案](https://file.elecfans.com/web1/M00/C0/C1/pIYBAF8Gb8yAG7-RAALvWP33Jao839.png)
如何應對不間斷電源(UPS)設計挑戰
如何應對不間斷電源(UPS)設計挑戰
![如何應對不間<b class='flag-5'>斷電</b>源(UPS)設計挑戰](https://file.elecfans.com//web2/M00/77/EE/pYYBAGNjkgKAN1VqAABHDGNFbwY110.jpg)
STM32F407 MCU使用SD NAND?不斷電初始化失效解決方案
![<b class='flag-5'>STM32</b>F407 MCU使用SD NAND?不<b class='flag-5'>斷電</b>初始化失效解決方案](https://file1.elecfans.com/web3/M00/01/D6/wKgZPGdY_fiAfhvVAAES2FwC9UU093.png)
評論