TI中文支持网
TI专业的中文技术问题搜集分享网站

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

我用的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,但是如果我在读之前对这个位置先进行写的操作,就会正常读取数据。不知道这是为什么?

shanyi he:

后面我想跟踪打印调试,就在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,然后产生不能正常读操作的呢?

Barbara Wu:

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

shanyi he:

回复 Barbara Wu:

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

赞(0)
未经允许不得转载:TI中文支持网 » 用CC2541用osal_snv_read读取BLE_NVID_CUST_START(0x80)偏移的位置总是返回NV_OPER_FAILED
分享到: 更多 (0)