CH59X/CH58X/CH57X 片上flash的使用
以CH592F为例;在使用时先看手册对code和data区的划分

一、DataFlash的读写的操作
先看几个操作dataflash的API(读擦写);
/**
* @brief read Data-Flash data block
*
* @param StartAddr - Address of the data to be read.//要读取的数据的地址,传入的的地址是相对地址所以0是dataflash,0对应dataflash的起始地址
* @param Buffer - Pointer to the buffer where data should be stored, Must be aligned to 4 bytes.定义的buffer需要四字节对齐,读的时候可以进行单字节读
* @param Length - Size of data to be read, in bytes.
*
* @return 0-SUCCESS (!0)-FAILURE
*/
#define EEPROM_READ(StartAddr,Buffer,Length) FLASH_EEPROM_CMD( CMD_EEPROM_READ, StartAddr, Buffer, Length ) /**
*
* @param StartAddr - Address of the data to be erased. 擦除这里是256高位对其,即你擦除了257字节,实际上擦除的是512;擦除后的地址区域EEPROM_READ读出来的值是0xff
* @param Length - Size of data to be erased, in bytes. * * @return 0-SUCCESS (!0)-FAILURE */ 传入地址是相对地址,0是起始地址
#define EEPROM_ERASE(StartAddr,Length) FLASH_EEPROM_CMD( CMD_EEPROM_ERASE, StartAddr, NULL, Length )
/** * @brief write Data-Flash data block *
* @param StartAddr - Address of the data to be written.写这里需要写入的是指针数据,可以进行单字节写,数据是需要在RAM里的。传入地址是相对地址,0是起始地址
* @param Buffer - Pointer to the source buffer, Must be aligned to 4 bytes.
* @param Length - Size of data to be written, in bytes.
*
* @return 0-SUCCESS (!0)-FAILURE */
#define EEPROM_WRITE(StartAddr,Buffer,Length) FLASH_EEPROM_CMD( CMD_EEPROM_WRITE, StartAddr, Buffer, Length )
使用实例:
EEPROM_ERASE(0, 256*2);
EEPROM_WRITE(0, TestBuf, 500);
EEPROM_READ(0, TestBuf, 500);
二、CodeFlash的的操作:
codeflash的读写校验:
//codeflash的读的地址位绝对地址,可进行单字节进行读取
void FLASH_ROM_READ(uint32_t StartAddr, void *Buffer, uint32_t len)
//这里的buffer是需要写入的指针数据,需要进行4字节对齐,数据长度要是4的倍数,数据需要在RAM里面
FLASH_ROM_WRITE(StartAddr,Buffer,Length)
//codeflash的擦的地址是绝对地址,擦除是4k对齐,假如你擦除4097字节实际上擦出的是8192字节;
FLASH_ROM_ERASE(StartAddr,Length)
FLASH_ROM_VERIFY(StartAddr,Buffer,Length)
使用示例:
FLASH_ROM_ERASE(20 * 1024, 4096);
FLASH_ROM_WRITE(20 * 1024, TestBuf, 128);
FLASH_ROM_READ(20 * 1024, TestBuf, 128);
三、修改用户配置值
//需在调用用户配置字生效函数后生效,且每次烧录后只能修改一次(使用该函数,必须使用官方提供的.S文件,同时调用该函数后,两次上电后,两线调试接口默认关闭)
RESET_EN - 外部复位引脚使能
BOOT_PIN - ENABLE-使用默认boot脚-PB22,DISABLE-使用boot脚-PB11
UART_NO_KEY_EN - 串口免按键下载使能
FLASHProt_Size - 写保护大小(单位4K)
uint8_t UserOptionByteConfig(FunctionalState RESET_EN, FunctionalState BOOT_PIN, FunctionalState UART_NO_KEY_EN, uint32_t FLASHProt_Size)
关闭两线仿真接口
uint8_t UserOptionByteClose_SWD(void)
注意事项:
1.无论的CodeFlash写操作,还是DataFlash的写操作,其传入的源数据指针只支持在RAM中,而不支持在flash中,否则即使,写操作返回成功,仍然会写失败。
2.CodeFlash读操作是有硬件加扰的,也就是擦除后读不是全FF,而是四个固定字节的循环,DataFlash读操作没有硬件加扰。
3.CodeFlash和DataFlash都可以直接指针读数据(指针读经过硬件加扰)。
4.DataFlash写之前也是需要先擦再写的
CH59X/CH58X/CH57X 片上flash的使用的更多相关文章
- STM32F412应用开发笔记之六:使用片上Flash存储参数
我们的项目中需要保存一些系统配置参数,这些数据的特点是:数量少而且不需要经常修改,但又不能定义为常量,因为每台设备可能不一样而且在以后还有修改的可能.这就需要考虑这些参数保存的问题.将这类数据存在指定 ...
- STM32片上Flash内存映射、页面大小、寄存器映射
STM32片上Flash内存映射.页面大小.寄存器映射 STM32有4种Flash module organization,分别是:low-density devices(32KB,1KB/page) ...
- 转载-STM32片上FLASH内存映射、页面大小、寄存器映射
原文地址:http://blog.chinaunix.net/uid-20617446-id-3847242.html 本文以STM32F103RBT6为例介绍了片上Flash(Embedded Fl ...
- CH58X/CH57X/V208 Observer(观察者)例程讨论讲解
使用的是沁恒的CH582M的Observer例程与官方的demo板. 本例程的功能是主机扫描到从机的MAC地址并打印出来. 先对宏定义进行理解讨论. 最大响应扫描数为8,在串口调试助手那里可以看到打印 ...
- 嵌入在网页上Flash媒体播放器(1)
做的项目,在不久的将来相关的Flash玩家使用,需要播放视频的网页上,不同的视频资源,需要不同的球员.基于使用稳定性.的嵌入式和嵌入式复杂性能的优点概括起来有两种方式(不同的玩家),视频资源也略有不同 ...
- CH58X/CH57X/V208的Broadcaster(广播者)例程讲解
在对ble进行应用的时候,每个用户的需求可能不尽相同.这里着重介绍从机Broadcaster例程,只广播不连接. 使用该例程时可以在手机使用APP上对Broadcaster进行调试. 安卓端在应用市场 ...
- STM32:片上Flash 操作
之前IAP时候记录过一些,今天对特定地方写又加深了印象,写与擦除都需要先unclock //读取指定地址的半字(16位数据) //faddr:读地址(此地址必须为2的倍数!!) //返回值:对应数据. ...
- STM32片上Flash容量大小命名规则
- Flash动画
Flash (交互式矢量图和Web动画标准) Flash是由macromedia公司推出的交互式矢量图和 Web 动画的标准,由Adobe公 司收购.做Flash动画的人被称之为闪客.网页设计者使用 ...
- 智能设备逆向工程之外部Flash读取与分析篇
智能设备逆向工程之外部Flash读取与分析篇 唐朝实验室 · 2015/10/19 11:19 author: rayxcp 0x00 前言 目前智能家居设备的种类很多,本文内容以某智能豆浆机为例完成 ...
随机推荐
- 深度学习基础课:“判断性别”Demo需求分析和初步设计(下2)
大家好~我开设了"深度学习基础班"的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序 线上课程资料: 本节课录像回放1 本节课录像回 ...
- webpack4.0+简要
一.webpack简介 webpack 是当下十分流行的一款静态模块打包工具,将JS.CSS.HTML.图片等各种静态资源视为一个个模块,通过一个或者多个入口文件通过解析依赖关系生成一个依赖图,最终打 ...
- spring启动流程 (3) BeanDefinition详解
BeanDefinition在Spring初始化阶段保存Bean的元数据信息,包括Class名称.Scope.构造方法参数.属性值等信息,本文将介绍一下BeanDefinition接口.重要的实现类, ...
- 【收集】C & C++
序 链接 备注 1 C语言0长度数组(可变数组/柔性数组)详解_CHENG Jian的博客-CSDN博客_0数组 2 C 语言参考 | Microsoft Learn 3 C++ 语言参考 | ...
- ONVIF网络摄像头(IPC)客户端开发—RTSP RTCP RTP加载H264视频流
前言: RTSP,RTCP,RTP一般是一起使用,在FFmpeg和live555这些库中,它们为了更好的适用性,所以实现起来非常复杂,直接查看FFmpeg和Live555源代码来熟悉这些协议非常吃力, ...
- 一个监控数据的思考-sockets_used
一个监控数据的思考-sockets_used 背景 最近跟踪一个项目问题. Grafana的监控了里面有一个tcp的使用监控 CurrEstab 的数据量是: 700-2000 左右 但是同时有一个非 ...
- [转帖]Use TiFlash
https://docs.pingcap.com/tidb/v5.0/use-tiflash 8 Contributors After TiFlash is deployed, data replic ...
- [转帖]TiFlash 面向编译器的自动向量化加速
作者:朱一帆 目录 SIMD 介绍 SIMD 函数派发方案 面向编译器的优化 SIMD 介绍 SIMD 是重要的重要的程序加速手段.CMU DB 组在 Advanced Database Syst ...
- [转帖]TiDB BR 备份至 MinIO S3 实战
https://tidb.net/blog/3a31d41d#3.%E9%83%A8%E7%BD%B2%20MinIO%20S3%20%E5%8F%8A%E5%A4%87%E4%BB%BD%E6%81 ...
- [转帖]Springboot配置kafka用户名密码
华为云开发者联盟 Springboot配置kafka用户名密码 Springboot配置kafka用户名密码 SpringBoot配置kafka用户名密码 Springboot配置kafka用户名密码 ...