chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

如何使用Flash模擬EEPROM存儲(chǔ)參數(shù)

先楫半導(dǎo)體HPMicro ? 2023-09-22 08:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

MCU的使用中,經(jīng)常遇到需要存儲(chǔ)參數(shù)或掉電保持?jǐn)?shù)據(jù)等功能。其中,F(xiàn)lash和EEPROM是常見的非易失性存儲(chǔ)器,都可以做到設(shè)備掉電重啟后,數(shù)據(jù)還會(huì)保留。但二者有明顯的區(qū)別:EEPROM可以被編程和電擦除,而且大多數(shù)的EEPROM可以被編程和電擦除,大多數(shù)串行EEPROM允許逐字節(jié)程序或擦除操作。與EEPROM相比,閃存具有更高的密度,這允許在芯片上實(shí)現(xiàn)更大的內(nèi)存陣列(扇區(qū))。通過對(duì)每個(gè)單元施加時(shí)間控制的電壓來執(zhí)行閃存擦除和寫入周期。典型的Flash寫時(shí)間是50μs/8位字;然而,EEPROM通常需要5到10 ms。EEPROM不需要進(jìn)行頁面(扇區(qū))擦除操作,可以擦除一個(gè)需要指定時(shí)間的特定字節(jié)。與EEPROM相比,F(xiàn)lash具有更高的密度和更低的價(jià)格。

先楫產(chǎn)品可以外接大容量Flash芯片,支持可達(dá)256Mbyte程序或數(shù)據(jù)存儲(chǔ);部分產(chǎn)品如HPM6754、HPM6364、HPM6284內(nèi)置4Mbyte Flash,HPM53XX系列全系支持1Mbyte Flash。在使用Flash模擬EEPROM時(shí),最重要的挑戰(zhàn)是滿足Flash程序/擦除持久性和數(shù)據(jù)保留方面的可靠性目標(biāo)。

其次,在應(yīng)用程序的控制下,需要滿足更新和讀取數(shù)據(jù)的實(shí)時(shí)應(yīng)用要求。請(qǐng)注意,在Flash擦寫期間,它不能執(zhí)行Flash應(yīng)用程序,因?yàn)樵诖藭r(shí)間內(nèi)不能執(zhí)行在Flash中的程序,通常程序是將Flash擦寫程序拷貝到RAM中執(zhí)行。先楫半導(dǎo)體為了方便客戶程序應(yīng)用,已經(jīng)將Flash驅(qū)動(dòng)程序集成到ROM中,減少了系統(tǒng)對(duì)RAM的需求,用戶使用時(shí)更加靈活方便。

由于Flash的塊擦除要求,必須完全為模擬的EEPROM保留至少一個(gè)Flash扇區(qū)。例如,一個(gè)4K x 8bit大小的Flash扇區(qū)可以分為16頁,每個(gè)頁的大小為256 x 8bit。這使得每個(gè)頁面相當(dāng)于一個(gè)256 x 8字節(jié)的EEPROM。要保存的數(shù)據(jù)首先寫入RAM中的緩沖區(qū)中,每個(gè)部分RAM可以模擬EEPROM的存儲(chǔ)的數(shù)據(jù)。

如何實(shí)現(xiàn)?

根據(jù)Flash扇區(qū)和模擬的EEPROM的大小,劃分相應(yīng)的Flash和RAM空間。

功能:

? 讀取片內(nèi)或片外flash信息。

? 批量讀取flash中數(shù)據(jù)到RAM緩存中。

? 用戶可以自由讀寫RAM緩存中數(shù)據(jù)。

? 用戶可以將RAM緩存中數(shù)據(jù)寫入flash。

? 用戶可以根據(jù)自己的需要定制存儲(chǔ)空間大小和存儲(chǔ)地址。

由于先楫半導(dǎo)體MCU已經(jīng)集成了Flash驅(qū)動(dòng),用戶可以不再需要把精力放到繁瑣的底層Flash驅(qū)動(dòng)部分。

為了實(shí)現(xiàn)此功能,需要8個(gè)函數(shù)來進(jìn)行編程、讀取和擦除,3個(gè)宏定義確定存儲(chǔ)空間和位置。

/* Sector size */

#defineSECTOR_SIZE (uint32_t) (0x1000)

/* Sectors 0 and 1 base and end addresses */

#defineFlash_base 0x80000000L

#defineSECTOR1_BASE_ADDRESS (Flash_base+0x3FE000)

