ATT_MTU_SIZE

Discussions on BLE related products, including standard BLE devices, BLE mesh, and Apple HomeKit products
Post Reply
HALATIONESL
Posts: 3
Joined: Tue Nov 12, 2019 2:08 pm

Fri Nov 15, 2019 10:45 am

您好!
我使用SDK里面的module程序,看过handbook,默认的ATT_MTU_SIZE都是23字节(Att.h),然后我参考手册进行了修改:
1、将ATT_MTU_SIZE设置为230字节(最大为250字节)
2、在修改app.c文件里面的函数:
void user_init_normal(void)
{
......................
bls_ll_setAdvEnable(1); //adv enable
rf_set_power_level_index (MY_RF_POWER_INDEX);

blc_att_setRxMtuSize(230);
......................
}
3、修改接受函数(app.att.c)
int module_onReceiveData(rf_packet_att_write_t *p)
{//rf_packet_att_data_t
u8 len = p->l2capLen - 3;
if(len > 0)
{
spp_event_t *pEvt = (spp_event_t *)p;
pEvt->token = 0xFF;
pEvt->paramLen = p->l2capLen + 2; //l2cap_len + 2 byte (eventId)
pEvt->eventId = 0x07a0; //data received event
memcpy(pEvt->param, &p->opcode, len + 3);
p->value = len;//通过notify,返回本次接受的数据长度
spp_send_data(HCI_FLAG_EVENT_TLK_MODULE, pEvt);


len = 20;
bls_att_pushNotifyData(SPP_SERVER_TO_CLIENT_DP_H,&p->value, len );

}

return 0;
}
4、使用nrfconnect发送28字节数据
此时发现notify回来的长度为20字节,也就是可以确定在receiveData中的len为20字节。

所以我的问题是,根据handbook的修改方法,为何不能收到超过20字节的数据?请问有什么其他的地方需要修改吗?谢谢!
AaronZhan
Posts: 8
Joined: Fri Dec 01, 2017 3:43 pm

Mon Nov 18, 2019 11:29 am

您好,假設您使用的是8258 chip,建議可下載最新版的SDK與Handbook做參考。
以下提供最新版的SDK中demo code的步驟,您可以將生成的binary燒錄到您的開發板上(8x5x系列),測試看看是否能達到您的需求?
1. 下載Kite BLE SDK V3.4.0
2. 選擇8258_feature_test project
3. 宏定義(FEATURE_TEST_MODE)設為TEST_SDATA_LENGTH_EXTENSION
4. 設置適當的MTU_SIZE_SETTING,默認為247
5. 開始build code,並生成對應binary
6. 燒錄至開發板,開始測試
7. 手機端使用nRF Connect,掃描與發現,並與開發板配對
8. 在手機端對應的service (server to client TX),開啟您所需的notify功能
9. 在手機端對應的service (client to server RX),寫入測試值

以下為我手邊設備的測試結果(40 bytes):
1. 寫入測試值:
write_2019-11-18_114735.png
write_2019-11-18_114735.png (116.67 KiB) Viewed 3012 times

2. 實際接收到的notify值:
notify_2019-11-18_114654.png
notify_2019-11-18_114654.png (118.73 KiB) Viewed 3012 times

透過以上測試可得知,使用MTU_SIZE_SETTING,是可以支持長包的分包傳輸的。
至於您的問題,也建議使用notify新的API, blc_gatt_pushHandleValueNotify(),看能否改善?
HALATIONESL
Posts: 3
Joined: Tue Nov 12, 2019 2:08 pm

Thu Nov 21, 2019 2:45 pm

HI
1. 我使用Feature工程,烧录到板子,用nrfconnect没有办法扫描到?这是什么原因呢?我使用的SDK也是3.4.0.
2. 另外,我在我的module工程中设置了blc_att_setRxMtuSize,还是没有任何作用。然后我用APP下发设置,依然没有响应:
int mtu = 210;
Log.e(TAG, "request " + mtu + " mtu:" + gatt.requestMtu(mtu));

3. blc_gatt_pushHandleValueNotify在SDK里面没有找到该应用方法。
谢谢!
AaronZhan
Posts: 8
Joined: Fri Dec 01, 2017 3:43 pm

Mon Nov 25, 2019 11:28 am

您好,請見回覆如下:
1. 我手邊使用Huawi Mate 20 Pro是可以掃到及連線的。另外,建議可先測試於我們公板上。此部分若還是有問題,建議您洽詢當地銷售及技術支持團隊。
2. 建議您先使用Feature工程測試,確認您的需求行為已滿足後,再將其相關配置轉移到您的module工程內。
3. SDK中的Feature工程已直接使用blc_gatt_pushHandleValueNotify()來實現,建議您可以直接參考Feature工程。
HALATIONESL
Posts: 3
Joined: Tue Nov 12, 2019 2:08 pm

Thu Dec 05, 2019 2:56 pm

Hi
1、在Feature程序中,发现MTU数据交换时,需要等待2s,这个时间有点长。
2、我在Android发送数据前,调用 Request MTU,然后延迟5s,再次下发,则是成功的。如果延迟2s,则出现开始一两次好的,然后后面一直不行。即使断开再次连接,依然不行。因为我觉得这里面8258和Android程序间的握手有什么特殊的地方。我用过其他的家IC,在连接后,直接设置MTU都是可以通信。
3、我通知的方式是用的:blc_gatt_pushHandleValueNotify,感觉上报时间有点长,是秒级的。
麻烦看下具体是什么问题导致的。谢谢!
Post Reply