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 前言 目前智能家居设备的种类很多,本文内容以某智能豆浆机为例完成 ...
随机推荐
- 1 Englishi 词根
1 ab 离去,相反, 不 (负能量的) abnormal abuse 2 anti 反对,相反 antiwar antiaging antiforeign antinoise 3 co-/col ...
- poj 3246 简单线段树
线段树还真有点难写... #include <iostream> #include <cstdio> #include <cstring> #include < ...
- 05_删除链表的倒数第N个节点
删除链表的倒数第N个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: ...
- Redis 缓存常见问题
本文为博主原创,未经允许不得转载: 目录: 1. 缓存穿透 1.1 出现原因 1.2 解决方案 1.3 布隆过滤器 2. 缓存雪崩 3. 缓存失效(缓存击穿,热点缓存) 1. 缓存穿透: 缓存穿透是指 ...
- SV OOP-1
内容 面向对象编程 面向对象的基本概念 对象没有办法直接操作,需要通过handle(指向对象的指针)进行操作 面向对象的基本术语 面向对象的优势 类的定义 实例化对象 new() - 产生具体对象,开 ...
- SD-Host控制器设计架构
SD Host功能列表 SD Host挂接在SoC中,与外部的SD card进行交互 有控制寄存器和状态寄存器,SoC往往有CPU,通过CPU进行配置寄存器,有些SoC没有CPU,需要使用I2C或者S ...
- 【ArgParse】一个开源的入参解析库
项目地址:argtable3 本地验证: 编译构建 新增验证 // examples/skull.c #include "argtable3.h" int main(int arg ...
- [转帖]linux按行读取 (while read line与for-loop)
https://cloud.tencent.com/developer/article/1655435 在linux下一般用while read line与for循环按行读取文件.现有如下test.t ...
- [转帖]jmeter线程组与循环次数的区别
在压测的时候,有些接口需要携带登录信息,但是我们只想登录一次,然后其他接口进行多用户压测,此时你会怎么办?用仅一次控制器实现吗?下面我们来看看用仅一次控制器能不能实现 压测时jmeter中的线程数是模 ...
- [转帖]Linux使用Stress-ng测试CPU、内存、磁盘I/O满载情况教程与范例
https://www.xiaoyuanjiu.com/108301.html 介绍如何在 Linux 系统上使用 stress-ng 负载测试工具,产生 CPU.内存等资源满载的状况. stress ...