微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > osal_snv_write处理机制问题

osal_snv_write处理机制问题

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

以下为osal_snv_write中的一段代码

uint16 offset = findItem(activePg, pgOff, id);

if (offset > 0)
{
uint8 tmp;
osalSnvLen_t i;

for (i = 0; i < len; i++)
{
HalFlashRead(activePg, offset, &tmp, 1);
if (tmp != ((uint8 *)pBuf)[i])
{
break; //当数据不同跳出
}
offset++;
}

TI为什么对于相同的id值,发现flash中已存在时,不直接替换掉,而是在新区域中再存储新的数据。

这导致pgOff大于OSAL_NV_PAGE_SIZE后,osal_snv_write就一直失败。

现在我需要同一个ID存储上千次,没次都覆盖掉前面的值,请问有什么方法吗?

 在ID=0x81中分别保存111111、222222、333333、444444、555555后,跟踪HalFlashRead函数,

发现xdata中数据如下保存:

而且在执行HalFlashRead中

// Calculate and map the containing flash bank into XDATA.
MEMCTR = (MEMCTR & 0xF8) | pg;

这段代码前,改地址区域内都是乱码

执行完后就出现图1结果了。

还有activePg的地址是Xdata:0x0a40,   为什么数据会保存到0xf000以后呢?

0x0a40中的实际数据如下:

一直不变

问题解决了,HAL_NV_PAGE_CNT被改成了1,把HAL_NV_PAGE_CNT改回2就行了,HAL_NV_PAGE_CNT为1就无法进行压缩了

Quote: TI为什么对于相同的id值,发现flash中已存在时,不直接替换掉,而是在新区域中再存储新的数据

FLASH的特性决定了不能采用你这种方式,只能将新数据追加到最后一个条目

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

网站地图

Top