协议栈使用:ble_sdk_2_02_01_18
BLE SDK使用:simplelink_cc2640r2_sdk_1_40_00_45
编译环境:Code Composer Studio 7.2.0
老项目CC2540芯片,手机写数据到设备(CC2540),手机调用写函数发送100字节的大数据包,协议栈会自动拆包传输。
在新的设备上(cc2640r2_BLE4.2协议),手机调用写函数发送100字节的大数据包,写大数据包操作失败,
APP提示错误GATT_INVALID_ATTRIBUTE_LENGTH。
上面两个测试使用同样安卓、苹果手机测试,测试结果一样,写大数据包操作失败。
这个问题是什么原因引起,是否有解决办法。
尝试实验:
开启新协议的扩展数据功能。
MAX_NUM_PDU=6
MAX_PDU_SIZE=251
//Set default values for Data Length Extension
{
//Set initial values to maximum, RX is set to max. by default(251 octets, 2120us)
#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 BLE-Stack User's Guide for information on using this command:
//http://software-dl.ti.com/lprf/sdg-latest/html/cc2640/index.html
HCI_LE_WriteSuggestedDefaultDataLenCmd(APP_SUGGESTED_PDU_SIZE, APP_SUGGESTED_TX_TIME);
}
测试结果一样,写大数据包操作失败。
popo:
http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/p/145488/410929.aspx#410929
看这个贴子,感觉软件分包发送应该是可以的。
特征值长度最大为512个字节。特征值如果是50字节,PDU是25字节的话,它会分几次发送,几次难免会有丢包。
Susan Yang:
You need to set the MAX_PDU_SIZE 248 and adjust the heap size accordingly so that you can send packets that are > 20 bytes data.