材料
示例
Flash Memory API 使用 3* 4K 字节(12Kb)的内存,这对于大多数应用程序来说通常是足够的。但是,可以通过指定特定的内存地址和所需的大小来提供更大的内存。
在本例中,指定 flash 的起始地址为 0xFD000 (" FLASH_MEMORY_APP_BASE "),大小为 0x1000 (“TEST_SIZE”由用户设置)。没有指向默认偏移值 0 的偏移量。目标闪存地址为 0xFD000。从地址读取所有值,直到“TEST_SIZE”,即 0xFD000 到 0xFE000,然后将所有值存储在“buf”中并增加 1。接下来,比较所有的值,如果它们都是相同的结果成功。最后一步,将所有新值写回相同的地址。每次 BW21-CBV-Kit 重新启动时,读取值将增加,直到“RESET_THRESHOLD”(最多为 0xFFFFFFFF),然后重置为 0。在通过第一个阈值之前,结果可能会失败几次。但是,如果在超过 2 个阈值周期后继续失败,则会导致 100%失败。
打开“文件”->“示例”->“AmebaFlashMemory”->“ReadWriteStream”中的样例代码。
编译并上传到 BW21-CBV-Kit,然后按复位按键多次。打开串行监视器,查看结果。
默认情况下,Flash Memory API 使用地址 0xFD000-0xFFFFF 来存储数据。写入 Flash 时有限制。也就是说,除非先擦除扇区,否则不允许直接将数据写入上次写入时使用的地址。Flash Memory API 有 1 个擦除相关功能。
- 使用“FlashMemory.eraseSector(sector_offset)”擦除 Flash 目标地址的一个扇区(4K 字节)。
- 使用“FlashMemory.eraseWord(offset)”擦除 Flash 目标地址的一个字(4 字节)。
|