#defineSECTOR1_END_ADDRESS (SECTOR1_BASE_ADDRESS+SECTOR_SIZE*2-1)

其中,SECTOR_SIZE定義了flash扇區(qū)大小,單位是byte。若不確定flash扇區(qū)大小可以在Initial_EEProm函數(shù)中獲取flash信息。Flash_base定義flash起始地址,具體可以參考user guider中系統(tǒng)內(nèi)存映射 System Memory Map地址。SECTOR1_BASE_ADDRESS和SECTOR1_END_ADDRESS為數(shù)據(jù)存放起始地址,SECTOR1_BASE_ADDRESS必須是特定扇區(qū)起始地址。

ATTR_PLACE_AT_WITH_ALIGNMENT(".ahb_sram",8) uint8_tEEPROM_data[SECTOR1_END_ADDRESS-SECTOR1_BASE_ADDRESS+1];

Flash模擬EEPROM時(shí)需在RAM中開辟緩存用于常態(tài)數(shù)據(jù)讀寫,開辟數(shù)據(jù)時(shí)應(yīng)注意RAM區(qū)數(shù)據(jù)應(yīng)放到ahb_sram或noncacheable區(qū)域。

ifdefined(FLASH_XIP) &&FLASH_XIP

ATTR_RAMFUNC hpm_stat_tInitial_EEProm(void)

#else

hpm_stat_tInitial_EEProm(void)

#endif

{

xpi_nor_config_option_toption;

option.header.U= BOARD_APP_XPI_NOR_CFG_OPT_HDR;

option.option0.U= BOARD_APP_XPI_NOR_CFG_OPT_OPT0;

option.option1.U= BOARD_APP_XPI_NOR_CFG_OPT_OPT1;

hpm_stat_tstatus= rom_xpi_nor_auto_config(HPM_XPI0, &s_xpi_nor_config, &option);

if(status!= status_success) {

returnstatus;

}

rom_xpi_nor_get_property(HPM_XPI0, &s_xpi_nor_config, xpi_nor_property_total_size,

&flash_size);

rom_xpi_nor_get_property(HPM_XPI0, &s_xpi_nor_config, xpi_nor_property_sector_size,

§or_size);

rom_xpi_nor_get_property(HPM_XPI0, &s_xpi_nor_config, xpi_nor_property_page_size, &page_size);

printf("Flash Size:%dMBytes\nFlash Sector Size:%dKBytes\nFlash Page Size:%dBytes\n",

flash_size/ 1024U/ 1024U, sector_size/ 1024U, page_size);

EEProm_Flush();

}/* End Initial_EEProm */

通過調(diào)用rom_xpi_nor_auto_config()、rom_xpi_nor_get_property()獲取flash信息。

/*******************************************************************************

* Routine: EEPromFlush

* Purpose: Refresh data from flash to buffer.

*******************************************************************************/

inlinevoidEEProm_Flush(void)

{

memcpy((void*)EEPROM_data,(constvoid*)SECTOR1_BASE_ADDRESS,(SECTOR1_END_ADDRESS-SECTOR1_BASE_ADDRESS));

}/* End EEProm_Flush */


從flash中讀取數(shù)據(jù)無需單獨(dú)調(diào)用API函數(shù),直接尋址讀取效率更高,文中通過memcpy()函數(shù)直接從flash中讀取數(shù)據(jù)到RAM緩存中,后面讀寫參數(shù)直接讀寫RAM緩存即可。

如果需要將參數(shù)寫入flash中,需將整塊flash擦寫,由于數(shù)據(jù)已經(jīng)存在RAM緩存,不會(huì)存在flash擦寫時(shí)數(shù)據(jù)丟失的問題。

/*******************************************************************************

* Routine: writeEEProm_withflush

* Purpose: Writes variable to EEPROM and flush flash later.

* Input : none

* Output: None.

* Return: Returns 0

*******************************************************************************/

#ifdefined(FLASH_XIP) &&FLASH_XIP

ATTR_RAMFUNC hpm_stat_twriteEEProm_withflush(uint16_tindex, uint8_t*data, uint16_tsize)

#else

hpm_stat_twriteEEProm_withflush(uint16_tindex, uint8_t*data, uint16_tsize)

#endif

