91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何讓內(nèi)部FLASH“支持”字節(jié)操作

電子設(shè)計(jì) ? 來源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2022-02-10 11:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一般32位單片機(jī)的內(nèi)部FALSH是不支持字節(jié)操作的,有的可以按字節(jié)讀取,但是不能按字節(jié)寫入。

而且,一般單片機(jī)內(nèi)部FALSH擦除的最小單位都是頁(yè),如果向某頁(yè)中的某個(gè)位置寫入數(shù)據(jù),恰好這個(gè)位置的前面存了其他數(shù)據(jù),那么就必須把這頁(yè)擦除,存的其他數(shù)據(jù)也會(huì)丟失。

實(shí)際上就是說內(nèi)部的FALSH不好做改寫的操作,如果有很多數(shù)據(jù)需要存放,最好是分頁(yè)存儲(chǔ)。這也是FALSH與E2PROM最大的區(qū)別,后者支持按字節(jié)操作且無需擦除,即使某一個(gè)地址寫壞了,也不影響其他地址。

下面介紹一種方法讓內(nèi)部FLASH“支持”字節(jié)操作,且同一頁(yè)的其他數(shù)據(jù)不受影響。

方法原理很簡(jiǎn)單,下面簡(jiǎn)單介紹下原理:

1.根據(jù)要寫入地址,計(jì)算出該地址位于哪一頁(yè);

2.讀出整個(gè)頁(yè),存入緩存BUF;

3.將要寫入的數(shù)據(jù)按位置更新到BUF中;

4.擦除該頁(yè);

5.寫入整個(gè)BUF。

可以看出這種方法弊端很明顯:

1.耗時(shí)長(zhǎng) 每次寫都要讀整個(gè)BUF,然后還要先把數(shù)據(jù)存到BUF里,然后再寫入整個(gè)BUF;

2.FALSH擦寫次數(shù)增加,降低使用壽命;

下面給出測(cè)試代碼:

#include

#include

#include //C語言標(biāo)準(zhǔn)庫(kù)

#include “flash.h”

#define USER_FLASH_START_ADDR 0x01070000 //FLASH最后兩個(gè)扇區(qū) 供用戶使用

u32tou8 u32data;//定義一個(gè)聯(lián)合體

//==================================================================================

// 獲取某個(gè)地址所在的頁(yè)首地址

// addr:FLASH地址

// 返回:該地址所在的頁(yè) 共128頁(yè)(0~127)

//==================================================================================

unsigned int FLASH_GetFlashPage(unsigned int addr)

{

if (IS_FLASH_ADDRESS(addr))

{

return (addr&(~0xFFF));//清0低12位就是該頁(yè)的起始地址

}

}

//==================================================================================

// 從FLASH中讀取 一個(gè)字(32位)

// addr:讀取地址

// 返回: 讀到的字?jǐn)?shù)據(jù)

//備注: 地址為4字節(jié)對(duì)齊

//==================================================================================

unsigned int FLSAH_ReadWord(unsigned int addr)

{

return (*(unsigned int *)addr);

}

//==================================================================================

//從FLASH指定地址 讀取數(shù)據(jù)

//備注: 讀取數(shù)據(jù)類型為32位 讀取地址為4字節(jié)對(duì)齊

//==================================================================================

void FLASH_Read(unsigned int ReadAddr,unsigned char *pBuffer,unsigned int NumToRead)

