蓝牙学习笔记(九)——BLE超过20字节数据包传输(MTU)

本文介绍了如何通过调整BLE设备的MTU值实现超过20字节的数据包传输。首先,解释了BLE设备的client和server角色,然后详细阐述了MTU交换请求的过程,包括服务端和客户端如何处理这些请求。实验中,使用nRF Connect APP作为客户端,展示如何修改MTU以允许更大数据量的传输,并观察了不同MTU设置下的数据传输效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:在默认情况下,BLE 支持传输一次性最大不超过20字节的数据包,但是很多应用场景下,往往会需要传输更多数据。下面说下如何进行一些修改,使之能够传输更大数据。


实验环境

  • 客户端nRF Connect APP,手机应用市场均可下载,实验手机蓝牙协议版本为5.0。
  • 服务端搭载蓝牙芯片AC6920的开发板,SDK蓝牙协议栈版本为4.2。

1.server与client

  低功耗蓝牙的设备可以分成两类:一类是中央设备,用于找到并与外围设备进行交互,在常见的场景中,一般它具有丰富的功能和复杂的用户界面,比如手机。中央设备在BLE中一般扮演的角色是client
  低功耗蓝牙应用的另一类是外围设备,向中央设备提供信息和服务。在常见的场景中,它一般是搭载在各设备上的蓝牙芯片,扮演server角色。
  类似于互联网的HTTP协议一样,属性协议其本质上也是也是一种无状态协议,它不仅在连接时没有状态,在连接和连接之间也没有状态。因此,在每次信息发生变化时,都需要其中一方主动发送信息。


2.交换MTU请求

  在低功耗蓝牙连接中,属性协议默认的MTU长度为23字节。按照1个字节的类型操作码(六种基本操作:请求、响应、命令、指示、确认、通知)以及最少2个字节操作句柄(16BitsUUID)算,数据传输字节最多不超过20字节。在两个设备连接初期,谁也不知道对方底细,因此数据交换严格按照默认MTU来,即MTU为23字节。
  如果设备想要发送更大的数据包,那么它就要协商一个更长的MTU。只有客户端可以发起这种请求。客户端的请求包含客户端接收的MTU长度;服务器请求则包含服务器接受的MTU长度。对于同时是是客户端服务器的设备而言,二者提供的接收MTU长度中较小的那个即是连接将会使用的MTU长度。


2.服务端

  观察了AC6920的SDK后,发现在每次蓝牙芯片上电初始化时总是先读取一次默认MTU的值作为传输数据的标准。此后客户端若进行MTU请求,则在请求MTU大小和发送数据缓存中取二者最小更新数据,否则一直按照默认MTU发送数据。

/* -----------------定义服务端的MTU------------------*/
#define ATT_DEFAULT_MTU       23

/*--------------初始化ATT发送协议栈参数------------- 
--
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值