用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,但是如果我在读之前对这个位置先进行写的操作,就会正常读取数据。不知道这是为什么?
后面我想跟踪打印调试,就在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,返回的肯定是失败的。
你好,我读取失败是因为我一直都在调试,每次重新烧写程序的时候,把存储空间也擦除了,请教一下,有没有一种方法可以每次升级程序的时候,存储空间保持不要被擦除?