Rotor 发表于 2014-2-28 11:01:07

求助:蓝牙串口与手机通讯,如何高速灵活安全?

本帖最后由 Rotor 于 2014-3-3 22:55 编辑

背景:
       最近在做一个智能可穿戴设备,现在使用Arduino在做原型demo 设计。
问题:
   Arduino每秒采集数据,存放到2*32K的EEPROM 里面。 蓝牙模块的波特率为38400,当手机与蓝牙建立通讯连接时,手机发个特定指令,Arduino 需要读取64K的EEPROM 里面的数据通过蓝牙传给手机。
   这里面的问题主要是我一次传输的数据相对比较大。64K/(38400/8) == 13.65 秒,也就是说全速情况下传输需要十秒以上,这样假设蓝牙断了怎么办?假设我手机放了个指令,让传另外的数据,怎么断了这个连接?
    提高波特率,最大能提高到多少,能否将数据1秒内能传完?
    我现在想的在现有波特率情况下,给数据进行封包,比如128个字节一个包,将64K数据分包传,等于实现类似于tcp的功能,重传纠错等,是否有必要?
   

   不使用封包,可能的问题场景?
    1. 比如    Ardunio------>Phone   与Ardunio------>Phone 。当arduino告诉phone 要传64k数据,phone接到命令,开始接收等待,arduino开始传数据,传了一半,断了,这时候phone 还在傻傻的等待数据,这时候等待是无意义的。这种情况该如何处理,做超时??
   
   2. 蓝牙串口传输过程中会不会由于干扰,出现误码? 我在考虑是不是有纠错的必要...

是不是有蓝牙串口的库,我可以研究学习一下,希望大牛们的指点!!!

*******************************************************************
2014-03-03【更新】下面是一款蓝牙产品的文档 ,对于我自己碰到的问题都有比较好的答案。

串口透传协议说明(桥接模式)
模块的桥接模式是指,通过通用串口和用户 CPU 相连,建立用户 CPU 和移动设备之间 的双向通讯。
用户可以通过串口,使用指定的 AT 指令对串口波特率,BLE 连接间隔进行 重设置。
针对不同的串口波特率以及 BLE 连接间隔,以 及不同的发包间隔,模块将会有不同的数据吞吐能力。在有大数据量传输,或者高实时 性需求的应用中,建议使用高速串口波特率 115200bps。
模块 BLE 连接间隔为 20 ms。此时模块具有最高理论转发能力(4K/S)。这里就 20ms 连接间隔为例,对透传协议做详细介绍。
模块可以从串口一次性最多传输 200 字节数据包,模块会根据数据包大小自动分包发 送,每个无线包最大载荷为 20 个字节。移动设备方发往模块的数据包,必须自行分包(1 -20 字节/包)发送。模块收到无线包后,会依次转发到主机串口接收端。
1. 串口硬件协议:115200 bps , 8, 无校验位,1 停止位 。
2. EN 为高电平,蓝牙模块处于完全睡眠状态。EN 置低时,模块会以 250ms 的间隔开始 广播,直到和手机对接成功。当 EN 从低到高跳变,不论模块状态,会立即进入睡眠。
3. 连接成功之后,主机(MCU)如有数据发送至 BLE 模块,需将 BRTS 拉低,主机可在约 100us 后开始发送数据。发送完毕之后主机应主动抬高 BRTS,让模块退出串口接收模式。 要注意的是,抬高 BRTS 之前请确认串口数据已经完全发送出去,否则会出现截尾现象。 4. 当模块有数据上传请求时,模块会置低 BCTS,最快会在 120us 之后开始发送,直到 数据发送完毕。模块会将 BCTS 置高。
5. 如若主机的 BRTS 一直保持低电平,则蓝牙模块会一直处于串口接收模式,会有较高 的功耗。
6. 在模块连接成功后,会给出 "TTM:OK\r\n\0" 字串,可以根据此字串来确定是否可以 进行正常转发操作。也可以通过手机发送一个确认字串到模块,主机收到后确认已经连 接。
深圳市****科技有限公司
7. 模块的蓝牙默认连接间隔为 20 ms,如果需要节省功耗采用低速转发模式,需通过 AT 指令调整连接间隔(最长连接间隔 2000ms),每个连接间隔最多传输 80 个字节,连接间 隔为 T(单位:ms),那么每秒最高转发速率 V(单位 byte/s)为:
V = 80*1000/T (V 只和 T 有关) 如果模块的蓝牙连接间隔为 20ms,而每个间隔最多传输 80 byte,因此理论最高传输
能力(转发速率)为 80*50 = 4K byte/s。测试表明,转发速率在 2 K/s 以下,漏包机率 较低。安全起见,无论是低速或者高速转发应用,都建议在上层做校验重传处理。
8. 以下是就 20ms 连接间隔的通讯模式举例,也可以自行配置。转发速率 V0 越低,丢包 率越低:

9. 串口数据包的大小可以不定长,长度可以是 200 字节以下的任意值,同样满足以上条 件即可。为最大效率地使用通讯有效载荷,同时又避免通讯满负荷运行,推荐使用 20, 40,60 字节长度的串口数据包。


zoologist 发表于 2014-2-28 12:41:02

你的数据是有点多呢,传输时间长影响用户体验的。

我觉得先是进行优化吧,尽量减少数据量。

关于误码的问题,建议你实际测量一下。写个程序发送和接受之后校验一下看看

yyy_zc 发表于 2014-2-28 22:35:51

考虑蓝牙4.0 呢

Rotor 发表于 2014-3-2 17:32:15

yyy_zc 发表于 2014-2-28 22:35 static/image/common/back.gif
考虑蓝牙4.0 呢

现在是蓝牙4.0的,因为使用的是蓝牙串口,所以传输速率有限

Rotor 发表于 2014-3-2 17:36:28

zoologist 发表于 2014-2-28 12:41 static/image/common/back.gif
你的数据是有点多呢,传输时间长影响用户体验的。

我觉得先是进行优化吧,尽量减少数据量。


嗯,数据量恐怕很难减少。可穿戴设备,比如jawbone up 用的是8M的flash, 而fib it force用的是cortex M3的芯片,也会有64K左右的数据吧,所以基本数据量不会减少,毕竟需要存7天的数据。

误码问题,其实我想知道是硬件保证了还是需要软件来实现?

zoologist 发表于 2014-3-2 19:15:58

Rotor 发表于 2014-3-2 17:36 static/image/common/back.gif
嗯,数据量恐怕很难减少。可穿戴设备,比如jawbone up 用的是8M的flash, 而fib it force用的是cortex M3 ...

我觉得应该是软件来保证,软件更灵活,可以纠错

存储的时候就考虑一下压缩的问题吧,能用一个bit就不要byte。。。。
页: [1]
查看完整版本: 求助:蓝牙串口与手机通讯,如何高速灵活安全?