blue_nrg如何一次发送大于20字节的数据
aci_gatt_write_without_resp(connection_handle, rx_handle+1, 20, (uint8_t *)buff)==BLE_STATUS_INSUFFICIENT_RESOURCES)这个需要看蓝牙模块固件中的配置了,不过对于BLE蓝牙一半都有20字节的限制,多于部分会被放弃
是不是要在发送给设备之前做分包处理一下
你用的哪款芯片?支持LE data packet length extension的型号可以发更长的数据包。
这个要看BLE版本了,低于4.2最多就20,
4.2和5.0可以到244,但是为兼容4.0一般默认20,想一次传输超过20需要协商MTU 当发送大于 20 字节的数据时,使用 aci_gatt_write_without_resp 函数时遇到 BLE_STATUS_INSUFFICIENT_RESOURCES 错误时,你需要将数据拆分成适合的数据包大小进行发送,并确保蓝牙设备和堆栈配置能够支持大数据传输。 BlueNRG是STMicroelectronics推出的一系列蓝牙低功耗(Bluetooth Low Energy, BLE)芯片,用于实现BLE通信。在BLE通信中,数据包的大小是有限制的,通常情况下,一个BLE数据包的最大有效载荷(payload)大小为20字节。 将大数据分成多个小于或等于20字节的小数据包,然后依次发送这些数据包。接收端需要负责将这些小数据包重新组装成完整的数据。
在BLE 4.2及以上版本中,可以使用长包写入(Long Write)特性来发送大于20字节的数据。这可以通过发送一个长包写入请求(Long Write Request)来实现,该请求可以包含一个大于20字节的有效载荷。
如果服务端(GATT Server)支持,可以使用通知或指示来发送数据。服务端可以配置为在有数据需要发送时自动发送通知或指示,每次发送的数据包大小可以小于或等于20字节。
在某些BLE协议栈中,可能支持数据包聚合功能,允许在单个连接事件中发送多个数据包。这样可以减少连接事件的数量,提高数据传输效率。
在BLE 4.2及以上版本中,可以通过增大最大传输单元的大小来增加每个数据包的有效载荷大小。默认情况下,MTU大小为23字节(包括3字节的协议头),可以通过协商将MTU大小增加到最大517字节。
在实际应用中,选择哪种方法取决于具体的应用需求和BLE协议栈的支持情况。通常,分包发送是最常用的方法,因为它兼容性好,适用于所有BLE版本和设备。在使用分包发送时,需要注意确保数据包的顺序在传输过程中不会丢失或混乱。
在接收端实现数据重组逻辑,确保数据能够正确地重新组装
考虑数据传输的可靠性和重传机制,以应对可能的丢包情况
考虑数据传输的可靠性和重传机制,以应对可能的丢包情况
在实现这些方法时,需要仔细阅读BlueNRG的文档和参考手册,了解具体的API和配置方法,并根据实际应用场景进行适当的调整和优化
BlueNRG 支持通过启用长数据包扩展 (L2CAP LE Credit Based Flow Control) 突破 20 字节限制。需在初始化时配置 L2CAP PSM 和 CID 参数,使用aci_l2cap_le_connection_parameter_update_req增大 MTU (最大传输单元),结合aci_gatt_update_char_value分段传输并重组数据。注意需两端设备均支持该特性,且受连接间隔、链路层带宽影响。
页:
[1]