|
概述:nrf52做从机,如果主机端发送的数据长度超过mtu大小,从机只能接收第一包的数据,后面的数据将被丢弃。这里就介绍一种方法实现分包接收的功能 -- Queue Write的使用。
首先,需要调用nrf_ble_qwr_init函数初始化,初始化的结构需要包含一个错误处理程序、一个用于存储接收数据的缓冲区和一个回调函数。
buffer的定义:(size的大小可以根据可用的ram调整,主机端发送的数据包可以越大)
图1
错误处理函数就用nrf_ble_qwr.c中的nrf_qwr_error_handle。
回调函数也用nrf_ble_qwr.c中的nrf_ble_qwr_on_ble_evt。
除了初始化之外还需要使用nrf_ble_qwr_attr_register来注册要使用队列写操作的每个特征属性,这里我只需要一个接受的handle使用队列写操作,所以NRF_BLE_QWR_MAX_ATTR定为1,且在服务初始化结束之后注册一下改handle,如图2中的2。这样手机再次连接模块后即可发送一次发送大于mtu长度的包了。
图2
在nrf_ble_qwr_on_ble_evt函数中添加log用来观察发包过程中的事件顺序。
log如图所示:
log分别为:连接成功、默认MTU为244、更改MTU为20、
BLE_EVT_USER_MEM_REQUEST事件、BLE_EVT_USER_MEM_RELEASE事件。
对应空中包:
至此,Queue Write添加完成。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|