问题描述
我的 BlueNRG-MS BLE 模块有两个问题,我不确定这是否是预期设计:
-
特征的最大大小不能超过 20 个字节。如果我创建一个特征,例如32 字节长,虽然我可以读取整个 32 字节,但当特性被 BLE 通知(更新)时,只传输了 20 字节。我找到了一些证实这一点的参考资料,但我还没有找到合理的解释。
-
我只能为一项服务添加 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
有清楚的了解,请告诉我。另外,设置太高也没有用,不过这里暂时没找到解释。