沁恒risc-v蓝牙芯片的flash使用注意点
Ⅰ.调用接口方面
①codeflash与dataflash分为两组接口,详见EVT包中的FLASH例程。
codeflash基地址为0。读写codeflash的接口带有内核加解密。擦除flash不涉及加解密;擦除dataflash后读出4字节循环“乱码”是正常的。codeflash最小擦除单位:4096字节。
dataflash基地址为0x70000。读写dataflash的接口自带0x70000的基地址,不带加解密,操作dataflash时只需要关心偏移地址。用户可以进MCU的原厂boot,走ISP工具直接读出dataflash。dataflash最小擦除单位:256字节。
②不论是codeflash还是dataflash,写之前一定要先擦除。dataflash的接口名中带有EEPROM字样,但本质上它还是flash。
③接口中的读/写buff缓存在ram中的地址,一定要4字节对齐,否则可能导致hardfault复位。四字节对齐问题的排查可见博客:CH57x/CH58x/CH32V wch risc-v 芯片hardfault问题追踪&程序卡死追踪 - iot-fan - 博客园 (cnblogs.com)
④擦除flash的起始地址、擦除长度都建议对齐最小擦除单位。由于地址或是长度不对齐,擦除n个单位长度时,会将涉及到的n+1甚至n+2个最小单位全部擦除。
Ⅱ.手册信息,介绍了擦写寿命、单词扇区擦除操作时间。RISC-V内核的CH5Xx蓝牙MCU此处参数相差不大。
Ⅲ.BLE例程中使用到的dataflash区域。注意避开或是在宏定义中重新规划。
Dataflash |
占用长度 |
相关宏定义 |
用途 |
0 |
12K字节(0x2FFF) |
CONFIG_MESH_NVS_ADDR_DEF等 |
Mesh网络信息 |
0x7000 |
4字节(0x7003) |
OTA_DATAFLASH_ADD |
OTA升级的标志 |
0x7E00 |
512字节(0x7FFF) |
BLE_SNV_ADDR等 |
BLE配对绑定信息 |
Ⅳ.操作flash时间开销实测(以CH592为例)
codeflash只支持4096字节“块擦”,不支持“页擦”。dataflash支持256字节“页擦”,也支持4096字节“块擦”。注意CH592A这个型号,支持了105℃工作,它的code/dataflash都只支持4096字节”块擦“。
字节数 |
擦除时长(ms) |
写入时长(ms) |
读出时长(us) |
1 |
17.14 |
2.2 |
7 |
100 |
17.15 |
2.2 |
48 |
256(1页) |
17.15 |
1.6 |
110 |
300 |
34.28 |
3.7 |
127 |
500 |
34.27 |
3.7 |
207 |
512(2页) |
34.28 |
3.2 |
212 |
513 |
51.45 |
5.3 |
212 |
4096(1块) |
17.13 |
25.5 |
1.65ms |
4096+256(1块+1页) |
34.32 |
27.1 |
1.75ms |
4096+300 |
51.44 |
29.2 |
1.76ms |