环境
- 系统:Windows 10
- SDK:simplelink_cc13x2_26x2_sdk_4_30_00_54
- IDE:Code Composer Studio, Version: 10.1.1.00004
- 例程:simple_peripheral_oad_offchip_CC26X2R1_LAUNCHXL_tirtos_ccs (已删除不必要的代码,请看:删除simple_peripheral_oad_offchip工程多余的代码)
MX25R8035F Flash
文档连接:MX25R8035F 数据表 (PDF) - Macronix International
1. 添加NVS
1.1. 配置NVS
- Region Base:Flash 开始地址;
- Region Size:Flash 大小,单位为:Byte;
- Sector Size:扇区大小,一般为 4k Byte;
- Verifly Buffer Size:写Flash时会进行校验,缓冲区越大越耗时;
- Status Poll Delay:单位:微秒,等待Flash Ready时间。
- GPIO Pin:Flash CS 引脚 IO。
1.2. 配置SPI
根据硬件连接配置IO。
2. 代码
将以下代码连接到工程。
- 代码目录1:C:\ti\simplelink_cc13x2_26x2_sdk_4_30_00_54\source\ti\drivers\nvs
- 代码目录1:C:\ti\simplelink_cc13x2_26x2_sdk_4_30_00_54\source\ti\common\cc26xx\flash_interface\external
- 代码文件3个:
- NVSSPI25X.c
- NVSSPI25X.h
- flash_interface_ext_rtos_NVS.c
如图:
3. Flash 操作
Flash 写之前一般需要擦除, 擦除的最小单位为 1 个 Sector,写的最小单位为 1 个 Page.
- 初始化
flash_init();
flash_open();
- 读写
static uint8_t w_cnt = 0;
uint8_t wbuf[50] = { 0x11, 0x22, 0x33, 0x44, 0x55 };
uint8_t rbuf[50] = { 0 };
bool op = 0;
for (uint8_t i = 0; i < 50; i++)
wbuf[i] = i + (0x10 * w_cnt);
op = eraseFlashPg(0);
Debug("eraseFlashPg = %d\n", op);
op = writeFlash(0, wbuf, 5);
Debug("writeFlash = %d\n", op);
op = readFlash(0, rbuf, 5);
Debug("readFlash = %d: ", op);
DebugHex(rbuf, 5);
for (uint8_t i = 0; i < 50; i++)
wbuf[i] = i + (0x10 * w_cnt);
op = eraseFlashPg(1);
Debug("eraseFlashPg = %d\n", op);
op = writeFlashPg(1, 0, wbuf, 50);
Debug("writeFlashPg = %d\n", op);
op = readFlashPg(1, 0, rbuf, 50);
Debug("readFlashPg = %d: ", op);
DebugHex(rbuf, 50);