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

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

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

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 : 讀失敗/寫入的數(shù)據(jù)不能讀出
- Erase -> Read :擦除前的數(shù)據(jù)被讀出
- Erase -> Write(8Byte) ->延遲或者復(fù)位-> Read :讀取成功

FlexNVM 直接讀取失敗,當(dāng)寫入數(shù)據(jù)到 FlexNVM后,執(zhí)行延遲或者復(fù)位操作,可以正確的讀取到寫入的數(shù)據(jù)。MKE14F 推測預(yù)取緩沖區(qū)相關(guān)的函數(shù):

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

Flash_cache_clear_process與mscm_flash_prefetch_speculation_enable

解答:

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

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

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

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

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

- 應(yīng)用強制寫模式
LMEM->PCCCR |= LMEM_PCCCR_INVW1_MASK | LMEM_PCCCR_INVW0_MASK | LMEM_PCCCR_PCCR2_MASK |LMEM_PCCCR_PCCR3_MASK;

當(dāng)使用以下代碼使緩存無效后讀取FlexNVM區(qū)域時,沒有出現(xiàn)讀取失敗現(xiàn)象。如下是解決方案:

> Cache Invalidate 方法


// 寫數(shù)據(jù)到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 讀取數(shù)據(jù)

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

1) 在SystemInit 函數(shù)中禁止 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;

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

審核編輯:湯梓紅

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

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119816
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1614

    瀏覽量

    147655

原文標(biāo)題:MKE14F512VLL16 FlexNVM 操作

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

收藏 人收藏

    評論

    相關(guān)推薦

    PIC16F877A在proteus中讀寫AT24C512

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

    PIC16F1933/PIC16F1934/PIC16F19

    本數(shù)據(jù)手冊說明了PIC16F1933/PIC16F1934/PIC16F1936器件。該系列器件采用28/40/44 引腳封裝。圖1-1 給出了PIC
    發(fā)表于 01-16 14:48 ?34次下載

    PIC16F1937/PIC16F1938/PIC16F1939中文資料,pdf (8位CMOS閃存單片機)

    本數(shù)據(jù)手冊說明了PIC16F1937/PIC16F1938/PIC16F1939 器件。該系列器件采用28/40/44 引腳封裝。圖1-1 給出了PIC
    發(fā)表于 01-16 14:50 ?1211次下載

    磊科 NSW1924F說明書,用戶手冊 (設(shè)置配置步驟)

    磊科 NSW1924F說明書,用戶手冊 (設(shè)置配置步驟)
    發(fā)表于 02-10 09:24 ?17次下載

    ICOM F16 F26對講機電腦軟件操作指南

    ICOM F16 F26對講機電腦軟件操作指南 ICOM 的F16?F26的軟件操作和ICOM的F21的
    發(fā)表于 02-07 11:33 ?6561次閱讀

    mk60dn512vll10系統(tǒng)版原理圖

    mk60dn512vll10系統(tǒng)版原理圖
    發(fā)表于 02-29 14:51 ?0次下載

    C示例_MSP430x13x,MSP430F14x,MSP430F15x,MSP430F16x.zip

    C 示例_ MSP430x13x MSP430F14x MSP430F15x MSP430F16x
    發(fā)表于 07-12 11:54 ?17次下載

    MSP430x13x,MSP430F14x,MSP430F15x,MSP430F16x 示例代碼

    MSP430x13x,MSP430F14x,MSP430F15x,MSP430F16x 示例代碼
    發(fā)表于 05-03 10:50 ?19次下載
    MSP430x13x,MSP430<b class='flag-5'>F14</b>x,MSP430<b class='flag-5'>F</b>15x,MSP430<b class='flag-5'>F16</b>x 示例代碼

    PIC12(L)F1612/16(L)F1613之8/14/16引腳8位閃存單片機

    本文主要介紹了PIC12(L)F1612/16(L)F1613之8/14/16引腳8位閃存單片機.
    發(fā)表于 06-27 02:25 ?8次下載
    PIC12(L)<b class='flag-5'>F</b>1612/<b class='flag-5'>16</b>(L)<b class='flag-5'>F</b>1613之8/<b class='flag-5'>14</b>/<b class='flag-5'>16</b>引腳8位閃存單片機

    ST32F512M ST32F512M對于M2M ST32安全微

    電子發(fā)燒友網(wǎng)為你提供(ti)ST32F512M相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有ST32F512M的引腳圖、接線圖、封裝手冊、中文資料、英文資料,ST32F512M真值表,ST32F512M
    發(fā)表于 05-20 22:05

    MK64FX512VLL12微控制器的產(chǎn)品介紹

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

    QB-F14T16-01 用戶手冊(14-Pin to 16-Pin Conversion Adapter for E1 Emulator)

    QB-F14T16-01 用戶手冊 (14-Pin to 16-Pin Conversion Adapter for E1 Emulator)
    發(fā)表于 04-10 19:10 ?0次下載
    QB-<b class='flag-5'>F14T16</b>-01 用戶手冊(<b class='flag-5'>14</b>-Pin to <b class='flag-5'>16</b>-Pin Conversion Adapter for E1 Emulator)

    STM32F4時鐘配置的操作步驟

    本文將介紹STM32F4時鐘配置的操作步驟、并對比時鐘配置前后LED外設(shè)閃爍的快慢以及對應(yīng)代碼的講解。
    的頭像 發(fā)表于 04-21 11:29 ?3434次閱讀
    STM32<b class='flag-5'>F</b>4時鐘配置的<b class='flag-5'>操作</b><b class='flag-5'>步驟</b>

    QB-F14T16-01 用戶手冊(14-Pin to 16-Pin Conversion Adapter for E1 Emulator)

    QB-F14T16-01 用戶手冊 (14-Pin to 16-Pin Conversion Adapter for E1 Emulator)
    發(fā)表于 07-17 18:43 ?0次下載
    QB-<b class='flag-5'>F14T16</b>-01 用戶手冊(<b class='flag-5'>14</b>-Pin to <b class='flag-5'>16</b>-Pin Conversion Adapter for E1 Emulator)

    16位單片機 RL78/ F13, F14用戶手冊

    電子發(fā)燒友網(wǎng)站提供《16位單片機 RL78/ F13, F14用戶手冊.pdf》資料免費下載
    發(fā)表于 01-23 09:48 ?15次下載