BLE STM BlueNrg 特征最大尺寸和每个服务的最大特征

问题描述

我的 BlueNRG-MS BLE 模块有两个问题,我不确定这是否是预期设计:

  1. 特征的最大大小不能超过 20 个字节。如果我创建一个特征,例如32 字节长,虽然我可以读取整个 32 字节,但当特性被 BLE 通知(更新)时,只传输了 20 字节。我找到了一些证实这一点的参考资料,但我还没有找到合理的解释。

  2. 我只能为一项服务添加 2 个特征。这看起来很奇怪,我想知道是否有我遗漏的限制配置参数。如果我向一项服务添加 3 个特征,则只会添加前两个特征。我正在使用 STM LightBlue 应用程序进行调试。

更新aci_gatt_add_char() 函数的返回值为 ERR_UNSPECIFIED_ERROR 好像还有其他人有同样的问题 https://community.st.com/s/question/0D50X00009XkYh6/another-question-about-bluenrg-errunspecifiederror

解决方法

就遇到同样的问题,不知道ST为什么这么难用。 我正在使用 Bluenrg-LP 和 BLE_SerialPort 示例项目。

我将 5 更改为 7 并设置 .chr_count = 4。现在我可以在 serial_port_chars[] 中创建 4 个特性。还通过 LightBlue 应用程序进行了检查。

/* 特征属性请求的数量 / #define NUM_APP_GATT_CHAR_ATTRIBUTES_CONF (7) / 串口服务特性属性*/

,

好的,就我而言,问题似乎是由 max_attr_records 调用的 aci_gatt_add_serv() 参数引起的。 到目前为止,我还没有找到明确的规范,但您似乎需要 1 来表示服务本身,而我的情况(设置了 CHAR_PROP_NOTIFY 标志)每个特征都需要 +3。所以它现在有效,如果有人对如何确定 max_attr_records 有清楚的了解,请告诉我。另外,设置太高也没有用,不过这里暂时没找到解释。