请选择 进入手机版 | 继续访问电脑版
查看: 64|回复: 0

[技术交流] nRF52系列做从机如何接收来自主机的分包数据

[复制链接]

38

主题

71

帖子

378

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
378
发表于 2020-11-4 09:40:57 | 显示全部楼层 |阅读模式

概述: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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表