首页 > 其他分享 >FLASH-CH32x芯片FLASH读写保护解析

FLASH-CH32x芯片FLASH读写保护解析

时间:2023-06-16 14:34:13浏览次数:43  
标签:编程 字节 读写 FLASH 保护 擦除 设置 CH32x

一、flash的操作流程

1、解锁

芯片复位后默认会给控制寄存器FLASH_CTRL上锁,这个时候不允许设置FLASH的控制寄存器,从而不能修改FLASH的内容。所以每次对FLASH写入数据前,都需要先给它解锁。

2、擦除

擦除有几种方式:页擦除(256字节、32K、64K)、标准擦除(4K)、全擦,不同擦除方式擦除flash区域大小不一致。擦除完成后FLASH默认字节不同芯片型号也有所区别。

举例:CH32V003系列、CH32F103系列、CH32V103系列默认FLASH字节为0xFFFF,CH32V20x系列、CH32V30x系列、CH32F20x系列FLASH默认字节是0xE339。

3、编程

编程方式分为2字节标准编程和FLASH快速编程。快速编程不同芯片型号编程扇区大小有区别。

举例:CH32V003系列快速页编程为64字节、CH32FV103系列快速页编程为128字节、CH32FV20x、CH32V30x系列芯片快速页编程为256字节。

 

二、读保护设置

当把RDP配置成除0xA5外的其他数据,此时使能读保护。使用调试功能(下载器、仿真器)或者从内部SRAM自举时都不能对内部FLASH作任何访问(读写、擦除都被禁止);而如果从内部FLASH自举时,允许对内部FLASH的任意访问。如果通过下载器对芯片设置读保护,需要对芯片重新上电才能设置成功且代码正常运行。如果通过软件设置读保护,需要执行软件复位后才能设置成功。

/*设置读保护代码*/

FLASH_Unlock();//Flash解锁
FLASH_ReadOutProtection(ENABLE);//设置读保护
stats = FLASH_GetReadOutProtectionStatus();//获取芯片读保护状态
NVIC_SystemReset();//执行软件复位

另外需要注意的是,当设置成读保护时,FLASH的前4K字节的空间会强制加上写保护。即使从FLASH启动的程序,也无法擦写这4K字节空间的内容。(应该是针对IAP功能来设置的)

当解除读保护后(RDP配置成0xA5),芯片会自动触发解除主FLASH存储器的全部内容。

 

三、写保护设置

 

将对应WRP位置0即可把它匹配的空间加入写保护。每个WRP位对应4K字节。被设置成写保护后,主FLASH的内容使用任何方式都不能被擦除或者写入,但写保护设置不会影响读保护权限。

解除写保护是逆过程,把对应WRP位置1即可把它匹配的空间解除写保护。

解除写保护后,主FLASH中的内容不会像读保护那样丢失,会原样保留。

标签:编程,字节,读写,FLASH,保护,擦除,设置,CH32x
From: https://www.cnblogs.com/wchmcu/p/17485440.html

相关文章

  • 基于中间件实现MySQL读写分离
    1.场景在数据库读多写少的时候2.读写分离只在主服务器上写,只在从服务器上读。使用amoeba中间件3.部署3.1Dockercompose一键部署Compose文件:version:'3.8'services:mysql_master:image:mysql:8.0.33-oracle......
  • CentOS搭建NFS服务、windows挂载权限问题; NFS读写缓慢调优
    CentOS搭建NFS服务、windows挂载权限问题CentOS和统信UOS(与ubuntu一样)命令不一样,但操作大同小异,参考如下:https://blog.csdn.net/wangzongyu/article/details/127009158 windows读写linux搭建的NFS内文件是比较慢,调优:https://blog.csdn.net/yysalad/article/details/11736623......
  • SpringBoot+druid+dynamic+clickhouse+mysql实现读写分离
    背景:clickhouse+mysql实现读写分离1.配置mysql2.安装clickhouse3.使用可视化工具连接clickhouse4.创建clickhouse的数据库并连接mysql5.SpringBoot+druid+dynamic配置多数据源实现读写分离一.背景由于系统数据量过大,查询条件自定义过多,mysql在查询时响应太慢,所以使用cli......
  • 读写分离原来如此简单
    一、为什么要用读写分离,有哪些使用场景?高并发读取场景:当应用程序有大量读取操作,但相对较少的写入操作时,使用读写分离可以将读取操作分散到多个从库,提高系统的读取性能和并发能力。数据报表和分析场景:在需要生成复杂报表或进行数据分析的场景中,读写分离可以将读取操作与写入操作分开......
  • 主从架构如何保证读写一致性(主从网络延迟)
    问题在高并发的场景下,一般是读写分离,写主库,读从库。但是主从同步存在延迟,原因可能有a.主库的从库太多b.从库硬件配置比主库差c.慢SQL语句过多d.主从库之间的网络延迟e.主库读写压力大如果数据写入主库之后还未来得及同步到从库,此时读从库就会读到脏数据解决方案1......
  • 用java做操作系统内核:软盘读写
    在前两节,我们将一段代码通过软盘加载到了系统内存中,并指示cpu执行加入到内存的代码,事实上,操作系统内核加载也是这么做的。只不过我们加载的代码,最大只能512byte,一个操作系统内核,少说也要几百兆,由此,系统内核不可能直接从软盘读入系统内存。通常的做法是,被加载进内存的512Byte程......
  • KeilMDK制作FlashDriver
    一、前言①在ECUOTA程序升级过程中,需要执行一段比较特殊的代码,这段代码实现对自身flash的擦除与写入,又称flashdriver;②为了安全的考虑,会尽可能的避免在代码中固化有对flash空间进行擦除或写入的操作,主要为了避免在程序跑飞时误调用该部分代码,使软件代码部分受到破坏;③在OTA开......
  • 野火STM32 读写内部FLASH
    解锁、上锁函数1voidFLASH_Unlock(void);2voidFLASH_Lock(void);擦除函数:1FLASH_StatusFLASH_ErasePage(uint32_tPage_Address);2FLASH_StatusFLASH_EraseAllPages(void);3FLASH_StatusFLASH_EraseOptionBytes(void);写入函数:1FLASH_StatusFLASH_Progra......
  • 使用Python读写文本文件内容
    本文主要演示如何读写文本文件的内容,以及上下文管理语句with的用法。使用上下文管理语句with时,即使在操作文件内容时引发异常也能保证文件被正确关闭。#'w'表示写入文件,默认为文本文件#如果文件test1.txt不存在,就创建#如果文件test1.txt已存在,就覆盖withopen('test1.txt','w')......
  • mycat读写分离方式下强制指定select从主库查数据的方法
    在程序代码的sql语句前,如mybatis中指定select前加入/mycat:db_type=master/这个注释标识,select语句就会直接在主库查询数据,如下:/mycat:db_type=master/SELECT*FROMtb_table;上面的注释中:/!mycat:db_type=master//#mycat:db_type=master//mycat:db_type=master/使用哪一......