TI CC2540 snv flash读写

参考文档:(协议栈中,有OSAL API.pdf)
D:\Texas Instruments\BLE-CC254x-1.4.2.2\Documents\osal

SNV:Simple Non-Volatile ,简单非易失

TI CC2540 snv flash读写_第1张图片
image.png

注意
要花几百毫秒的时间,期间中断也可能停止
不能在中断服务中调用
不要经常写snv

11.2osal_snv_read( )

说明
从NV读整个item的数据到*pBuf
原型
uint8 osal_snv_read( osalSnvId_t id, osalSnvLen_t len, void *pBuf );
参数
id – User-defined item ID.
len – Item length in bytes.
*pBuf – Data is read into this buffer.
返回值
返回值有两种:SUCCESS (成功) NV_OPER_FAILED(失败,如果以前没有写过这个单元,就会失败)
例子

int8 ret8 = osal_snv_read(0x80, sizeof(SYS_CONFIG), &sys_config);

11.3 osal_snv_write( )

原型
uint8 osal_snv_write( osalSnvId_t id, osalSnvLen_t len, void *pBuf );
11.3.3 Parameter Details
id – User-defined item ID.
len – Item length in bytes.
*pBuf – Data to write.
11.3.4 Return
也有两种返回值:SUCCESS 和 NV_OPER_FAILED。
注意,之前没有初始化到NVsystem的单元也可以写
example

osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config); 

阿莫的例程


//用于测试的一个结构体

typedef struct 
{
    uint8 count;
    uint8 test[32];
    uint8 parity;
    uint8 stopbit;
    uint8 mode;   
    uint8 workMode;                        
}SYS_CONFIG;
SYS_CONFIG sys_config;

init:

//--------------------------------------------------------------
    int8 ret8 = osal_snv_read(0x80, sizeof(SYS_CONFIG), &sys_config);
    // 如果该段内存未曾写入过数据, 直接读,会返回 NV_OPER_FAILED ,
    // 我们利用这个特点作为第一次烧录后的运行, 从而设置参数的出厂设置
    if(NV_OPER_FAILED == ret8)
    {
        // 把数据结构保存到flash
        osal_memset(&sys_config, 0, sizeof(sys_config));
        osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config); 

        osal_snv_read(0x80, sizeof(SYS_CONFIG), &sys_config);
    } 
    //--------------------------------------------------------------

你可能感兴趣的:(TI CC2540 snv flash读写)