华大flash EFM使用(一)

2024-08-25 19:36
文章标签 使用 flash 华大 efm

本文主要是介绍华大flash EFM使用(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1,嵌入式 Flash 具有三个主接口:
· 64 ITCM 接口:
该接口连接 Cortex-M7 ITCM 总线,用于指令执行以及数据读访问。
– ITCM 接口不支持写访问。
支持 64 个标准化缓存行, 256 位宽( ART 加速器)。
· 64 AHB 接口:
该接口通过 AHB 总线矩阵连接 Cortex-M7 AXI 总线,用于代码执行以及读写
访问。
无论寻址的 Flash 接口是 TCM 还是 AHBFlash 上的 DMA 和外设 DMA 数据传输
均通过 AHB 接口完成。
· 32 AHB 寄存器接口:
用于访问控制寄存器和状态寄存器。 

 2,Flash 中断
如果将 FLASH_CR 寄存器中的操作结束中断使能位 (EOPIE) 1,则在擦除或编程操作结
束时,即 FLASH_SR 寄存器中的繁忙位 (BSY) 清零(操作成功完成或未成功完成)时,将
产生中断。此时, FLASH_SR 寄存器中的操作结束 (EOP) 位置 1
如果在请求编程、擦除或读操作期间出现错误,则 FLASH_SR 寄存器中的以下错误标志位之
一将置 1
· PGAERRPGPERRERSERR(编程错误标志)
· WRPERR(保护错误标志)
这种情况下, FLASH_CR 寄存器中的错误中断使能位 (ERRIE) 1,并且如果 FLASH_SR
寄存器中的操作错误位 (OPERR) 1,则将产生一个中断。

3,FLASH 具有以下主要特性:
容量高达 2Mbytes,由两块 1Mbytes 的 FLASH 构成,共 256 个扇区,每个扇区为
8Kbytes。 块 0 中扇区 0~扇区 15 为可配置为 OTP 区域。
OTP(One Time Program)区域共 134KBytes, 其中 128Kbytes 配置在块 0 地址
0x0000_0000~0x0001_FFFF, 6Kbytes 配置在地址 0x0300_0000~0x0300_17FF。地址
0x0300_1800~0x0300_1AD7 为 OTP 数据锁存区。
 128 位宽数据读取,读缓存 128 位宽缓冲,加速代码执行。
编程单位为 4bytes,擦除单位为 8Kbytes。

 4,flash编程常用接口举例读写说明:
单次编程无回读功能
单编程无回读模式设定步骤如下:
1) 解除 FLASH 的寄存器写保护。 (EFM_FAPRT 先写 0x0123, 再写 0x3210)
2) 解除 EFM_KEY1 锁定。 (EFM_KEY1 先写 0x01234567, 再写 0xFEDCBA98)
3) 设定单次编程模式。 (EFM_FWMC.PEMODE[2:0]=001)
4) 解除写保护。 (EFM_ F0/1NWPRTx(x=0~3)对应位设定为 1)
5) 对编程地址写入 32 位数据
6) 等待 FLASH 处于空闲状态。 (EFM_FSR.RDY0/1=1)
7) 判断编程自读取结果标志位。 (EFM_FSR.MISMTCH0/1)
如为 0,则表示编程成功;为 1 表示该 FLASH 地址已遭破坏,永久废弃。
8) 清除编程结束标志位。 (EFM_FSR.OPTEND0/1)
对 已 锁 存 的 OTP 地 址 发 行 单 编 程 回 读 写 操 作 , 编 程 不 成 功 , 标 志 位
EFM_FSR.OTPWERR0 置位。

a,解除 FLASH 的寄存器写保护

__STATIC_INLINE void EFM_REG_Lock(void);

 b,解除 EFM_KEY1 锁定

void EFM_FWMC_Cmd(en_functional_state_t enNewState)
{
    DDL_ASSERT(IS_FUNCTIONAL_STATE(enNewState));

    if (ENABLE == enNewState) {
        WRITE_REG32(CM_EFM->KEY1, 0x01234567UL);
        WRITE_REG32(CM_EFM->KEY1, 0xFEDCBA98UL);
    } else {
        SET_REG32_BIT(CM_EFM->FWMC, EFM_FWMC_KEY1LOCK);
    }
}

调用:EFM_FWMC_Cmd(ENABLE);

c,解除写保护

void EFM_SequenceSectorOperateCmd(uint32_t u32StartSectorNum, uint16_t u16Count, en_functional_state_t enNewState)

解除从u32StartSectorNum开始的u16Count个sector的写保护锁。

调用:EFM_SequenceSectorOperateCmd(0, 256U, ENABLE);

也有单个的解保护锁:

void EFM_SingleSectorOperateCmd(uint8_t u8SectorNum, en_functional_state_t enNewState) 

d,单个数据的写入

int32_t EFM_SingleProgram(uint32_t u32Addr, uint32_t u32Data)

批量数据的写入:

int32_t EFM_Program(uint32_t u32Addr, uint8_t *pu8Buf, uint32_t u32Len)

int32_t EFM_SequenceProgram(uint32_t  u32Addr,  uint32_t  u32Len,   const uint32_t *  pu32Buf)

e,写完后带回读校验,看返回值推测校验结果

不带校验的读:

int32_t EFM_ReadByte(uint32_t u32Addr, uint8_t *pu8ReadBuf, uint32_t u32ByteLen)

待校验的读:

int32_t EFM_ProgramWordReadBack(uint32_t u32Addr, uint32_t u32Data)

 f, 等待 FLASH 处于空闲状态

#define SET 1 

do {
        flag1 = EFM_GetStatus(EFM_FLAG_RDY);
        flag2 = EFM_GetStatus(EFM_FLAG_RDY1);
    } while ((SET != flag1) || (SET != flag2));

g, 清除编程结束标志位

EFM_SequenceSectorOperateCmd(0, 256U, DISABLE);

EFM_FWMC_Cmd(DISABLE);

__STATIC_INLINE void EFM_REG_UNLock(void);

 单编程回读功能:判断编程自读取结果标志位。 (EFM_FSR.MISMTCH0/1)
如为 0,则表示编程成功;为 1 表示该 FLASH 地址已遭破坏,永久废弃

5,擦除功能
对 FLASH 进行扇区擦除操作后,该扇区内地址(8KBytes 空间)数据刷新为全 1。扇区擦
除操作设定步骤如下:
1) 解除 FLASH 的寄存器写保护(EFM_FAPRT 先写 0x0123, 再写 0x3210)。
2) 解除 EFM_KEY1 锁定。 (EFM_KEY1 先写 0x01234567, 再写 0xFEDCBA98)
3) 设定擦除模式(EFM_FWMC.PEMOD[2:0]=100)。
4) 解除写保护。 (EFM_ F0/1NWPRTx(x=0~3)对应位设定为 1)
5) 对需要擦除扇区内的任意地址(地址需以 4 对齐)写入 32 位任意值。
6) 等待 FLASH 处于空闲状态。 (EFM_FSR.RDY0/1=1)
7) 清除擦除结束标志位。 (EFM_FSR.OPTEND0/1)
对已锁存的 OTP 地址发行擦除操作,擦除不成功, OTP 区域数据保留,标志位
EFM_FSR.OTPWERR0 置位。

获取块的基地址:
#define SECTOR_SIZE (0x2000UL)
#define SECTOR_ADDR(X)  (uint32_t)(SECTOR_SIZE *(x))

en_result_t EFM_SectorErase(uint32_t u32Addr);

这篇关于华大flash EFM使用(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106464

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念