TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2640使用ble5stack栈时,使用Notification方式发送数据时的问题?

即使把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

赞(0)
未经允许不得转载:TI中文支持网 » CC2640使用ble5stack栈时,使用Notification方式发送数据时的问题?
分享到: 更多 (0)