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

CC1310 FLASH操作问题

HI,

我从论坛上看到,CC1310进行FLASH写操作的时候,需要是4字节对齐,但是为什么我写3个字节也可以?我用的是NVS_write()函数。

还有就是我在用easylink   rfWsnNode进行开发的时候,我想把节点接收到的数据保存到FLASH里面,但是会死机,具体操作如下:

我是在NodeTask 主循环中里面先把数据写到缓存区,再调用NodeRadioTask_sendAdcData函数,生成无线发送数据事件,数据发送事件在NodeRadioTask里面运行的。数据发送完成之后,开启非阻塞接收,等待反馈数据,(非阻塞接收超时时间我开的5s),当反馈数据接收成功时,进行FLASH写操作,将反馈的数据写入FLASH中,但是每次进行写操作时候就会死机,函数调用NVS_write().

       Send_Status = NodeRadioTask_sendAdcData(0x01);
       if(Send_Status == 0x00)
       {  
         Write_Flash((void *)addrtemp,4);
       }

      void Write_Flash(void *buffer,size_t writelen)
      {
         NVS_erase(nvsHandle,0,regionAttrs.regionSize);          NVS_write(nvsHandle,0,buffer,writelen,NVS_WRITE_ERASE|NVS_WRITE_POST_VERIFY);
      }

这是怎么回事呢?

谢谢!

ruimao cong:

什么情况下进行flash写操作会导致死机呢?因为我单独测试FLASH读写操作的时候,是没问题的。

Felix ZF:

你使用的那个版本的SDK?

NVS初始化正确吗?

ruimao cong:

回复 Felix ZF:

我用的simplelink 1.50的SDK。

NVS_Handle nvsHandle;
NVS_Attrs regionAttrs;
NVS_Params nvsParams;

void Flash_Init(void)
{NVS_init();NVS_Params_init(&nvsParams);nvsHandle = NVS_open(Board_NVS0, &nvsParams);NVS_getAttrs(nvsHandle, &regionAttrs);
}

void Read_Flash(void *buffer,size_t readlen)
{NVS_read(nvsHandle,0,buffer,readlen);
}

void Write_Flash(void *buffer,size_t writelen)
{NVS_erase(nvsHandle,0,regionAttrs.sectorSize);NVS_write(nvsHandle,0,buffer,writelen,NVS_WRITE_ERASE|NVS_WRITE_POST_VERIFY);
}

我是这样设置的,我现在发现是因为 我在NVS_erase之前加了串口发送uart_write(),导致NVS_erase直接跑飞了。我现在每次发送close 掉uart_handle就好了,这是为什么?
谢谢!

Loops:

回复 ruimao cong:

你如果不擦除直接写可以吗?

Felix ZF:

回复 ruimao cong:

是不是uart的操作还没有完成,就执行flash操作了?

你试试在uart和flash之间多加点延时。

ruimao cong:

回复 Felix ZF:

我调用的UART_write(),发送4个字节,uart_write不是会阻塞直到发送成功吗?

ruimao cong:

回复 Loops:

之前的数据我不用了,想擦除掉,我试了在nvs_write()前加uart_write()是没事的。

Loops:

回复 ruimao cong:

如果是un block 模式,就不会阻塞。你用的什么模式?

ruimao cong:

回复 Loops:

我用的阻塞模式。

赞(0)
未经允许不得转载:TI中文支持网 » CC1310 FLASH操作问题
分享到: 更多 (0)