本帖最后由 guiyan 于 2024-9-23 09:46 编辑
前言
本文旨在介绍G32A FLASH模块的常用使用功能。
一、组成结构及其用途简介
组成结构:
- PFlash:Program flash, 8KB Sector
- CFGNVM :Configurable Nonvolatile memory , 4KB Sector。包含DFlash和EEPROM备份区。
- CFGRAM
用途简介:
PFlash:用来存储代码, 并包含16-byte 的Flash配置区域: 0x400 – 0x40F
DFlash :存储代码或者存储数据
EEPROM Backup:备份存储EEPROM的数据,掉电后不丢失
RAM:作为传统RAM使用,例如Program Section command 编程
EERAM:用作模拟EEPROM,用户可进行单字节读写
二、使用功能介绍 1.编程:通过指令的形式,对Flash模块进行擦除或编程
命令如下:*!
* [url=home.php?mod=space&uid=247401]@brief[/url] Operation Commands
*/
#define FTFx_VERIFY_BLOCK 0x00U
#define FTFx_VERIFY_SECTION 0x01U
#define FTFx_PROGRAM_CHECK 0x02U
#define FTFx_READ_RESOURCE 0x03U
#define FTFx_PROGRAM_LONGWORD 0x06U
#define FTFx_PROGRAM_PHRASE 0x07U
#define FTFx_ERASE_BLOCK 0x08U
#define FTFx_ERASE_SECTOR 0x09U
#define FTFx_PROGRAM_SECTION 0x0BU
#define FTFx_VERIFY_ALL_BLOCK 0x40U
#define FTFx_READ_ONCE 0x41U
#define FTFx_PROGRAM_ONCE 0x43U
#define FTFx_ERASE_ALL_BLOCK 0x44U
#define FTFx_SECURITY_BY_PASS 0x45U
#define FTFx_PFLASH_SWAP 0x46U
#define FTFx_ERASE_ALL_BLOCK_UNSECURE 0x49U
#define FTFx_PROGRAM_PARTITION 0x80U
#define FTFx_SET_EERAM 0x81U
2.只能在RUN模式下,才能进行Flash擦除或编程。而在HSRUN, VLPR模式下,只能读。
3.Flash配置区域
0x400~0x407:存储器8个字节的后门解密秘钥(backdoor key),用于使能后门解密时临时解密MCU;
0x408~0x40B:PFlash保护配置;
0x40C:Flash加密配置;
0x40D:Flash非易失选项配置字节;
0x40E:EEPROM保护配置字节;
0x40F:D-Flash保护配置字节;
在复位过程中,由硬件自动加载到FLASH模块相应寄存器当中。
4.只能编程一次的区域
0x3C0 – 0x3FF区域,存在64-bytes,每个芯片只允许编程一次,且不能擦除,可以自由读取。
可通过命令FTFx_PROGRAM_ONCE 进行一次编程,通过命令FTFx_READ_ONCE 进行读取。
5.同时读写操作
若执行的代码和需要编程/擦除的扇区是属于同一个区域的话,则器件是不允许该操作的。
详细情况,请参考下图所示:
把执行命令的函数,加载到SRAM中运行。
这样,在执行命令操作的时候,是在SRAM中读取代码,同时对Pflash/Dflash执行编程或者擦除。
可参考以下示例:
FUNCTION_DEFINITION_AT_RAMSECTION_START
static STATUS_T FLASH_CommandSequence(const FLASH_SSD_CONFIG_T * ssdCfg)
{
...
...
}
FUNCTION_DEFINITION_AT_RAMSECTION_END
6.Dflash和EEPROM分区
Flash模块很重要的特性,就是DE分区。
在下图所示,可以将CFGNVM的DFlash区域和EEPROM备份区域配置成不同大小。
若是进行模拟EEPROM分区配置后,则需要把CFGRAM配置成EERAM功能,然后往EERAM进行单字节写入,
器件会把数据备份到EEPROM备份区。以此,可以实现EEPROM单字节写入的功能。
Partition
Code
| Data flash
size(KB)
| EEPROM backup
size(KB)
| 0x0000 | 64 | 0 | 0x0011 | 32 | 32 | 0x0100 | 0 | 64 | 0x1000 | 0 | 64 | 0x1010 | 16 | 48 | 0x1011 | 32 | 32 | 0x1100 | 64 | 0 | 0x1111 | Default | / |
三、结语
关于G32A器件的Flash模块,本节学习内容已介绍完毕。
若大家发现有趣的知识点或应用,可以在这里分享分享哈!
|