沁恆risc-v藍芽晶片的flash使用注意點

debugdabiaoge發表於2024-06-12

Ⅰ.呼叫介面方面

  ①codeflash與dataflash分為兩組介面,詳見EVT包中的FLASH例程。

  codeflash基地址為0。讀寫codeflash的介面帶有核心加解密。擦除flash不涉及加解密;擦除codeflash後讀出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位元組“塊擦”。本質上是同一塊flash,

位元組數

擦除時長(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

相關文章