工具与软件:
我们正在开发一个典型的 ZCL 开/关输出开关(路由器)、目前正在遇到无法从 NV 闪存移除组的问题。
在通过网络添加/删除组或从器件上我们自己的固件调用添加/删除 ZStack 函数时、都会出现该问题。
为了确认没有固件时没有问题、我们从 SDK 中刷写了 zr_light_lp_CC2652R7_tirtos7_ticlang 光样本应用而未做任何更改、但仍然看到相同的行为。
例如、当从协调器发送 ZCL 命令时:
SEND ZCL command groups_get_group_membership: > > { capacity: 16, groupcount: 0, grouplist: [] } SEND ZCL command add_group { groupid: 0x01, groupname: "group a" }: SEND ZCL command groups_get_group_membership: > > { capacity: 15, groupcount: 1, grouplist: [ 1 ] } SEND ZCL command groups_remove_group { groupid: 0x01}: SEND ZCL command groups_get_group_membership: > > { capacity: 16, groupcount: 0, grouplist: [] }
这正如预期。 但在重新启动器件(CPU 复位、电路板复位或硬下电上电)后、该组会返回:
SEND ZCL command groups_get_group_membership: > > { capacity: 15, groupcount: 1, grouplist: [ 1 ] }
在本地设备上使用 Zstackapi_Aps GroupREQ / Zstackapi_Aps GroupREQ / Zstackapi_Aps IndGroupREQ 时也会出现同样的行为。 组功能正常、但重引导后删除的组仍然存在。 Zstackapi_Aps 骨灰骨灰骨灰骨灰骨灰骨灰骨的结果相同。
无论器件连接到调试器还是独立运行、都会出现该问题。
似乎删除正在内存中的 Groups 表中发生(删除后甚至可以重新添加该组)、但更改不会写入 NV、因此会在重新启动时再次加载到内存中。
唯一可以删除它们的函数是 Zstackapi_bdbResetLocalActionReq、它会执行完全 nV 清除(通过 bdb_setFN 调用 zgWriteStartupOptions)。
由于 APS_RemoveGroup 源不可用、因此无法进一步调试。
库缓存闪存写入可以减少磨损吗? 是否存在我们错过的用于"刷新"非易失性闪存更改的 API 调用?
环境:
设备: CC2652R7
-板: RF-STAR RF-BM-2652B2
- sdk: simplelink_cc13xx_cc26xx_sdk_7_41_00_17.
- CCS: v12.7.1.00001.
-编译器:TI_CGT_tiarmclang_3.2.0.LTS
编辑:
我注意到有人有类似的(相同?) 问题、我们认为这是 SDK 中的一个错误。 请参阅此处:
那是两年前、那么我假设它已经修复了...?