xiaolong_ba 发表于 2016-7-6 12:24:44

CYPRESS BLE学习心得(六):为什么BLE 4.0和4.1最多只能发20字节...

本帖最后由 xiaolong_ba 于 2016-7-6 16:50 编辑

前言
我们使用BLE的时候,有很大多数情况都是把BLE当做无线传输,也就平常所说的透传数据,只要透传搞定了就可以做很多事情,但是有的时候一次性传几百字节发现传不了或者只传了前面20字节,然后网上一查大家都说BLE4.0和BLE4.1只能一次传20字节的数据,也不知道大伙有没有去想为什么只能传20字节呢?基于这个问题,根据我查的一些资料,现在给大家说说为什么只能传20字节。

lcptw 发表于 2016-7-6 12:29:52

本帖最后由 lcptw 于 2016-7-6 12:30 编辑

这广告打得。。。copy文字出来。

原理
因为这个是蓝牙协议标准规定的,但是20Bytes只针对Core4.0和Core4.1的蓝牙标准,具体如下:
-->-->中有这样的规定:

也就是说Core4.0和Core4.1的Payload最大只有27字节,即Payload(27字 节 )=Header(4字 节 )+MTU(23字 节 ), 其 中 MTU(23字 节 )=Opcode(1字节 )+AttHandle(2字 节 )+AttValue(20字 节 ), 即 使 你 把 MTU设 成 512字 节 这 个 是 L2CAP层 最 大 支 持 的 数 据 量 , 最 终 还 是 要 拆 解 成 20字 节 一 包 来 发 送 的 。
但是,Core4.2的蓝牙标准则是有变化的,具体如下:

即Payload(251字 节 )=Header(4字 节 )+MTU(247字 节 ), 其 中 MTU(247字 节 )=Opcode(1字 节 )+AttHandle(2字 节 )+AttValue(243字 节 )

结束语
...

就是协议定死的,大家只能这么玩。

xiaolong_ba 发表于 2016-7-6 12:39:51

本帖最后由 xiaolong_ba 于 2016-7-6 12:43 编辑

lcptw 发表于 2016-7-6 12:29
这广告打得。。。copy文字出来。

原理


如果有意见,那我就不再分享该序列心得了{:smile:}

changer15309 发表于 2016-7-6 13:37:34

支持楼主,你实测BLE透传最高有多高?TI的新stack年底出,cypress 什么时候支持?

xiaolong_ba 发表于 2016-7-6 13:46:52

changer15309 发表于 2016-7-6 13:37
支持楼主,你实测BLE透传最高有多高?TI的新stack年底出,cypress 什么时候支持? ...

1、我实测的是1KB/s,就是说串口进来给BLE,BLE再给对方的BLE,对方的BLE再到串口并显示出来,这个是1KB/s,单通道的速度,而且是收发同一个通道
2、cypress听说是也是年底或者年初吧,我也只是听说,第二代是M4+M0双核,2.6mA的0dbm 发射电流。现在蓝牙5.0刚发布,但是标准文件还没有发布,估计大家都没有这么快吧

changer15309 发表于 2016-7-6 15:09:06

xiaolong_ba 发表于 2016-7-6 13:46
1、我实测的是1KB/s,就是说串口进来给BLE,BLE再给对方的BLE,对方的BLE再到串口并显示出来,这个是1KB/ ...

1KB 有点低
4.2的已经发布很久了

xiaolong_ba 发表于 2016-7-6 15:27:18

changer15309 发表于 2016-7-6 15:09
1KB 有点低
4.2的已经发布很久了

哦哦,你说的是4.2的啊。4.2的已经出来了啊,关于透传速度的话,不知道你了解的其他是怎么样的?我也不是太清楚{:smile:}

li.wen 发表于 2016-7-6 15:28:39

xiaolong_ba 发表于 2016-7-6 13:46
1、我实测的是1KB/s,就是说串口进来给BLE,BLE再给对方的BLE,对方的BLE再到串口并显示出来,这个是1KB/ ...

不同的2.4G环境还不同! 如果是差一点的环境,Indication传输的话只有数百个字节左右。
如果是Notification方式传,网络环境稍好一点的化,用CC2540实测能够到2-3KB左右。

xiaolong_ba 发表于 2016-7-6 15:31:13

