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;

上述两种方法都可以解决读失败的问题。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5590

    浏览量

    129091
  • FlaSh
    +关注

    关注

    10

    文章

    1715

    浏览量

    154717

原文标题:MKE14F512VLL16 FlexNVM 操作

文章出处:【微信号:嵌入式 MCU,微信公众号:嵌入式 MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    PIC16F877A在proteus中读写AT24C512

    此时把I2C DEBUGGER的SCL线连接到PIC16F877A和AT24C512的SCL线上,这样PIC16F877A可以正常的写AT24C512。当PIC
    发表于 12-30 16:09

    PIC16F1933/PIC16F1934/PIC16F19

    本数据手册说明了PIC16F1933/PIC16F1934/PIC16F1936器件。该系列器件采用28/40/44 引脚封装。图1-1 给出了PIC
    发表于 01-16 14:48 34次下载

    PIC16F1937/PIC16F1938/PIC16F1939中文资料,pdf (8位CMOS闪存单片机)

    本数据手册说明了PIC16F1937/PIC16F1938/PIC16F1939 器件。该系列器件采用28/40/44 引脚封装。图1-1 给出了PIC
    发表于 01-16 14:50 1218次下载

    磊科 NSW1924F说明书,用户手册 (设置配置步骤)

    磊科 NSW1924F说明书,用户手册 (设置配置步骤)
    发表于 02-10 09:24 17次下载

    ICOM F16 F26对讲机电脑软件操作指南

    ICOM F16 F26对讲机电脑软件操作指南 ICOM 的F16?F26的软件操作和ICOM的F21的
    发表于 02-07 11:33 7264次阅读

    mk60dn512vll10系统版原理图

    mk60dn512vll10系统版原理图
    发表于 02-29 14:51 0次下载

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

    C 示例_ MSP430x13x MSP430F14x MSP430F15x MSP430F16x
    发表于 07-12 11:54 17次下载

    MSP430x13x,MSP430F14x,MSP430F15x,MSP430F16x 示例代码

    MSP430x13x,MSP430F14x,MSP430F15x,MSP430F16x 示例代码
    发表于 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位闪存单片机.
    发表于 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安全微

    电子发烧友网为你提供(ti)ST32F512M相关产品参数、数据手册,更有ST32F512M的引脚图、接线图、封装手册、中文资料、英文资料,ST32F512M真值表,ST32F512M
    发表于 05-20 22:05

    MK64FX512VLL12微控制器的产品介绍

    MK64FX512VLL12是一款具有FPU的基于120MHz ARM® Cortex®-M4微控制器。K64产品系列成员专为低功耗、USB/以太网连接以及需要高达256KB嵌入式SRAM的成本敏感型应用而设计。这些设备共享 Kinetis系列的广泛支持和可扩展性。
    发表于 11-30 17:27 1806次阅读
    MK64FX<b class='flag-5'>512VLL</b>12微控制器的产品介绍

    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)
    发表于 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外设闪烁的快慢以及对应代码的讲解。
    的头像 发表于 04-21 11:29 5063次阅读
    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)
    发表于 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用户手册

    电子发烧友网站提供《16位单片机 RL78/ F13, F14用户手册.pdf》资料免费下载
    发表于 01-23 09:48 18次下载