FLASH-CH32x芯片FLASH读写保护解析
一、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中的内容不会像读保护那样丢失,会原样保留。