Other Parts Discussed in Thread: CC2541
大家好!
我在定制电路板上使用 CC2541、其中包含 HostTest 示例、片外 GATT 数据库。
固件略有修改:
-我使用的是'uart_all_4_configs.c'中的 UART 配置4、该配置可在旧版 wiki 上找到
-我已修改 LED 驱动器以支持我们板上的5个 LED
-我添加了一些 HCI 命令(按照旧 Wiki 上的示例)。 这些 HCI 命令主要返回静态数据(固件版本等)+控制 LED
-我已经为按钮添加了一个 HCI 事件(从示例 HAL 驱动程序修改了引脚映射)-正如它在 wiki 上显示的那样。
我的任何修改都不会以任何方式与 BLE 堆栈互操作(除了切换至'processExtMsg'函数)或分配内存。
在主机处理器方面、我有一个 HCI 的自定义实现、直到今天看起来效果良好。 我在4个服务中共有130个属性(属性计数中未包括服务)。 然后、我添加了另外2个(特征+值描述符)、CC2541在按组类型读取响应时开始返回无效 PDU 错误。
因此、有效连接如下所示(在服务器上添加新特性之前、总共有134个属性):
- evt 0x0605 GAP_Link_established、有效载荷: 05 06 00 03 4D 6c 90 C7 00 6F 00 04 26 00 F4 01 00
- evt 0x0510 ATT_ReadByGrpTypeReq、有效载荷: 10 05 00 00 06 01 00 ff 00 28 (主服务、所有句柄)
- CMD 0xFD11 ATT_ReadByGrpTypeRsp、有效载荷: 00 00 14 01 00 23 00 ff 58 F7 E3 D8 E3 01 00 00 06 49 2c C1 B6 4e (服务#1、处理0x0001-0x0023)
- 0xFD11的状态 EVT、状态0x00
- evt 0x0510 ATT_ReadByGrpTypeReq、有效载荷: 10 05 00 00 06 24 00 ff 00 28 (主服务、从0x0024处理)
- CMD 0xFD11 ATT_ReadByGrpTypeRsp、有效载荷: 00 00 14 24 00 2b 00 ff 58 F7 E3 D8 E3 01 10 00 06 49 2c C1 B6 4e (服务编号2、处理0x0024-0x002B)
[...] 为清晰起见 - evt 0x0510 ATT_ReadByGrpTypeReq、有效载荷: 10 05 00 00 06 7f 00 ff 00 00 28 (主服务、从0x007F 处理)
- CMD 0xFD11 ATT_ReadByGrpTypeRsp、有效载荷: 00 14 7f 00 86 00 ff 58 F7 E3 D8 E3 01 30 00 06 49 2c C1 B6 4e (服务#4、处理0x007F-0x0086)
- 0xFD11的状态 EVT、状态0x00
- evt 0x0508 ATT_ReadByTypeReq、有效载荷: 08 05 00 00 06 01 00 23 00 03 28 (读取句柄范围0x0001-0x0024中的特性)
- CMD 0xFD09 ATT_ReadByTypeRsp、有效载荷: 00 15 02 00 02 03 00 ff 58 F7 E3 D8 E3 02 00 06 49 2c C1 B6 4e
- 状态 EVT for0xFD09、状态0x00
[...] 为清晰起见、请休息一下
无效连接如下所示(总共136个属性):
- evt 0x0605 GAP_Link_established、有效载荷: 05 06 00 03 4D 6c 90 C7 00 6F 00 04 26 00 F4 01 00
- evt 0x0510 ATT_ReadByGrpTypeReq、有效载荷: 10 05 00 00 06 01 00 ff 00 28 (主服务、所有句柄)
- CMD 0xFD11 ATT_ReadByGrpTypeRsp、有效载荷: 00 00 14 01 00 23 00 ff 58 F7 E3 D8 E3 01 00 00 06 49 2c C1 B6 4e (服务#1、处理0x0001-0x0023)
- 0xFD11的状态 EVT、状态 0x40 (bleInvalidPDU)
- evt 0x057E ATT_FlowCtrlVioletedEvt、有效载荷: 7E 05 00 00 02 10 10 (指向之前的事务)
对于测试、我尝试仅添加一个属性(仅添加特征描述符、不添加值。 我知道、这是无效的、但它是服务器上的最后一个属性、CC2541不应关心它)。 结果略有不同。 所有 ATT_ReadByGrpTypeReq 都经过 OK、但第一 个 ATT_ReadByTypeReq (第一个列表中的步骤10-11)以0x40结束(尽管我给出的响应完全相同)。
所有创建服务/添加属性调用都将通过 OK
我是否遇到了 BLE 堆栈的一些限制? 是否可以克服它(可能更改某些编译定义?)? 或者、我是否应该在主机端实现中寻找问题?
感谢您的任何建议! BTW。 我不能将 CC2541更改为 CC26xx 系列、这本来是很好的、但硬件已经制造...