0%

BLE 最大化吞吐量

Slave 通过 notification 发送 293 字节数据,ATT_MTU 为 247 字节,所以分为两次发送。

抓包看有三次 connection event,其中第二次 connection event 没有数据传输,这是为什么呢?

因为 slave 代码中调用发送 notification API 之后,要等待发送成功事件再发送下一个 notification。

而发送成功事件是在收到的下个 master 数据包的 NESN 后产生,此时 slave 看到 queue 中没有数据,就回复了 Empty PDU。

所以第三次 connection event 才将剩下的数据发送出去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
0.000000	Master	Slave		35	12	-50 dBm	Sent Write Command, Handle: 0x0049 (Unknown: Unknown)
0.000998 Slave Master 26 12 -45 dBm Empty PDU
0.007012 Master Slave 26 12 -48 dBm Empty PDU
0.007999 Slave Master 26 12 -44 dBm Empty PDU
0.014914 Master Slave 26 21 -49 dBm Empty PDU
0.015960 Slave Master 35 21 -45 dBm Rcvd Handle Value Notification, Handle: 0x004b (Unknown: Unknown)
0.021647 Master Slave 26 32 -50 dBm Empty PDU
0.022649 Slave Master 26 32 -46 dBm Empty PDU
0.029649 Master Slave 26 34 -52 dBm Empty PDU
0.030667 Slave Master 26 34 -53 dBm Empty PDU
0.036895 Master Slave 26 12 -49 dBm Empty PDU
0.045277 Slave Master 277 12 -44 dBm Rcvd Handle Value Notification, Handle: 0x004b (Unknown: Unknown)
0.046275 Master Slave 26 21 -49 dBm Empty PDU
0.047276 Slave Master 26 21 -44 dBm Empty PDU
0.051274 Master Slave 26 19 -49 dBm Empty PDU
0.053273 Slave Master 82 19 -44 dBm Rcvd Handle Value Notification, Handle: 0x004b (Unknown: Unknown)
0.060110 Master Slave 26 17 -48 dBm Empty PDU
0.060110 Slave Master 26 17 -44 dBm Empty PDU
坚持原创技术分享,您的支持将鼓励我继续创作!