国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用Flash模擬EEPROM存儲參數

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

掃碼添加小助手

加入工程師交流群

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

先楫產品可以外接大容量Flash芯片,支持可達256Mbyte程序或數據存儲;部分產品如HPM6754、HPM6364、HPM6284內置4Mbyte Flash,HPM53XX系列全系支持1Mbyte Flash。在使用Flash模擬EEPROM時,最重要的挑戰是滿足Flash程序/擦除持久性和數據保留方面的可靠性目標。

其次,在應用程序的控制下,需要滿足更新和讀取數據的實時應用要求。請注意,在Flash擦寫期間,它不能執行Flash應用程序,因為在此時間內不能執行在Flash中的程序,通常程序是將Flash擦寫程序拷貝到RAM中執行。先楫半導體為了方便客戶程序應用,已經將Flash驅動程序集成到ROM中,減少了系統對RAM的需求,用戶使用時更加靈活方便。

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

如何實現?

根據Flash扇區和模擬的EEPROM的大小,劃分相應的Flash和RAM空間。

功能:

? 讀取片內或片外flash信息。

? 批量讀取flash中數據到RAM緩存中。

? 用戶可以自由讀寫RAM緩存中數據。

? 用戶可以將RAM緩存中數據寫入flash。

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

由于先楫半導體MCU已經集成了Flash驅動,用戶可以不再需要把精力放到繁瑣的底層Flash驅動部分。

為了實現此功能,需要8個函數來進行編程、讀取和擦除,3個宏定義確定存儲空間和位置。

/* 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扇區大小,單位是byte。若不確定flash扇區大小可以在Initial_EEProm函數中獲取flash信息。Flash_base定義flash起始地址,具體可以參考user guider中系統內存映射 System Memory Map地址。SECTOR1_BASE_ADDRESS和SECTOR1_END_ADDRESS為數據存放起始地址,SECTOR1_BASE_ADDRESS必須是特定扇區起始地址。

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

Flash模擬EEPROM時需在RAM中開辟緩存用于常態數據讀寫,開辟數據時應注意RAM區數據應放到ahb_sram或noncacheable區域。

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 */

通過調用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中讀取數據無需單獨調用API函數,直接尋址讀取效率更高,文中通過memcpy()函數直接從flash中讀取數據到RAM緩存中,后面讀寫參數直接讀寫RAM緩存即可。

如果需要將參數寫入flash中,需將整塊flash擦寫,由于數據已經存在RAM緩存,不會存在flash擦寫時數據丟失的問題。

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

* 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擦寫函數需放置在RAM執行的程序存儲空間。先楫SDK中已經定義好了ram運行區域,并在HPM_COMMON.H文件中將函數和數字放置屬性重新封裝,通過ATTR_RAMFUNC等效定義__attribute__((section(“.fast”)))。為確保擦寫flash期間不會被中斷打斷從而調用其他flash中的程序,需在運行中關閉中斷。

//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);

小 結

本文首先介紹了基于HPM6000系列芯片如何使用Flash模擬EEPROM存儲參數。由于先楫SDK中已經提供了強大的驅動庫,用戶可以方便地通過Flash存儲數據,降低成本和提高使用靈活性。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    147

    文章

    18925

    瀏覽量

    398127
  • FlaSh
    +關注

    關注

    10

    文章

    1748

    瀏覽量

    155518
  • 存儲
    +關注

    關注

    13

    文章

    4791

    瀏覽量

    90058
  • 模擬
    +關注

    關注

    7

    文章

    1447

    瀏覽量

    85383
  • EEPROM
    +關注

    關注

    9

    文章

    1137

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    SPI NOR Flash和SPI NAND Flash存儲芯片的區別

    SPI NOR Flash與SPI NAND Flash并非相互替代,而是互補關系。SPI NOR勝在讀取速度快、使用簡單、可靠性高,是代碼存儲的理想選擇。SPI NAND則以其大容量、高擦寫速度
    的頭像 發表于 01-29 16:58 ?466次閱讀
    SPI NOR <b class='flag-5'>Flash</b>和SPI NAND <b class='flag-5'>Flash</b><b class='flag-5'>存儲</b>芯片的區別

    單片機Flash是什么類型

    存儲器)。 在過去,嵌入式系統一直使用ROM(EPROM)作為它們的存儲設備,Flash的出現,全面代替了ROM(EPROM)在嵌入式系統中的地位,用作存儲Bootloader以及操作
    發表于 01-04 07:10

    把CW32L010用FLASH模擬EEPROM

    CW32L010橫空出世,定時器和ADC變化很大,FLASH基本和以前型號一樣,但有一點改動,BUSY位從CR1寄存器改到ISR寄存器了。 把F003的程序改改就能用,太棒了,拿走不謝。 只有一個
    發表于 11-24 07:40

    武漢芯源小容量存儲芯片EEPROM產品的特點

    和讀取,適用于需要長期保存關鍵數據的設備。 多種存儲容量:武漢芯源半導體的EEPROM產品提供多種存儲容量選擇,從2KB到512KB不等,以滿足不同應用的需求。 先進的工藝:采用華虹95nm最先進工藝制造
    發表于 11-21 07:10

    意法半導體Page EEPROM打破數據存儲的玻璃天花板

    EEPROM是一項成熟的非易失性存儲(NVM)技術,其特性對當今尖端應用的發展具有非常重要的意義。意法半導體(ST)是全球EEPROM芯片知名廠商和存儲器產品和工藝創新名企之一,其連接
    的頭像 發表于 11-17 09:30 ?1821次閱讀

    ?STM32 EEPROM存儲擴展板技術解析與應用指南

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

    A25:MCU系統器件知識與應用專題--MCU、EEPROM/FLASH和晶體/晶振知識及應用案例

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

    NAND Flash的基本原理和結構

    NAND Flash是什么?NAND Flash(閃存)是一種非易失性存儲器技術,主要用于數據存儲。與傳統的DRAM或SRAM不同,NAND Fla
    的頭像 發表于 09-08 09:51 ?7032次閱讀
    NAND <b class='flag-5'>Flash</b>的基本原理和結構

    FLASH模擬EEPROM入門指南

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

    求助,關于STM32F407的flash讀寫問題求解

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

    FLASH模擬EEPROM

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

    如何增加CYBLE-416045-02的EEPROM

    我正在使用 CYBLE-416045-02 開發產品,但似乎最大模擬 EEPROM 是 32kBytes。 有沒有辦法進一步增加 EEPROM,因為我需要它來存儲記錄的數據。
    發表于 06-30 08:26

    第二十九章 讀寫內部FLASH

    本文介紹了W55MH32內部FLASH,其含主存儲、系統存儲等,可存儲代碼及掉電保存數據。讀寫需解鎖、擦除頁等步驟,標準庫提供相關函數。還展示了擦除編程測試及
    的頭像 發表于 06-20 14:09 ?1216次閱讀
    第二十九章 讀寫內部<b class='flag-5'>FLASH</b>

    扒一扒單片機與存儲器的那些事

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

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

    門電路玄機 NOR Flash:Intel 1988 年革命性突破,終結 EPROM/EEPROM 壟斷時代 NAND Flash:東芝 1989 年發布,開創 "低成本比特" 存儲
    的頭像 發表于 03-18 12:06 ?1463次閱讀