微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 用CC2541用osal_snv_read读取BLE_NVID_CUST_START(0x80)偏移的位置总是返回NV_OPER_FAILED

用CC2541用osal_snv_read读取BLE_NVID_CUST_START(0x80)偏移的位置总是返回NV_OPER_FAILED

时间:10-02 整理:3721RD 点击:

我用的CC2541+TI最新官网的BLE协议栈(BLE-CC254x-1.4.1.43908b),用其中SimpleBLEPeripheral工程;发现我在对NVID为0x80位置进行读取总是返回NV_OPER_FAILED。

           #define calcDevRecID(Inx)               ((((Inx) * CSDEV_STORE_PER_SIZE) ) + BLE_NVID_CUST_START)

          if(SUCCESS != (readRtn = osal_snv_read(calcDevRecID(0),CSDEV_STORE_PER_SIZE,&(csBleDevList[inx]))))

            {
                 csPrintf("osal_snv_read failed:%d,failed:%d\r\n",inx,readRtn);
                 csBleDevList[inx].flag = CSDEV_FLASH_STORE_INVALID;
            }

    发现串口总是打印10,但是如果我在读之前对这个位置先进行写的操作,就会正常读取数据。不知道这是为什么?

后面我想跟踪打印调试,就在osal_snv_read()的函数里面去打印调试,发现整个串口打印日志都乱了,很多日志都没有正常输出到串口。

uint8 osal_snv_read( osalSnvId_t id, osalSnvLen_t len, void *pBuf )
{
uint16 offset = findItem(activePg, pgOff, id);
//打印日志
if (offset != 0)
{
HalFlashRead(activePg, offset, pBuf, len);
return SUCCESS;
}
return NV_OPER_FAILED;
}

我猜想是不是串口打印对nv操作有影响额,串口和flash操作是不是同时都用了DMA,然后产生不能正常读操作的呢?

如果读之前从来没有对SNV进行过写操作,就相当于去读一个不存在的item,返回的肯定是失败的。

你好,我读取失败是因为我一直都在调试,每次重新烧写程序的时候,把存储空间也擦除了,请教一下,有没有一种方法可以每次升级程序的时候,存储空间保持不要被擦除?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top