即使把MTU设置为251,使用Notification方式发送,数据长度大于20字节都仍会被分解成20字节/包分多次发送!
BT4.2以后不是可以支持大于20字节数据发送了吗?为何会出现这种现象?
BT5.0协议我也查了,没有查到Notification的数据长度,请大神解惑,谢谢!
Eggsy Pang:
MTU支持251是双方设备协调的过程,请问两个设备都是跑BLE5的协议吗?
dn smart:
回复 Eggsy Pang:
是的,我抓包看过,MTU rsp的值是251.
是不是notify方式不支持大数据包发送,会自动分拆呢?
da qin zheng sheng:
楼主,你的bt5抓包工具用的啥?还是cc2540 dongle ?
Eggsy Pang:
回复 dn smart:
调用下面函数看看是不是返回251
uint16 L2CAP_GetParamValue
(
void)
Get the L2CAP parameter value.
ReturnsL2CAP parameter value
Viki Shi:
配置更大的MTU
GATT Client 可以通过使用GATT_ExchangeMTU() 在连接期间请求更大的ATT_MTU。在此过程中,客户端请求服务器其最大支持的接收MTU大小,服务器回复其最大支持的接收MTU大小进行。只有客户端可以启动此过程。当成功交换该值后,ATT_MTU是客户端MTU和服务器MTU值的最小值。如果客户端表示可以支持200字节的MTU,并且服务器响应最大大小为150字节,该ATT_MTU连接的大小为150。
采取以下步骤配置协议栈以支持较大的MTU值。
将应用程序项目中的MAX_PDU_SIZE预处理器符号设置为所需的值,以达到L2CAP PDU所需的最大大小。最大ATT_MTU大小总是比MAX_PDU_SIZE小4字节。
在主从设备建立连接后,调用GATT_ExchangeMTU()(仅限GATT客户端)。传递给此函数的MTU参数必须小于或等于步骤1GATT Servier 中的定义ATT_MTU。
接收ATT_MTU_UPDATED_EVENT以验证MTU是否已成功更新。此更新要求调用已注册的GATT消息任务。尽管可以将协议栈配置为支持MAX_PDU_SIZE最大为255个字节,但每个低功耗蓝牙最初连接时都使用默认的27字节(ATT_MTU= 23字节),直到交换MTU过程中出现更大的MTU。必须在每个蓝牙低功耗连接上执行交换MTU过程,且须由客户端发起。
注意:如果启用安全连接BLE 4.2功能,连接时默认的MTU大小为69。详情查看ble_user_config.h。
增加ATT_MTU大小可以在单个ATT数据包中发送更多数据。单个数据包中发送的最长属性为(ATT_MTU-1)个字节。如果是通知,则有额外的长度限制。如果一个属性值的长度为100个字节,则读取该整个属性需要读取请求来获取第一个(ATT_MTU-1)字节,然后是多个读取blob请求以获得后续(ATT_MTU-1)字节。要传输整个100字节的有效载荷数据,默认ATT_MTU值为23字节,需要五个请求或响应过程,每个字节返回22个字节。如果执行了交换MTU过程,并且将ATT_MTU其配置为101字节(或更大),则可以在单个读取请求或响应过程中读取整个100个字节。
注意:由于内存和处理的限制,并不是所有的蓝牙低功耗系统都支持更大的MTU尺寸。在定义系统的行为时,了解预期对等设备的功能。如果对等设备的能力未知,请设计系统使用默认的27字节L2CAP PDU/23字节ATT_MTU 大小。例如,发送长度大于20字节(ATT_MTU-3)字节的通知会导致在不支持较大MTU大小的设备上截断数据。
dn smart:
回复 Viki Shi:
@大秦正声: 抓包工具是CC2540
@Eggsy Pang: L2CAP_GetParamValue()读出值一直是0
@Viki Shi: 这段资料我也查到了,并按要求改了MAX_PDU_SIZE,并在ATT_MTU_UPDATED_EVENT事件中验证了MTU交换后已经改过来了,但是发包还是被分包成多个27byte发送
好像怎么改都没有,无法突破27byte限制,下面是发送的150byte抓的图:
请教2640是否支持BT4.2的DLE?如果支持该如何打开呢?
dn smart:
回复 da qin zheng sheng:
是cc2540 dongle ,有影响吗?
Eggsy Pang:
回复 dn smart:
DLE默认打开的,参考
http://software-dl.ti.com/lprf/simplelink_cc2640r2_latest/docs/blestack/ble_user_guide/html/ble-stack-3.x/data-length-extensions.html?highlight=dle#le-data-length-extension-dle