色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

基于HPM6000系列芯片如何使用Flash模擬EEPROM存儲參數

331062281 ? 來源:先楫半導體HPMicro ? 2023-09-21 09:15 ? 次閱讀

概 述

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 Flash Sector Size:%dKBytes Flash Page Size:%dBytes ",

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存儲數據,降低成本和提高使用靈活性。

“先楫半導體”(HPMicro)是一家致力于高性能嵌入式解決方案的半導體公司,總部位于上海,產品覆蓋微控制器微處理器和周邊芯片,以及配套的開發工具和生態系統。公司成立于2020年6月,總部坐落于上海市張江高科技園區,并在天津、深圳和蘇州均設立分公司。核心團隊來自世界知名半導體公司管理團隊,具有15年以上,超過20個SoC的豐富的研發及管理經驗。先楫半導體以產品質量為本,所有產品均通過嚴格的可靠性測試。目前已經量產的高性能通用MCU產品包含HPM6700/6400、HPM6300、HPM6200及HPM5300四個系列,性能領先國際同類產品并通過AEC-Q100認證。公司已完成ISO9001質量管理認證和ISO 26262功能安全管理體系ASIL D認證,全力服務中國乃至全球的工業、汽車和能源市場。更多信息,請訪問 https://hpmicro.com/

審核編輯:彭菁

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

    關注

    455

    文章

    50851

    瀏覽量

    423908
  • FlaSh
    +關注

    關注

    10

    文章

    1635

    瀏覽量

    148080
  • 存儲
    +關注

    關注

    13

    文章

    4317

    瀏覽量

    85869
  • 應用程序
    +關注

    關注

    37

    文章

    3271

    瀏覽量

    57724
收藏 人收藏

    評論

    相關推薦

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

    概述在MCU的使用中,經常遇到需要存儲參數或掉電保持數據等功能。其中,FlashEEPROM是常見的非易失性存儲器,都可以做到設備掉電重啟
    的頭像 發表于 09-22 08:19 ?1683次閱讀
    如何使用<b class='flag-5'>Flash</b><b class='flag-5'>模擬</b><b class='flag-5'>EEPROM</b><b class='flag-5'>存儲</b><b class='flag-5'>參數</b>

    請問HPM6000系列CPU中斷有何特點,注意事項有哪些?

    HPM6000系列CPU中斷有何特點,注意事項有哪些?
    發表于 05-26 06:19

    請問HPM6000系列MCU如何使用硬件DSP單元?

    HPM6000系列MCU如何使用硬件DSP單元?
    發表于 05-26 06:18

    請問HPM6000系列MCU如何使用硬件浮點數單元?

    HPM6000系列MCU如何使用硬件浮點數單元?
    發表于 05-26 06:49

    HPM6000系列微控制器的片上各類SRAM使用指南

    HPM6000系列微控制器片上SRAM使用指南
    發表于 06-01 06:19

    HPM6000系列微控制器片上閃存使用指南

    HPM6000系列MCU片上Flash使用指南
    發表于 06-01 06:20

    HPM6000系列微控制器BOOT模式的說明資料

    HPM6000系列微控制器BOOT MODE指南
    發表于 06-01 08:43

    HPM6000系列微控制器片上閃存使用指南

    HPM6000系列MCU片上Flash使用指南
    發表于 06-02 08:54

    HPM6000系列芯片內部模擬地和數字地

    HPM6000系列芯片內部模擬地和數字地是隔離開的嗎?
    發表于 07-10 17:49

    HPM6000系列微控制器 CMSIS DAP調試器使用指南

    在上海先楫提供的HPM系列MCU評估套件上,多數集成了基于FTDI的FT2232芯片的板載調試器,方便了開發人員直接調試并評估HPM6000系列
    的頭像 發表于 06-19 17:02 ?3914次閱讀
    <b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b>微控制器 CMSIS DAP調試器使用指南

    HPM6000系列 ADC 相關硬件設計教程

    本文將為大家展示國產芯片HPM6000系列ADC性能出色的測試結果并為您提供了與HPM6000系列微控制器的模數轉換器ADC相關的外部電路設
    的頭像 發表于 07-22 11:18 ?1317次閱讀
    <b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b> ADC 相關硬件設計教程

    HPM6000系列微控制器的BOOT 模式的說明以及相應的外部電路設計建議

    1.簡介HPM6000系列MCU目前提供了不同的啟動方式,方便客戶在研發生產等不同階段使用。本文提供了HPM6000系列微控制器的BOOT模式的說明以及相應的外部電路設計建議。2.BO
    的頭像 發表于 07-21 15:15 ?1713次閱讀
    <b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b>微控制器的BOOT 模式的說明以及相應的外部電路設計建議

    應用分享| HPM6000系列片上SRAM揭秘

    本期開發筆記由費神編寫主要會為大家介紹HPM6000系列的各類片上SRAM并結合SeggerEmbeddedStudio的linker文件介紹,提供了如何使用這些SRAM的建議,趕快來了解吧~簡介
    的頭像 發表于 09-19 11:02 ?1920次閱讀
    應用分享| <b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b>片上SRAM揭秘

    應用貼士 | HPM6000系列 Security Flash介紹

    本期介紹的是HPM6000系列中securityflash方面內容。希望可以幫助用戶了解先楫為了用戶信息安全方面所做的設計。SecurityFlash模塊概述首先進行一些名詞解釋:在線執行
    的頭像 發表于 09-29 10:48 ?1078次閱讀
    應用貼士 | <b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b> Security <b class='flag-5'>Flash</b>介紹

    HPM6000系列微控制器DSP/FFT使用介紹

    電子發燒友網站提供《HPM6000系列微控制器DSP/FFT使用介紹.pdf》資料免費下載
    發表于 09-19 15:21 ?1次下載
    <b class='flag-5'>HPM6000</b><b class='flag-5'>系列</b>微控制器DSP/FFT使用介紹
    主站蜘蛛池模板: xxx性欧美在线| 敌伦小芳的第一次| 黄片在线观看| 国产午夜福利片| 国产一区二区免费在线观看| 好大快用力深一点h视频| 黄瓜视频苹果直接安装| 玖玖爱精品视频| 欧美国产成人在线| 色丁香婷婷综合缴情综| 亚洲成人99| 在线a视频| caoporen超碰在线视频| 成人免费公开视频| 国产制服丝袜91在线| 久久视频在线视频观看精品15| 男女车车的车车网站W98免费| 日本肉肉口番工全彩动漫| 校园刺激全黄H全肉细节文| 一本大道无码AV天堂欧美 | 狠狠躁天天躁小说| 老司机无码精品A| 日本经典片免费看| 爽爽影院线观看免费| 亚洲国产在线精品国自产拍五月 | 秋霞电影在线观看午夜伦| 邪恶肉肉全彩色无遮盖| 婬香婬色天天视频| 北条麻妃久久99精品| 国产中的精品AV一区二区| 蜜芽一二三区| 我半夜摸妺妺的奶C了她| 一本一本之道高清在线观看| 欧美亚洲高清国产| 女人18毛片| 九九黄色大片| 国产亚洲精品久久久999蜜臀| yellow免费观看直播| 妇少水多18P蜜泬17P亚洲乱| 久草在线草a免费线看| 亚洲a视频在线观看|