{

unsigned int i;

u32tobyte cache;

for(i=0; iRO = 0;//去掉所有扇區(qū)寫保護(hù)

//==================================================================================

// 判斷寫入地址是否非法 起始地址或者結(jié)束地址不在FALSH范圍內(nèi)則退出

//==================================================================================

if(?。↖S_FLASH_ADDRESS(startaddr)&& IS_FLASH_ADDRESS(endaddr))) return FLASH_ERROR_PG;

while(startaddr remain)//需要寫入的數(shù)據(jù)量大于緩沖buf剩余字節(jié)數(shù)

{

for(i=index;i《4096;i++)//將需要寫入FALSH的數(shù)據(jù)寫入緩沖buff

{

buffer[i]=*(pBuffer++);

}

NumToWrite-=remain;//需要寫入的數(shù)據(jù)長(zhǎng)度-本次已經(jīng)寫入的數(shù)據(jù)長(zhǎng)度

startaddr+=remain;//地址向后偏移本次寫入的字節(jié)數(shù)

}

else

{

for(i=index;i

其中還有個(gè)聯(lián)合體的定義:typedef union

{

unsigned int data;

unsigned char buf[4];

}

u32tou8;FLASH_ErasePage、FLASH_ProgramWord、IS_FLASH_ADDRESS 這三個(gè)都是單片機(jī)FLASH的庫(kù)函數(shù)各家單片機(jī)不同,但功能基本相同,這里不再提供源碼。最后提供以下兩個(gè)FLASH接口即可:FLASH_Write(unsigned int WriteAddr,unsigned char *pBuffer,unsigned int NumToWrite);

FLASH_Read(unsigned int ReadAddr,unsigned char *pBuffer,unsigned int NumToRead)演示:1.為方便查看結(jié)果,測(cè)試從0x1070FFC的位置開始寫入數(shù)據(jù),F(xiàn)LASH地址分布如下圖所示:這里展示了FLASH連續(xù)兩頁(yè)的地址,首先將這兩頁(yè)全部擦除。

100059523-115019-1.jpg

100059523-115020-2.jpg

2.接著從1070FFC的位置開始寫入56個(gè)1,這樣就保證了數(shù)據(jù)跨越了1頁(yè)。unsigned char write[]= {“1111111111111111111111111111111111111111111111111111111111111111111111111111111111111”};

FLASH_Write(0x01070FFC,write,sizeof(write));

100059523-115021-3.jpg

注意:最后的00是因?yàn)樽址慕Y(jié)尾字符是“/0”3.緊接著,在0x1070FFE位置寫入新的字符串,也要保證寫入長(zhǎng)度跨越1頁(yè)。unsigned char write2[]={“23456789”};

FLASH_Write(0x01070FFE,write2,sizeof(write2));

100059523-115022-4.jpg

可以看出,0x1070FFE~0x1071006的位置被寫入了新的字節(jié),但這兩頁(yè)的其他位置數(shù)據(jù)保持不變??偨Y(jié):1、實(shí)際使用時(shí),如果不是受限于成本或者FLASH大小,不建議這樣讀寫內(nèi)部FLASH,以為stm32內(nèi)部FLASH也就10W次壽命,這樣頻繁擦寫會(huì)大大降低FLASH壽命。2、如果保存的數(shù)據(jù)不多,建議每個(gè)數(shù)據(jù)都單獨(dú)存1頁(yè),這樣不用考慮擦除時(shí)會(huì)把其他數(shù)據(jù)也一并擦除。版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。本文鏈接:https://blog.csdn.net/qq_24835087/article/details/103541322審核編輯:何安

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6077

    文章

    45509

    瀏覽量

    671323
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1750

    瀏覽量

    155629
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    NOR Flash和NAND flash有什么區(qū)別

    在嵌入式系統(tǒng)、移動(dòng)設(shè)備與存儲(chǔ)領(lǐng)域,NOR Flash和NAND Flash是兩種最常見的非易失性存儲(chǔ)技術(shù)。盡管它們都屬于閃存(Flash EEPROM)家族,但在內(nèi)部結(jié)構(gòu)、接口方式、讀
    的頭像 發(fā)表于 03-11 15:08 ?115次閱讀
    NOR <b class='flag-5'>Flash</b>和NAND <b class='flag-5'>flash</b>有什么區(qū)別

    CW32F030 FLASH 存儲(chǔ)器的注意事項(xiàng)

    地址的 FLASH 存儲(chǔ)器進(jìn)行擦寫操作,以保證數(shù)據(jù)的可靠存儲(chǔ)。具體壽命數(shù)據(jù)請(qǐng)參閱數(shù)據(jù)手冊(cè)。 ?數(shù)據(jù)存儲(chǔ)模式CW32F030 應(yīng)用規(guī)定,數(shù)據(jù)在 FLASH 中以小端模式存儲(chǔ),即最低字節(jié)
    發(fā)表于 01-12 06:26

    國(guó)產(chǎn)SPI NOR Flash接口閃存介紹

    的存儲(chǔ)架構(gòu),內(nèi)部陣列由多個(gè)256字節(jié)的可編程頁(yè)面組成,支持頁(yè)編程、扇區(qū)擦除、塊擦除及整片擦除等多種操作模式,為用戶帶來高度靈活的存儲(chǔ)管理體驗(yàn)。
    的頭像 發(fā)表于 12-26 11:51 ?494次閱讀

    CW32F030 FLASH的頁(yè)擦除操作

    CW32F030 FLASH 的頁(yè)擦除操作的最小單位為 1 頁(yè),即 512 字節(jié)。 頁(yè)擦除操作完成后,該頁(yè)所有地址空間的數(shù)據(jù)內(nèi)容均為0xFF。如果對(duì)未解鎖的
    發(fā)表于 12-15 06:26

    【瑞薩RA6E2地奇星開發(fā)板試用】內(nèi)部Code flash和Data flash寫入數(shù)據(jù)并通過OLED顯示

    Cortex-M33 內(nèi)核,主頻最高可達(dá)200MHz) Code Flash 規(guī)格 256KB,單次寫入至少128字節(jié)寫入 Data Flash 規(guī)格 4KB,支持4/8/16
    發(fā)表于 12-12 20:15

    【原創(chuàng)】【RA4M2-SENSOR開發(fā)板評(píng)測(cè)】內(nèi)部flash讀寫測(cè)試

    。 RA4M2 內(nèi)部 Flash 相關(guān)的模塊框圖如下圖所示 內(nèi)部FLASH的寫入過程 1.擦除先擦除 Block。 擦除操作將擦除所提供地址
    發(fā)表于 12-06 18:32

    CW32L052 FLASH存儲(chǔ)器介紹

    概述CW32L052內(nèi)部集成了64KB嵌入式FLASH供用戶使用,可用來存儲(chǔ)應(yīng)用程序和用戶數(shù)據(jù)。 芯片支持對(duì) FLASH 存儲(chǔ)器的讀、擦除和寫操作
    發(fā)表于 12-05 08:22

    單片機(jī)內(nèi)部FLASH字節(jié)操作

    ); [*]} [*] [*] [*]//================================================================================== [*]//從FLASH指定地址 讀取數(shù)據(jù) [*]//備注: 讀取數(shù)據(jù)類型為32位讀取地址為4
    發(fā)表于 11-24 06:40

    智能顯示模塊支持掉電保存數(shù)據(jù)嗎?智能模塊支持操作Flash嗎?

    智能顯示模塊支持掉電保存數(shù)據(jù)嗎?智能模塊支持操作Flash嗎?
    發(fā)表于 11-14 08:41

    STM32C011開發(fā)(3)----Flash操作

    STM32C011 系列微控制器內(nèi)置 Flash 存儲(chǔ)器,支持程序存儲(chǔ)與數(shù)據(jù)保存,具備頁(yè)面擦除、雙字寫入、讀寫保護(hù)等功能。本文將簡(jiǎn)要介紹 STM32C011 的 Flash 結(jié)構(gòu)與特性,并通過實(shí)際代碼示例,講解
    的頭像 發(fā)表于 09-18 16:48 ?5032次閱讀
    STM32C011開發(fā)(3)----<b class='flag-5'>Flash</b><b class='flag-5'>操作</b>

    請(qǐng)問STM32的內(nèi)部Flash操作是不是優(yōu)先級(jí)最高?

    STM32的內(nèi)部Flash操作是不是優(yōu)先級(jí)最高?目前在內(nèi)部Flash的單獨(dú)一頁(yè)存儲(chǔ)了數(shù)據(jù),發(fā)現(xiàn)在進(jìn)行頁(yè)擦除的時(shí)候正常工作的定時(shí)器中斷無法進(jìn)入
    發(fā)表于 08-13 07:03

    第二十九章 讀寫內(nèi)部FLASH

    本文介紹了W55MH32內(nèi)部FLASH,其含主存儲(chǔ)、系統(tǒng)存儲(chǔ)等,可存儲(chǔ)代碼及掉電保存數(shù)據(jù)。讀寫需解鎖、擦除頁(yè)等步驟,標(biāo)準(zhǔn)庫(kù)提供相關(guān)函數(shù)。還展示了擦除編程測(cè)試及模擬EEPROM讀寫的實(shí)驗(yàn)。
    的頭像 發(fā)表于 06-20 14:09 ?1247次閱讀
    第二十九章 讀寫<b class='flag-5'>內(nèi)部</b><b class='flag-5'>FLASH</b>

    如何通過SFL為設(shè)備添加Flash編程支持

    SEGGER Flash Loader(SFL)是J-Link設(shè)備支持套件(DSK)的一部分,通過SFL,用戶可以為自己的新設(shè)備添加Flash編程支持。
    的頭像 發(fā)表于 05-19 16:35 ?1513次閱讀
    如何通過SFL為設(shè)備添加<b class='flag-5'>Flash</b>編程<b class='flag-5'>支持</b>

    MCU片上Flash

    保留能力,支持多次擦寫操作,是MCU程序存儲(chǔ)的核心介質(zhì)。 主要類型? NOR Flash?:支持隨機(jī)訪問,可直接運(yùn)行代碼,適用于實(shí)時(shí)性要求高的場(chǎng)景。 NAND
    的頭像 發(fā)表于 05-06 14:26 ?1361次閱讀

    存儲(chǔ)技術(shù)探秘 NAND Flash vs NOR Flash:藏在芯片里的&quot;門道之爭(zhēng)&quot;

    非易失存儲(chǔ):斷電后數(shù)據(jù)不丟失 可重復(fù)編程:支持擦寫操作(需先擦除后寫入) 二進(jìn)制操作:擦除后全為 1,寫操作將 1 變?yōu)?0 核心差異 一、物理結(jié)構(gòu)對(duì)比 NOR 特性 獨(dú)立存儲(chǔ)單元并
    的頭像 發(fā)表于 03-18 12:06 ?1546次閱讀