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

CC2640R2F SNV写数据到第二个4K区域

请教TI工程师一个问题:

CC2640R2F,协议栈可以配置成为SNV预留最多两个4kBFlash page,为防止写SVN时异常,我们设计使用两个page存储相同的一组数据,查看bcomdef.h文件,有如下定义:

// Bonding NV Items –   Range  0x20 – 0x5F    – This allows for 10 bondings
#define BLE_NVID_GAP_BOND_START         0x20  //!< Start of the GAP Bond Manager's NV IDs
#define BLE_NVID_GAP_BOND_END           0x5f  //!< End of the GAP Bond Manager's NV IDs Range

// GATT Configuration NV Items – Range  0x70 – 0x79 – This must match the number of Bonding entries
#define BLE_NVID_GATT_CFG_START         0x70  //!< Start of the GATT Configuration NV IDs
#define BLE_NVID_GATT_CFG_END           0x79  //!< End of the GATT Configuration NV IDs

// Customer NV Items – Range  0x80 – 0x8F – This must match the number of Bonding entries
#define BLE_NVID_CUST_START             0x80  //!< Start of the Customer's NV IDs
#define BLE_NVID_CUST_END               0x8F  //!< End of the Customer's NV IDs  

其中0x80~0x8F提供了可写SVN编号,一共16个,每个SVN可写252有效字节,16*252才一个page大小,我们现在需要将这组参数写到第二page中,请问如何操作?

曾尝试将0x8F改为0x9F,通过osal_snv_write函数将编号为0x91的SVN区,读取flash时,发现第二个扇区全FF,证明未写进去。下面截取CC2640R2F存储架构中的,是否可理解为有效数据不足80%时,协议栈自动将有效数据压缩到一个区中?

Viki Shi:

看上图,OSAL_SNV =2的时候,SNV有两个page,但是真正处于active模式的只有一个page。当存储的那个page超过80%时,SNV manager对其进行压缩并copy进另一个page,同时对前一个page进行擦除【假如OSAL_SNV =1则依然放在之前擦除过的page】。

你的应用,写入两个不同的NV Item就行了,无需存放在两个page,注意前面说的,真正处于active的只有一个page。

user4546979:

回复 Viki Shi:

上面问题清楚了,十分感谢,那假如将第一个page写满,第二个page就可以写其他数据了吗?

问题来了,0x80~0x8F提供了可写SVN编号,一共16个,16*252才一个page大小,那我需要修改0x8F为0x9F就可以实现吗,为什么默认的是0x8F呢,还是说只能写16个编号

ZANGk:

回复 Viki Shi:

到8F时,一页已经用完了,如果用下一页,编号怎么定义?????????????

Viki Shi:

回复 ZANGk:

还是写这16个编号,SNV driver有一个自己的机制来决定到底写入哪个flash page,这部分用户不用去操作

ZANGk:

回复 Viki Shi:

OK,了解,谢谢!!!

赞(0)
未经允许不得转载:TI中文支持网 » CC2640R2F SNV写数据到第二个4K区域
分享到: 更多 (0)