{

hpm_stat_tstatus;

if(flash_size==0) returnstatus_fail;

memcpy((void*)&EEPROM_data[index],(constvoid*)data,size);

status= rom_xpi_nor_erase(HPM_XPI0, xpi_xfer_channel_auto, &s_xpi_nor_config,

SECTOR1_BASE_ADDRESS-Flash_base, SECTOR1_END_ADDRESS-SECTOR1_BASE_ADDRESS);

if(status!= status_success) {

returnstatus;

}

status= rom_xpi_nor_program(HPM_XPI0, xpi_xfer_channel_auto, &s_xpi_nor_config,

(constuint32_t*)EEPROM_data, SECTOR1_BASE_ADDRESS-Flash_base, SECTOR1_END_ADDRESS-SECTOR1_BASE_ADDRESS);

if(status!= status_success) {

returnstatus;

}

}


考慮到flash擦寫期間不能讀取flash,flash擦寫函數(shù)需放置在RAM執(zhí)行的程序存儲(chǔ)空間。先楫SDK中已經(jīng)定義好了ram運(yùn)行區(qū)域,并在HPM_COMMON.H文件中將函數(shù)和數(shù)字放置屬性重新封裝,通過ATTR_RAMFUNC等效定義__attribute__((section(“.fast”)))。為確保擦寫flash期間不會(huì)被中斷打斷從而調(diào)用其他flash中的程序,需在運(yùn)行中關(guān)閉中斷。

//disable all interrupt before programming flash

CSR_reg= disable_global_irq(CSR_MSTATUS_MIE_MASK);

disable_global_irq(CSR_MSTATUS_SIE_MASK);

disable_global_irq(CSR_MSTATUS_UIE_MASK);

writeEEProm_withflush(0,(uint8_t*)s_write_buf,0x1000);//update eeprom with flash

//restore interrupt

restore_global_irq(CSR_reg);

小 結(jié)

