HI TI JRs:
CC2640R2F 请教 一个关于 NV 读写的问题。
我在 Spec 上看到如下这段:
No prior initialization of a NV item ID is required; the OSAL SNV manager initializes the NV ID when first accessed by a successful osal_snv_write() call.
也就是说:
1. 如果我想往 BLE_NVID_CUST_START 写几个数据,写操作是没有问题;
2. 等到我后续开机时,我再想去读 BLE_NVID_CUST_START 里的数据,我必须先要往 BLE_NVID_CUST_START 里执行写操作,成功写值后才能执行读操作;
请问是吗?
谢谢
Viki Shi:
不用,之前写过就可以读
user6198971:
回复 Viki Shi:
Hi ViKi:
我现在的问题是这样的。1. 我希望能够修改 advertData 数组里的 Major、Minor 值,不同的 Minor + Major 用来区分是哪个 Beacon 设备;
2. 我现在认知是没有现成的工具或者方法可以直接修改 Minor + Major 值;
3. 我自己修改了代码,先编译软件版本,下载这个版本后 Beacon 会一直循环等在 UART 程序里,等着接收到数据后存入到 BLE_NVID_CUST_START 位置处;
4. Beacon机器重新下载出货版本,在开机时去读 BLE_NVID_CUST_START 位置的数值,根据数值来重新 advertData 数组里的 Major、Minor 值;以上是我的修改逻辑,我的问题是在第 4 步,开机时如果不 先往 BLE_NVID_CUST_START 位置处写数值,就一直读不成功,那这样我该怎么解决呢?
谢谢
Viki Shi:
回复 user6198971:
Beacon 机器重新下载出货版本,在开机时去读 BLE_NVID_CUST_START 位置的数值,根据数值来重新 advertData 数组里的 Major、Minor 值——-重新下载了那是需要写了才能读
user6198971:
回复 Viki Shi:
Hi ViKi:
重新下载了那是需要写了才能读 =====》那不就会覆盖之前写的值了吗?
从我的测试结果来看确实是会覆盖。
Viki Shi:
回复 user6198971:
写了会覆盖。按照之前帖子里你的描述
“也就是通过 UART 连接手机,PC 端通过串口工具把值写到 Beacon 设备,Beacon 设备通过 osal_snv_write 函数来写入值,请问是这样吗?这样看起来蛮复杂的,因为 Beacon 里需要跑串口监听程序,我现在用的 SDK 版本是 simplelink_cc2640r2_sdk_4_20_00_04,请问这哥版本里有现成的接口函数吗?”
是程序跑起来以后通过串口把值写进SNV,再读出来。现在看你的描述是程序重新下载一遍,然后去读值。重新下载程序后,flash都改变了
user6198971:
回复 Viki Shi:
Hi ViKi:
1. “也就是通过 UART 连接手机,PC 端通过串口工具把值写到 Beacon 设备,Beacon 设备通过 osal_snv_write 函数来写入值,请问是这样吗? ====================》 是的;
2. 我现在用的 SDK 版本是 simplelink_cc2640r2_sdk_4_20_00_04,请问这哥版本里有现成的接口函数吗? =====》 没有,这个接口函数 是我自己写的;
3. 现在看你的描述是程序重新下载一遍,然后去读值。重新下载程序后,flash都改变了=======》 是的,在重新下载软件后 NV 里的值已经没了;
这个和我理解的 NV 含义不一样。
看来我这段时间白忙了。
user6198971:
回复 user6198971:
Hi ViKi:
NV 的作用,应该是只要不擦除,里面的值就一直保存这,否者也不叫 NV 了。
而我在用 Flash Programmmer 2 下载软件时,Erase 栏里选的是 Pages in Image(字面意思应该是保存 Image 的 page);
难道这里的 NV 和 Image 区域是在一起的?
Viki Shi:
回复 user6198971:
NV 只能掉电保存,重新烧录程序的话会丢失
Viki Shi:
回复 user6198971:
是的
user6198971:
回复 Viki Shi:
Hi ViKi:
可能是我之前关于 NV 的认知和这里的 NV 有差异。那现在又回到我的原始问题了:按照协议,Minor 和 Major 值是在 UUID 相同的前提下区分 Beacon 设备的,那就是说每台 Beacon 设备的 Minor 和 Major 值应该是不一样的才行,既然如此,理应有个简单有效的方法给每台 Beacon 设备写入 Minor + Major 了。
请问你们有什么经验可以分享吗?其它家做 Beacon 设备的厂商用的是什么方法呢?谢谢