以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的使用的更多相关文章

  1. STM32F412应用开发笔记之六:使用片上Flash存储参数

    我们的项目中需要保存一些系统配置参数,这些数据的特点是:数量少而且不需要经常修改,但又不能定义为常量,因为每台设备可能不一样而且在以后还有修改的可能.这就需要考虑这些参数保存的问题.将这类数据存在指定 ...

  2. STM32片上Flash内存映射、页面大小、寄存器映射

    STM32片上Flash内存映射.页面大小.寄存器映射 STM32有4种Flash module organization,分别是:low-density devices(32KB,1KB/page) ...

  3. 转载-STM32片上FLASH内存映射、页面大小、寄存器映射

    原文地址:http://blog.chinaunix.net/uid-20617446-id-3847242.html 本文以STM32F103RBT6为例介绍了片上Flash(Embedded Fl ...

  4. CH58X/CH57X/V208 Observer(观察者)例程讨论讲解

    使用的是沁恒的CH582M的Observer例程与官方的demo板. 本例程的功能是主机扫描到从机的MAC地址并打印出来. 先对宏定义进行理解讨论. 最大响应扫描数为8,在串口调试助手那里可以看到打印 ...

  5. 嵌入在网页上Flash媒体播放器(1)

    做的项目,在不久的将来相关的Flash玩家使用,需要播放视频的网页上,不同的视频资源,需要不同的球员.基于使用稳定性.的嵌入式和嵌入式复杂性能的优点概括起来有两种方式(不同的玩家),视频资源也略有不同 ...

  6. CH58X/CH57X/V208的Broadcaster(广播者)例程讲解

    在对ble进行应用的时候,每个用户的需求可能不尽相同.这里着重介绍从机Broadcaster例程,只广播不连接. 使用该例程时可以在手机使用APP上对Broadcaster进行调试. 安卓端在应用市场 ...

  7. STM32:片上Flash 操作

    之前IAP时候记录过一些,今天对特定地方写又加深了印象,写与擦除都需要先unclock //读取指定地址的半字(16位数据) //faddr:读地址(此地址必须为2的倍数!!) //返回值:对应数据. ...

  8. STM32片上Flash容量大小命名规则

  9. Flash动画

    Flash (交互式矢量图和Web动画标准) Flash是由macromedia公司推出的交互式矢量图和 Web 动画的标准,由Adobe公 司收购.做Flash动画的人被称之为闪客.网页设计者使用 ...

  10. 智能设备逆向工程之外部Flash读取与分析篇

    智能设备逆向工程之外部Flash读取与分析篇 唐朝实验室 · 2015/10/19 11:19 author: rayxcp 0x00 前言 目前智能家居设备的种类很多,本文内容以某智能豆浆机为例完成 ...

随机推荐

  1. 3 Englishi 词根

    1 -able 能..的:具有...性质的 useable moveable adaptable 2 -al  具有...性质的; 属于...的 personal natural regional - ...

  2. python常见面试题讲解(四)字符串分隔

    题目描述 •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于10 ...

  3. 分享一个在线二维码生成器(基于qrcode.js开发)

    一种二维码扫描与生成的工具, 它可生成个性化二维码, 支持文本.网址.图片.短信.电话等格式及主题,提供融合码功能 演示地址 https://qrcode.gitapp.cn 关键代码 var qrc ...

  4. Hive(3)-Hive数据类型

    1. 基本数据类型 对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数 Hive数据类型 ...

  5. Java中内存四区

    这里简要说明这四个区域通常用于存储的变量类型: 栈区(Stack): 存放局部变量.方法参数.返回地址等. 变量的生命周期与其所在的方法(函数)的调用周期一致. 堆区(Heap): 主要用于动态分配内 ...

  6. js jquery - 获取元素(父节点,子节点,兄弟节点),元素筛选 (转载)

    一 ,  js 获取元素(父节点,子节点,兄弟节点) var test = document.getElementById("test"); var parent = test.p ...

  7. JMS微服务远程调用性能测试 vs .Net Core gRPC服务

    gRPC性能测试(.net 5) 创建一个最简单的gRPC服务,服务器代码如下: using Grpc.Core; using Microsoft.Extensions.Logging; using ...

  8. [转帖]linux设置page cache大小,Linux Page Cache调优在Kafka中的应用

    本文首发于 vivo互联网技术 微信公众号 链接: 作者:Yang Yijun 本文主要描述Linux Page Cache优化的背景.Page Cache的基本概念.列举之前针对Kafka的 IO ...

  9. [转帖]快速定位MySQL数据库当前消耗CPU最高的sql语句

    概述 One of our customers recently asked whether it is possible to identify, from the MySQL side, the ...

  10. ARMv8.0下duckdb的安装与编译过程-解决 Failed to allocate block of 2048 bytes

    ARMv8.0下duckdb的安装与编译过程-解决 Failed to allocate block of 2048 bytes 背景 duckdb 是一个很流行的单机版数据库引擎 同事下载了相关的预 ...