li.wen 发表于 2016-7-6 15:28
不同的2.4G环境还不同! 如果是差一点的环境,Indication传输的话只有数百个字节左右。
如果是Notificati ...

是的,我实测的速度是20Byte满载发送的,CC2540是单通道就有2K~3KB/s的速度吗?

li.wen 发表于 2016-7-6 15:54:35

xiaolong_ba 发表于 2016-7-6 15:31
是的,我实测的速度是20Byte满载发送的,CC2540是单通道就有2K~3KB/s的速度吗? ...

什么是单通道?
反正就是调用GATT_Notification();
理论上来说,最大的速率是 1000ms/7ms*20Bytes/1s = 2820 Bytes/s
7ms传一次

xiaolong_ba 发表于 2016-7-6 15:58:48

li.wen 发表于 2016-7-6 15:54
什么是单通道?
反正就是调用GATT_Notification();
理论上来说,最大的速率是 1000ms/7ms*20Bytes/1s =...

1、你这样算只是理论值,而且你还没有把从机BLE串口接收到的串口数据的时间和主机BLE打印的时间算进去
2、单通道的意思是说只有一个NOTIFY属性的特征值给主机发送数据,如果搞几个NOTIFY属性的特征值给主机发送数据的话不就是多通道吗?

changer15309 发表于 2016-7-6 16:10:04

li.wen 发表于 2016-7-6 15:54
什么是单通道?
反正就是调用GATT_Notification();
理论上来说,最大的速率是 1000ms/7ms*20Bytes/1s =...

这个算法有问题,一个event 不止发送一个notification, 我自己实测 12KB/sTI给出的参考数据是290+kbps ~ 36KB/s

xiaolong_ba 发表于 2016-7-6 16:27:26

changer15309 发表于 2016-7-6 16:10
这个算法有问题,一个event 不止发送一个notification, 我自己实测 12KB/sTI给出的参考数据是290+kbps ...

你这个是多通道才有的12KB/S吧,单通道不可能这么快的,还有TI官网给的是在空中传输的速率36KB/S,这个算出来没有意义。

changer15309 发表于 2016-7-6 16:42:18

xiaolong_ba 发表于 2016-7-6 16:27
你这个是多通道才有的12KB/S吧,单通道不可能这么快的,还有TI官网给的是在空中传输的速率36KB/S,这个算 ...

1. 多通道和单通道的提法是有问题的
2. 我用单个Notify发送
3. 无论建立多少个service,调用多少notify, 从RF层面都是一样的,一个connection event 只能发固定的个数的notification 每个notification 有效数据 20个bytes 所以计算速度的时候多个notify和单个notify区别是不大的。

changer15309 发表于 2016-7-6 16:45:27

还有,提醒楼主: 一楼的字体不符合版规,小心ID

xiaolong_ba 发表于 2016-7-6 17:08:41

changer15309 发表于 2016-7-6 16:42
1. 多通道和单通道的提法是有问题的
2. 我用单个Notify发送
3. 无论建立多少个service,调用多少notify, ...

{:funk:} 改天我再去实测下,加上串口中断啥的,应该没有这么快的{:smile:}

changer15309 发表于 2016-7-6 20:14:59

xiaolong_ba 发表于 2016-7-6 17:08
改天我再去实测下,加上串口中断啥的,应该没有这么快的

串口波特率提高到130400bps

li.wen 发表于 2016-7-6 21:24:51

changer15309 发表于 2016-7-6 16:10
这个算法有问题,一个event 不止发送一个notification, 我自己实测 12KB/sTI给出的参考数据是290+kbps ...

怎么在7ms内调用多个Notification?建立多个Service吗?然后同时发吗?

另,我发现Notification的误码率好高,好多收不到…… 可能和我的网络环境差也有关系。

不过,BLE4.0,4.1本来目标就不是用来做数传的。从“Notification“这个单词含义就可以看出来

changer15309 发表于 2016-7-7 09:00:17

li.wen 发表于 2016-7-6 21:24
怎么在7ms内调用多个Notification?建立多个Service吗?然后同时发吗?

另,我发现Notification的误码率 ...

http://processors.wiki.ti.com/index.php/CC2640_BLE_Throughput 这个应该有点参考意义
页: [1]
查看完整版本: CYPRESS BLE学习心得(六):为什么BLE 4.0和4.1最多只能发20字节...