搜索
bottom↓
回复: 18
打印 上一主题 下一主题

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

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2016-7-6 12:24:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xiaolong_ba 于 2016-7-6 16:50 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

2
发表于 2016-7-6 12:29:52 | 只看该作者
本帖最后由 lcptw 于 2016-7-6 12:30 编辑

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

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

也就是说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字 节 )

结束语
...

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

出0入0汤圆

3
 楼主| 发表于 2016-7-6 12:39:51 | 只看该作者
本帖最后由 xiaolong_ba 于 2016-7-6 12:43 编辑
lcptw 发表于 2016-7-6 12:29
这广告打得。。。copy文字出来。

原理


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

出0入0汤圆

4
发表于 2016-7-6 13:37:34 | 只看该作者
支持楼主,你实测BLE透传最高有多高?  TI的新stack年底出,cypress 什么时候支持?

出0入0汤圆

5
 楼主| 发表于 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刚发布,但是标准文件还没有发布,估计大家都没有这么快吧

出0入0汤圆

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

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

出0入0汤圆

7
 楼主| 发表于 2016-7-6 15:27:18 | 只看该作者
changer15309 发表于 2016-7-6 15:09
1KB 有点低
4.2的已经发布很久了

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

出0入0汤圆

8
发表于 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左右。

出0入0汤圆

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

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

出0入0汤圆

10
发表于 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传一次

出0入0汤圆

11
 楼主| 发表于 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属性的特征值给主机发送数据的话不就是多通道吗?

出0入0汤圆

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

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

出0入0汤圆

13
 楼主| 发表于 2016-7-6 16:27:26 | 只看该作者
changer15309 发表于 2016-7-6 16:10
这个算法有问题,一个event 不止发送一个notification, 我自己实测 12KB/s  TI给出的参考数据是290+kbps ...

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

出0入0汤圆

14
发表于 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区别是不大的。

出0入0汤圆

15
发表于 2016-7-6 16:45:27 | 只看该作者
还有,提醒楼主: 一楼的字体不符合版规,小心ID

出0入0汤圆

16
 楼主| 发表于 2016-7-6 17:08:41 | 只看该作者
changer15309 发表于 2016-7-6 16:42
1. 多通道和单通道的提法是有问题的
2. 我用单个Notify发送
3. 无论建立多少个service,调用多少notify, ...

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

出0入0汤圆

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

串口波特率提高到130400bps

出0入0汤圆

18
发表于 2016-7-6 21:24:51 | 只看该作者
changer15309 发表于 2016-7-6 16:10
这个算法有问题,一个event 不止发送一个notification, 我自己实测 12KB/s  TI给出的参考数据是290+kbps ...

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

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

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

出0入0汤圆

19
发表于 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 这个应该有点参考意义
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 20:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表