精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

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

先楫半導體HPMicro ? 2023-09-22 08:19 ? 次閱讀

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

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

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

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

如何實現(xiàn)?

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

功能:

? 讀取片內或片外flash信息

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

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

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

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

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

為了實現(xiàn)此功能,需要8個函數(shù)來進行編程、讀取和擦除,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扇區(qū)大小,單位是byte。若不確定flash扇區(qū)大小可以在Initial_EEProm函數(shù)中獲取flash信息。Flash_base定義flash起始地址,具體可以參考user guider中系統(tǒng)內存映射 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時需在RAM中開辟緩存用于常態(tài)數(shù)據(jù)讀寫,開辟數(shù)據(jù)時應注意RAM區(qū)數(shù)據(jù)應放到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 */

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

如果需要將參數(shù)寫入flash中,需將整塊flash擦寫,由于數(shù)據(jù)已經(jīng)存在RAM緩存,不會存在flash擦寫時數(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í)行的程序存儲空間。先楫SDK中已經(jīng)定義好了ram運行區(qū)域,并在HPM_COMMON.H文件中將函數(shù)和數(shù)字放置屬性重新封裝,通過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存儲參數(shù)。由于先楫SDK中已經(jīng)提供了強大的驅動庫,用戶可以方便地通過Flash存儲數(shù)據(jù),降低成本和提高使用靈活性。

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

    關注

    146

    文章

    16667

    瀏覽量

    347806
  • FlaSh
    +關注

    關注

    10

    文章

    1598

    瀏覽量

    147339
  • 存儲
    +關注

    關注

    13

    文章

    4123

    瀏覽量

    85279
  • 模擬
    +關注

    關注

    7

    文章

    1416

    瀏覽量

    83824
  • EEPROM
    +關注

    關注

    9

    文章

    1002

    瀏覽量

    81061
收藏 人收藏

    評論

    相關推薦

    國產(chǎn)EEPROM與歐美EEPROM的具體參數(shù)對比

    國產(chǎn)EEPROM與歐美EEPROM的具體參數(shù)對比
    的頭像 發(fā)表于 07-07 18:10 ?401次閱讀

    科普EEPROM 科普 EVASH Ultra EEPROM?科普存儲芯片

    科普EEPROM 科普 EVASH Ultra EEPROM?科普存儲芯片
    的頭像 發(fā)表于 06-25 17:14 ?322次閱讀

    EEPROMFlash存儲器的區(qū)別

    可編程只讀存儲器)和Flash存儲器是兩種常見的非易失性存儲器,它們具有各自的特點和應用場景。本文將深入分析和比較EEPROM
    的頭像 發(fā)表于 05-23 16:35 ?3606次閱讀

    STM32 FLASH模擬EEPROM,燒寫程序時設置為讀保護Level-2級別,還能正常讀寫這個模擬EEPROM嗎?

    STM32系列內部FLASH模擬EEPROM,燒寫程序時設置為讀保護Level-2級別,還能正常讀寫這個模擬EEPROM嗎?
    發(fā)表于 03-13 07:34

    FLASHEEPROM的區(qū)別和擴展【硬件干貨】

    EEPROMFLASH總體差異 ????部分MCU片內不帶程序存儲器ROM,可執(zhí)行代碼只能放在外面的EEPROMFLASH(外擴)中;
    的頭像 發(fā)表于 02-27 08:37 ?1413次閱讀
    <b class='flag-5'>FLASH</b>、<b class='flag-5'>EEPROM</b>的區(qū)別和擴展【硬件干貨】

    單片機為何需要FlashEEPROM?它們有何作用?

    單片機為何需要FlashEEPROM?它們有何作用? 單片機是一種集成電路,具有處理器核心、內存和外設等功能,通常用于嵌入式系統(tǒng)中。FlashEEPROM則是單片機中常用的
    的頭像 發(fā)表于 01-18 11:43 ?2740次閱讀

    NUC029怎么利用data flash模擬EEPROM

    (); SYS_Init(); SYS_LockReg(); /*********************************** 利用data flash模擬EEPROM
    發(fā)表于 01-15 06:10

    stm32f103 flash模擬eeprom

    ,STM32F103的Flash存儲器可以模擬EEPROM的功能,在本文中我們將詳細介紹如何使用STM32F103的Flash
    的頭像 發(fā)表于 01-09 11:21 ?1639次閱讀

    eepromflash的區(qū)別的作用

    EEPROM(Electrically Erasable Programmable Read-Only Memory)和Flash Memory(閃存)是兩種常見的非易失性存儲器(NVM)技術,它們
    的頭像 發(fā)表于 12-07 16:10 ?1630次閱讀

    APM32F4 Flash模擬EEPROM介紹和代碼實現(xiàn)

    FlashEEPROM一次操作的數(shù)據(jù)大小不同。雖然MCU內部的FlashEEPROM一樣,可以實現(xiàn)按字節(jié)的讀寫,但是在寫入的時候,是必須要先按扇區(qū)擦除的,這里也可以說相當于是一次操
    的頭像 發(fā)表于 12-01 17:52 ?973次閱讀
    APM32F4 <b class='flag-5'>Flash</b><b class='flag-5'>模擬</b><b class='flag-5'>EEPROM</b>介紹和代碼實現(xiàn)

    嵌入式軟件中如何利用內部flash存儲參數(shù)呢?

    嵌入式軟件中經(jīng)常要存儲一些非易失參數(shù),例如用戶設置、校準參數(shù)、設備運行參數(shù)等,通常情況下我們都會選擇存儲
    的頭像 發(fā)表于 10-27 14:12 ?1050次閱讀
    嵌入式軟件中如何利用內部<b class='flag-5'>flash</b><b class='flag-5'>存儲</b><b class='flag-5'>參數(shù)</b>呢?

    單片機常有Flash,而不常有EEPROM原因

    單片機常有Flash,而不常有EEPROM原因
    的頭像 發(fā)表于 10-24 15:38 ?546次閱讀
    單片機常有<b class='flag-5'>Flash</b>,而不常有<b class='flag-5'>EEPROM</b>原因

    用STM32_FLASH模擬實現(xiàn)EEPROM功能

    在工業(yè)應用中經(jīng)常使用EEPROM存儲數(shù)據(jù),為降低成本、節(jié)省PCB空間,外部EEPROM可以用片內Flash加上特定的軟件算法代替。
    的頭像 發(fā)表于 10-23 17:40 ?2447次閱讀
    用STM32_<b class='flag-5'>FLASH</b><b class='flag-5'>模擬</b>實現(xiàn)<b class='flag-5'>EEPROM</b>功能

    FLASH模擬EEPROM入門指南

    FLASH模擬EEPROM入門指南使用AT32 的片上FLASH 模擬EEPROM 功能。
    發(fā)表于 10-19 06:10

    使用MCU Flash模擬EEPROM

    使用MCU Flash模擬EEPROM
    的頭像 發(fā)表于 10-18 18:01 ?591次閱讀