<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

MKE14F512VLL16 FlexNVM操作步驟說明

li1756686189 ? 來源:嵌入式 MCU ? 作者:嵌入式 MCU ? 2022-10-24 17:45 ? 次閱讀

使用MKE14F512VLL16 來初始化/讀/寫 FlexNVM。FlexNVM沒有被正確的處理。
FlexNVM 操作步驟如下:
——Flash 初始化
. RunDFlashHandler() -> SetupDFlash() -> FLASH_Init()
——Flash 擦除
. RunDFlashHandler() -> if (gFlash.data.u08Mode == DFLASH_ERASE) -> SetCoreAsRunMode()/FLASH_Erase()/SetCoreAsHSRunMode()
——Flash 寫
. RunDFlashHandler() -> else if (gFlash.data.u08Mode == DFLASH_WRITE) -> SetCoreAsRunMode() / FLASH_Program() & ReadE2PDFlash() / SetCoreAsHSRunMode()
——Flash 讀
. RunDFlashHandler() -> else if (gFlash.data.u08Mode == DFLASH_READ) -> ReadE2PDFlash()

> FlexNVM 操作問題描述
- Erase -> Write(8Byte) -> Read : 讀失敗/寫入的數據不能讀出
- Erase -> Read :擦除前的數據被讀出
- Erase -> Write(8Byte) ->延遲或者復位-> Read :讀取成功

FlexNVM 直接讀取失敗,當寫入數據到 FlexNVM后,執行延遲或者復位操作,可以正確的讀取到寫入的數據。MKE14F 推測預取緩沖區相關的函數:

mscm_flash_prefetch_speculation_enable。用Bootloader將固件寫入到 Flash中,在引導加載程序中,未使用緩存。這種情況下,是否需要在引導加載程序中應用以下功能函數?

Flash_cache_clear_process與mscm_flash_prefetch_speculation_enable

解答:

檢查 LMEM_PCCLCR寄存器的LCIVB ,如果有 cache命中事件,則 LCIVB應該是 "1", 如果 cache沒有命中,則 LCIVB 是 "0"。

bf85fb48-537f-11ed-a3b6-dac502259ad0.png

程序 Flash和 數據Flash的空間分別是 0x0000-0x7FFFF(512k, bank0) 和0x10000000-0x10010000 (64k flexNVM, bank1) 。程序Flash 可以用來存儲代碼和數據,FlexNVM是非易失性的存儲器,可以執行程序代碼,保存數據或者備份的 EEPROM數據。

> 解決方案:
- 替代 Flash 驅動,從v2.1.0 更換到 v2.3.1,如下是 v2.3.1的 Flash驅動。

bfbd747e-537f-11ed-a3b6-dac502259ad0.png

- 應用強制寫模式
LMEM->PCCCR |= LMEM_PCCCR_INVW1_MASK | LMEM_PCCCR_INVW0_MASK | LMEM_PCCCR_PCCR2_MASK |LMEM_PCCCR_PCCR3_MASK;

當使用以下代碼使緩存無效后讀取FlexNVM區域時,沒有出現讀取失敗現象。如下是解決方案:

> Cache Invalidate 方法


// 寫數據到FlexNVM
/* Enables the processor code bus to invalidate all lines in both ways.
and Initiate the processor code bus code cache command. */
LMEM->PCCCR |= LMEM_PCCCR_INVW0_MASK | LMEM_PCCCR_INVW1_MASK | LMEM_PCCCR_GO_MASK;
/* Wait until the cache command completes. */
while ((LMEM->PCCCR & LMEM_PCCCR_GO_MASK) != 0U)
{
}
/* As a precaution clear the bits to avoid inadvertently re-running this command. */
LMEM->PCCCR &= ~(LMEM_PCCCR_INVW0_MASK | LMEM_PCCCR_INVW1_MASK);
// 從 FlexNVM 讀取數據

為什么應用緩存失效后讀取失敗會消失?緩存無效清除了讀取失敗現象。但這似乎不是一個解決方案。根本原因是cache 是使能的,但是 FlexNVM 在 write-through 模式下不能工作。數據不會寫入目標地址,而是寫入高速緩存,讀取的數據從高速緩存中讀取,因此讀取的數據和寫入的數據可能不同。根據修改后的SDK FlexNVM示例復制了問題,發現有兩種方法可以解決問題:

1) 在SystemInit 函數中禁止 Cache功能

void SystemInit (void) {
#if ((__FPU_PRESENT == 1) && (__FPU_USED == 1))
SCB->CPACR |= ((3UL << 10*2) | (3UL << 11*2)); /* set CP10, CP11 Full Access */
#endif /* ((__FPU_PRESENT == 1) && (__FPU_USED == 1)) */

#if (DISABLE_WDOG)
WDOG->CNT = WDOG_UPDATE_KEY;
WDOG->TOVAL = 0xFFFF;
WDOG->CS = (uint32_t) ((WDOG->CS) & ~WDOG_CS_EN_MASK) | WDOG_CS_UPDATE_MASK;
#endif /* (DISABLE_WDOG) */

/* Initialize Cache */
/* Enable Code Bus Cache */
/* set command to invalidate all ways, enable write buffer
and write GO bit to initiate command */
// LMEM->PCCCR |= LMEM_PCCCR_INVW1_MASK | LMEM_PCCCR_INVW0_MASK;
// LMEM->PCCCR |= LMEM_PCCCR_GO_MASK;
// /* Wait until the command completes */
// while (LMEM->PCCCR & LMEM_PCCCR_GO_MASK) {
// }
// /* Enable cache, enable write buffer */
// LMEM->PCCCR |= (LMEM_PCCCR_ENWRBUF_MASK | LMEM_PCCCR_ENCACHE_MASK);
__ISB();

}

