主题中讨论的其他器件: CC2540
我有四个 CC2650STK 板配置如下:
董事会1:中心角色
Board2、3、4:外围设备角色
对于所有外设节点、连接间隔设置为1秒、并且我已通过监控器件电流消耗曲线验证连接间隔确实设置正确(在完成自动间隔参数更新事件后)。
在中央设备中、我有一个每8秒触发一次的周期性事件。 在所有三个连接的外设成功完成 GAP 参数更新(针对请求的1秒连接间隔)后、周期函数将被启动。
第一个周期性函数调用会调用 Board2连接句柄的 GATT_writecharvalue。 第2个周期函数调用调用 Board3的 GATT_writecharvalue。 Board4没有 GATT_writecharvalue 调用。
Board2的 GATT_writecharvalue 的第一次调用成功完成(通过 ATT_write_RSP 确认)。 然而、GATT_writecharvalue 的第二次调用(这次用于 Board3)会获取 ATT_ERROR_RSP && ATT_WRITE_REQ、错误代码为0x1 (无效句柄)。
我已经检查了很多事项、以确保我没有做任何明显的错误:
- 我已通过 btool 验证了 Board3/2的属性句柄。
- 我已经验证了连接句柄
- Board2和 Board3具有相同的固件(SensorTag 固件的修改版本)。 切换 GATT_writecharvalue 的调用顺序(第一个用于 Board2、第一个用于 Board3)无关紧要。 错误代码始终用于第2个 GATT_writecharvalue 调用。
- 我还尝试为该句柄输入 Board3的 WriteCB 函数的断点。 断点似乎永远不会到达;换句话说、Board3永远不会看到该句柄的属性写入请求。
- 我已经验证了任何外设(Board2/3/4)的连接从未中断。
- 我已检查 GATT_writecharvalue 函数调用的 bStatus_t 状态。 两个调用(首先是 Board2、然后是 Board3)都返回成功、因此写入请求的框架方式没有问题。
我在某处看到、当多个外设连接到中央时、只能为一个连接传输一个数据包。 我感觉、由于某种原因、扩大连接间隔与它有关。
遗憾的是、我没有 CC2540 USB 软件狗来监听数据包、以查看中央正在为第二个 GATT_writecharvalue 请求传输的确切内容。
我还可以进一步检查/调试什么?
谢谢、
Vipin