本文首先介紹了基于HPM6000系列芯片如何使用Flash模擬EEPROM存儲(chǔ)參數(shù)。由于先楫SDK中已經(jīng)提供了強(qiáng)大的驅(qū)動(dòng)庫,用戶可以方便地通過Flash存儲(chǔ)數(shù)據(jù),降低成本和提高使用靈活性。

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

    關(guān)注

    147

    文章

    18581

    瀏覽量

    385637
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1713

    瀏覽量

    154626
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4683

    瀏覽量

    89525
  • 模擬
    +關(guān)注

    關(guān)注

    7

    文章

    1445

    瀏覽量

    85110
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1127

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    把CW32L010用FLASH模擬EEPROM

    CW32L010橫空出世,定時(shí)器和ADC變化很大,FLASH基本和以前型號(hào)一樣,但有一點(diǎn)改動(dòng),BUSY位從CR1寄存器改到ISR寄存器了。 把F003的程序改改就能用,太棒了,拿走不謝。 只有一個(gè)
    發(fā)表于 11-24 07:40

    意法半導(dǎo)體Page EEPROM打破數(shù)據(jù)存儲(chǔ)的玻璃天花板

    EEPROM是一項(xiàng)成熟的非易失性存儲(chǔ)(NVM)技術(shù),其特性對(duì)當(dāng)今尖端應(yīng)用的發(fā)展具有非常重要的意義。意法半導(dǎo)體(ST)是全球EEPROM芯片知名廠商和存儲(chǔ)器產(chǎn)品和工藝創(chuàng)新名企之一,其連接
    的頭像 發(fā)表于 11-17 09:30 ?940次閱讀

    ?STM32 EEPROM存儲(chǔ)擴(kuò)展板技術(shù)解析與應(yīng)用指南

    STMicroelectronics X-NUCLEO-EEICA1 I2C EEPROM存儲(chǔ)器擴(kuò)展板非常適合用于M24256E-F和M24M01E-F系列I^2^C EEPROM
    的頭像 發(fā)表于 10-21 16:22 ?385次閱讀
    ?STM32 <b class='flag-5'>EEPROM</b><b class='flag-5'>存儲(chǔ)</b>擴(kuò)展板技術(shù)解析與應(yīng)用指南

    A25:MCU系統(tǒng)器件知識(shí)與應(yīng)用專題--MCU、EEPROM/FLASH和晶體/晶振知識(shí)及應(yīng)用案例

    基本特點(diǎn)、功能、選型參數(shù)詳細(xì)說明、供應(yīng)資源)及選用案例; 3、介紹flash/EEPROM的基本知識(shí)及選用案例; 4、介紹晶振及其他外圍器件的基本知識(shí)及選用案例; 適應(yīng)對(duì)象:PACK
    的頭像 發(fā)表于 09-09 10:24 ?417次閱讀
    A25:MCU系統(tǒng)器件知識(shí)與應(yīng)用專題--MCU、<b class='flag-5'>EEPROM</b>/<b class='flag-5'>FLASH</b>和晶體/晶振知識(shí)及應(yīng)用案例

    FLASH模擬EEPROM入門指南

    以下是一份基于多款芯片實(shí)踐總結(jié)出的 FLASH模擬EEPROM入門指南,涵蓋核心概念、關(guān)鍵步驟及實(shí)用技巧: 一、基本概念與原理 背景動(dòng)機(jī) 需求驅(qū)動(dòng):許多MCU(如AT32)未集成原生EEPR
    發(fā)表于 08-14 06:13

    求助,關(guān)于STM32F407的flash讀寫問題求解

    目前flash模擬EEPROM是參考的官方的flash讀寫代碼,但C語言中attribute ((at())絕對(duì)定位的應(yīng)用 網(wǎng)上的一段代碼如下 1、定位到
    發(fā)表于 07-18 07:14

    FLASH模擬EEPROM

    FLASH模擬EEPROM 由于 AT32 單片機(jī)沒有 EEPROM 功能,但是在一些應(yīng)用中需要使用 EEPROM
    發(fā)表于 07-16 15:13

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

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

    扒一扒單片機(jī)與存儲(chǔ)器的那些事

    單片機(jī)與存儲(chǔ)器的關(guān)系像什么?單片機(jī)里的存儲(chǔ)都是一樣的嗎?為什么有的單片機(jī)既有EEPROM又有Flash
    的頭像 發(fā)表于 04-10 10:06 ?1312次閱讀
    扒一扒單片機(jī)與<b class='flag-5'>存儲(chǔ)</b>器的那些事

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

    門電路玄機(jī) NOR Flash:Intel 1988 年革命性突破,終結(jié) EPROM/EEPROM 壟斷時(shí)代 NAND Flash:東芝 1989 年發(fā)布,開創(chuàng) "低成本比特" 存儲(chǔ)
    的頭像 發(fā)表于 03-18 12:06 ?1024次閱讀

    如何優(yōu)化EEPROM的數(shù)據(jù)存儲(chǔ)策略

    EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦除可編程只讀存儲(chǔ)器)是一種非揮發(fā)性存儲(chǔ)器,可以在沒有電源的情況下保持?jǐn)?shù)據(jù)
    的頭像 發(fā)表于 12-16 17:21 ?2002次閱讀

    EEPROM與SRAM的區(qū)別和應(yīng)用場景

    EEPROM(電可擦可編程只讀存儲(chǔ)器) 定義與特性 EEPROM是一種非易失性存儲(chǔ)器,這意味著即使在斷電的情況下,存儲(chǔ)
    的頭像 發(fā)表于 12-16 17:12 ?2215次閱讀

    EEPROM存儲(chǔ)器容量選擇技巧 EEPROM的故障排查與維修

    EEPROM存儲(chǔ)器容量選擇技巧 選擇合適的EEPROM存儲(chǔ)器容量需要考慮多個(gè)因素,以確保所選型號(hào)能夠滿足應(yīng)用需求并具備良好的性能和可靠性。以下是一些關(guān)鍵的選擇技巧: 確定基本需求 :
    的頭像 發(fā)表于 12-16 16:47 ?2550次閱讀

    EEPROM在嵌入式系統(tǒng)中的應(yīng)用 EEPROM數(shù)據(jù)保護(hù)技術(shù)解析

    的數(shù)據(jù)進(jìn)行擦除和重寫。在嵌入式系統(tǒng)中,EEPROM因其獨(dú)特的特性而被廣泛應(yīng)用于存儲(chǔ)關(guān)鍵數(shù)據(jù),如配置參數(shù)、校準(zhǔn)數(shù)據(jù)和固件更新等。 EEPROM在嵌入式系統(tǒng)中的應(yīng)用 1.
    的頭像 發(fā)表于 12-16 16:37 ?3685次閱讀

    EEPROM存儲(chǔ)器的工作原理 EEPROMFLASH存儲(chǔ)器的比較

    EEPROM存儲(chǔ)器的工作原理 基本結(jié)構(gòu) : EEPROM由浮柵晶體管構(gòu)成,每個(gè)浮柵晶體管可以存儲(chǔ)一個(gè)比特的數(shù)據(jù)。浮柵是一個(gè)隔離的導(dǎo)電區(qū)域,可以捕獲和保持電子,從而改變晶體管的閾值電壓。
    的頭像 發(fā)表于 12-16 16:35 ?2976次閱讀