• <noframes id="6fok0"><bdo id="6fok0"><listing id="6fok0"></listing></bdo>
    <ruby id="6fok0"></ruby>

    <progress id="6fok0"></progress>
  • <progress id="6fok0"></progress>
    <ruby id="6fok0"><table id="6fok0"></table></ruby>
  • <progress id="6fok0"><u id="6fok0"><form id="6fok0"></form></u></progress>

    24小時(shí)聯(lián)系電話(huà):18217114652、13661815404

    中文

    您當前的位置:
    首頁(yè)>
    電子資訊>
    技術(shù)專(zhuān)題>
    如何在STM32系統中保...

    技術(shù)專(zhuān)題

    如何在STM32系統中保護數據免受斷電影響


    在嵌入式設備的開(kāi)發(fā)中,斷電時(shí)通常需要保存一些非易失性數據。如果添加了系統配置,用戶(hù)定義的信息等,并且添加了額外的ROM IC(例如基于I2C24C02等),則額外的PCB空間將增加,硬件成本將增加,并且產(chǎn)品將減少。如果僅從實(shí)用角度出發(fā),在諸如STM32系統的應用中,作者建議可以嘗試以下兩種方法并作為參考。

    基于備份寄存器

    原理:對于大容量MCU系列,它具有42個(gè)16位備份寄存器,而中小型微處理器僅具有10個(gè)16位備份寄存器。以stm32f103c8t6為例,這42個(gè)備份寄存器的地址偏移量為:0x04?0x28、0x40?0xbc,可以存儲84個(gè)字節的數據。備用寄存器取決于備用電源。當外部VDD掉電時(shí),只要系統的Vbat可以正常存在,Bakeup domaain寄存器的內容就可以正常保存。

    軟件編程的要點(diǎn)如下:以一個(gè)項目中常用的案例為例

    函數初始化:

    讀取備份寄存器:void BKP_ WriteBackupRegisteruint16_ t BKP_ DR,uint16_ t Data

    讀取備份寄存器:uint16_ t BKP_ ReadBackupRegisteruint16_ t BKP_ DR

    此方法簡(jiǎn)單明了,但由于缺少可用空間,因此僅適用于保存少量數據,例如用戶(hù)在可穿戴設備中的通用配置數據。

    基于內部閃存

    原理:閃存,也稱(chēng)為閃存,也是可以重寫(xiě)的存儲器。它分為nor flashNAND flash。閃存通常不用于代碼存儲場(chǎng)合,例如嵌入式控制器中的程序存儲空間。而NAND閃存通常用于大數據存儲場(chǎng)合,例如U盤(pán)和固態(tài)硬盤(pán),它們通常是NAND閃存類(lèi)型。

    STM32芯片中,閃存的讀寫(xiě)單位均基于頁(yè)面。以stm32f103c8t6為例,每頁(yè)大小為2K字節;

    軟件編程要點(diǎn)

    釋放寫(xiě)保護釋放:此方法基于以下前提:允許當前的讀寫(xiě)Flash,并且允許當前的Flash進(jìn)行寫(xiě)操作。因此,目前暫時(shí)不討論某些API,例如optionbytes操作和flash讀寫(xiě)保護操作。

    Flashwrite:?jiǎn)蝹€(gè)uint32_ T數據寫(xiě)入的簡(jiǎn)單流程圖如下:

    Flashread:對于單個(gè)int數據讀取,它相對簡(jiǎn)單,可以通過(guò)以下語(yǔ)句完成:rddata =*()__ IOuint32_ t *dataAddr);

    由于SW中涉及許多API,并且編碼人員還需要理解許多其他背景知識,因此使用此方法相對復雜。但是,由于數據保存在頁(yè)面中,因此頁(yè)面大小最大為2048字節,因此該方法可用于保存掉電時(shí)不容易丟失的大數據??紤]到閃存讀寫(xiě)保護的邏輯機制,最好在不考慮數據安全性的情況下使用此方法。

    對于這種斷電保護數據方法,這里只是丟磚引玉,歡迎您提出更好的方案。

     

    請輸入搜索關(guān)鍵字

    確定
    色鲁99热99re超碰精品_91精品一区二区三区无码吞精_亚洲国产欧洲综合997久久_一级a性色生活片久久无
  • <noframes id="6fok0"><bdo id="6fok0"><listing id="6fok0"></listing></bdo>
    <ruby id="6fok0"></ruby>

    <progress id="6fok0"></progress>
  • <progress id="6fok0"></progress>
    <ruby id="6fok0"><table id="6fok0"></table></ruby>
  • <progress id="6fok0"><u id="6fok0"><form id="6fok0"></form></u></progress>