SDK:simplelink_cc2640r2_sdk_3_20_00_21
处理器:CC2640R2F
问题描述:
simplelink_cc2640r2_sdk_3_20_00_21 的 BLE5 simple_peripheral 例程中调用了一下代码:
// Set default values for Data Length Extension// Extended Data Length Feature is already enabled by default{// Set initial values to maximum, RX is set to max. by default(251 octets, 2120us)// Some brand smartphone is essentially needing 251/2120, so we set them here.#define APP_SUGGESTED_PDU_SIZE 251 //default is 27 octets(TX)#define APP_SUGGESTED_TX_TIME 2120 //default is 328us(TX)// This API is documented in hci.h// See the LE Data Length Extension section in the BLE5-Stack User's Guide for information on using this command:// software-dl.ti.com/.../HCI_LE_WriteSuggestedDefaultDataLenCmd(APP_SUGGESTED_PDU_SIZE, APP_SUGGESTED_TX_TIME);}
但是我抓包发现蓝牙模块的 MTU 还是没有变成 251,这个不是改变 MTU 大小的 API 吗?
Alvin Chen:
修改MAX_PDU_SIZE为255
Alvin Chen:
而且MTU EXCHANGE 与你对方设备也有关。
Jesse Huang:
回复 Alvin Chen:
添加宏定义“MAX_PDU_SIZE=255”是可以改变 MTU 的,而且抓包可以看到是 251。
问题是例程中的 “HCI_LE_WriteSuggestedDefaultDataLenCmd(APP_SUGGESTED_PDU_SIZE, APP_SUGGESTED_TX_TIME);” 有什么用?
Jesse Huang:
回复 Alvin Chen:
// Maximum size in bytes of the BLE HCI PDU. Valid range: 27 to 255 // The maximum ATT_MTU is MAX_PDU_SIZE - 4. #ifndef MAX_PDU_SIZE #if defined(BLE_V42_FEATURES) && (BLE_V42_FEATURES & SECURE_CONNS_CFG)#define MAX_PDU_SIZE69 #else#define MAX_PDU_SIZE27 #endif //(BLE_V42_FEATURES & SECURE_CONNS_CFG) #endifMAX_PDU_SIZE 的范围不是 27 到 255 吗?不能设置为 255 吗?
Alvin Chen:
回复 Jesse Huang:
PDU和MTU不是一个概念, PDU是255 , 上面第一条回复写错了。 去掉L2CAP 4个包头 生效的MTU,你自己去看抓包MTU exchange request。
Jesse Huang:
回复 Alvin Chen:
哦,这个我知道。