2) 在 LMEM_PCCCR 寄存器中使能 PCCR3 和 PCCR2 位來為FlexNVM啟用強制寫入模式。

LMEM->PCCCR |= LMEM_PCCCR_INVW1_MASK | LMEM_PCCCR_INVW0_MASK | LMEM_PCCCR_PCCR2_MASK |LMEM_PCCCR_PCCR3_MASK;

上述兩種方法都可以解決讀失敗的問題。

審核編輯:湯梓紅

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

    關注

    30

    文章

    5042

    瀏覽量

    117806
  • FlaSh
    +關注

    關注

    10

    文章

    1551

    瀏覽量

    146729

原文標題:MKE14F512VLL16 FlexNVM 操作

文章出處:【微信號:嵌入式 MCU,微信公眾號:嵌入式 MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    STM32 FSMC操作SRAM的步驟簡析

    本次操作的SRAM的型號是IS62WV51216,是高速,8M位靜態SRAM。它采用ISSI(Intergrated Silicon Solution, Inc)公司的高性能CMOS技術,按照512K個字(16)位進行組織存儲單
    發表于 07-22 14:58 ?1190次閱讀
    STM32 FSMC<b class='flag-5'>操作</b>SRAM的<b class='flag-5'>步驟</b>簡析

    USBDMX-512說明書.pdf

    USBDMX-512說明書.pdf
    發表于 06-30 06:31

    搭建一個基于MicroCOS-II實時操作系統的簡單程序的步驟說明

    本帖最后由 eehome 于 2013-1-5 09:46 編輯 搭建一個基于MicroCOS-II實時操作系統的簡單程序的步驟說明
    發表于 08-17 10:26

    PIC16F877A在proteus中讀寫AT24C512

    此時把I2C DEBUGGER的SCL線連接到PIC16F877A和AT24C512的SCL線上,這樣PIC16F877A可以正常的寫AT24C512。當PIC
    發表于 12-30 16:09

    DDR2上512Mbit (32Mbit * 16) 是什么意思?

    一塊DDR2的說明寫的是512Mbit (32Mbit * 16) ,這個是什么意思?
    發表于 02-10 15:15

    PIC16F877A SD卡讀/寫低于512字節

    大家好,我是一個嵌入式編程初學者。我在SPICI模式下使用PIC16F87A和SD卡。我需要一個小小的說明。我得到的傳感器數據每秒80-100字節。我想把它存儲在SD卡中。有人能告訴我,我們能在單塊
    發表于 11-06 14:33

    廣州黃埔回收工廠電子呆料 收購手機CPU

    T245DGGR UCLAMP2511T.TCTNUC029LANERJP06F6043VBMA223NCP1117ST33T3GNJM2370U10-TE1-#ZZZBXR21V1412IL-0A-EBPAM2321-TDFN3X3-10BM02B-XASS-TF(LF)(SN)LS1043AXE7QQBXC7K
    發表于 08-11 16:46

    MK64FN1M0VLL12器件問題

    MK64FN1M0VLL12和MK64FN1M0VLL12R這顆料帶R和不帶有什么區別呢?
    發表于 09-15 20:46

    K100A萬能空調遙控器操作步驟使用說明

    K100A萬能空調遙控器操作步驟使用說明書 設置步驟 (一)手動設置
    發表于 08-01 16:35 ?1.8w次閱讀
    K100A萬能空調遙控器<b class='flag-5'>操作</b><b class='flag-5'>步驟</b>使用<b class='flag-5'>說明</b>書

    在AD16中利用IPC向導生成3D封裝以及STEP模型的操作步驟

    在Altium Designer 16中利用IPC向導生成3D封裝以及STEP模型的操作步驟
    發表于 12-10 16:59 ?0次下載

    mk60dn512vll10系統版原理圖

    mk60dn512vll10系統版原理圖
    發表于 02-29 14:51 ?0次下載

    鴻合大屏刷機簡易操作步驟

    鴻合大屏刷機簡易操作步驟
    發表于 09-05 09:31 ?377次下載
    鴻合大屏刷機簡易<b class='flag-5'>操作</b><b class='flag-5'>步驟</b>

    DMX512燈控臺使用說明書詳解

    DMX512燈控臺使用說明書詳解
    發表于 11-13 09:36 ?7.5w次閱讀

    MK64FX512VLL12微控制器的產品介紹

    MK64FX512VLL12是一款具有FPU的基于120MHz ARM? Cortex?-M4微控制器。K64產品系列成員專為低功耗、USB/以太網連接以及需要高達256KB嵌入式SRAM的成本敏感型應用而設計。這些設備共享 Kinetis系列的廣泛支持和可擴展性。
    發表于 11-30 17:27 ?1010次閱讀
    MK64FX<b class='flag-5'>512VLL</b>12微控制器的產品介紹

    倒閘操作的基本步驟

    一、正常情況倒閘操作的基本步驟 1、接受任務 當系統調度員下達操作任務時,操作前,預先用電話或傳真將操作票(包括
    的頭像 發表于 09-22 11:35 ?4682次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>