资源描述
信驰达官网
串口透传协议说明(桥接模式)
模块的桥接模式是指,通过通用串口和用户CPU相连,建立用户CPU和移动设备之间的双向通讯。用户可以通过串口,使用指定的AT指令对串口波特率,BLE连接间隔进行重设置(详见后面《串口AT指令》章节)。针对不同的串口波特率以及BLE连接间隔,以及不同的发包间隔,模块将会有不同的数据吞吐能力。为协调低速CPU的使用,默认波特率为9600bps,在有大数据量传输,或者高实时性需求的应用中,建议设定为高速串口波特率115200bps,支持掉电保存。
模块BLE连接间隔为20 ms,串口波特率为115200 bps时,模块具有最高理论转发能力(4K/S)。这里就在电平使能模式下,这种配置为例,对透传协议做详细介绍。
模块可以从串口一次性最多传输200字节数据包,模块会根据数据包大小自动分包发送,每个无线包最大载荷为20个字节。移动设备方发往模块的数据包,必须自行分包(1-20字节/包)发送。模块收到无线包后,会依次转发到主机串口接收端。
1. 串口硬件协议:115200 bps , 8, 无校验位,1停止位 。
2. EN为高电平,蓝牙模块处于完全睡眠状态。EN置低时,模块会以200ms的间隔开始广播,直到和手机对接成功。当EN从低到高跳变,不论模块状态,会立即进入睡眠。
3. 连接成功之后,主机(MCU)如有数据发送至BLE模块,需将BRTS拉低,主机可在约100us后开始发送数据。发送完毕之后主机应主动抬高BRTS,让模块退出串口接收模式。要注意的是,抬高BRTS之前请确认串口数据完全发送完毕,否则会出现数据截尾现象。
4. 当模块有数据上传请求时,模块会置低BCTS,最快会在 500us之后开始发送,直到数据发送完毕。这个延时可以通过AT指令进行配置,见《串口AT指令》章节。数据发送完毕,模块会将BCTS置高。
5. 如若主机的BRTS一直保持低电平,则蓝牙模块会一直处于串口接收模式,会有较高的功耗。
6. 在模块连接成功后,会从TX给出 "TTM:OK\r\n\0" 字串,可以根据此字串来确定是否可以进行正常转发操作。当然也可以使用连接状态提示脚,也可以通过手机发送一个特定的确认字串到模块,主机收到后即可确认已经连接。当连接被APP端主动断开后,会从TX给出“TTM:DISCONNET\r\n\0”字串提示,如果是非正常断开,会从TX给出“TTM:DISCONNET FOR TIMEOUT\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越低,丢包率越低:
通讯参考
模式
BLE
连接
间隔
T (ms)
理论最高
转发能力
V (byte/s)
V = 80*1000/T
串口
包长度
L (byte)
串口发包间隔 TS (ms)
当L<80时,TS >= T
当80<L<160时,TS >= T*2
当160<L<200时,TS >= T*3
实际转发速率
V0 (byte/s)
V0 = L*1000/TS
备注
1
20
4K
80
TS >= T即可,若取TS=20ms
80*1000/20 = 4K
TS偏小,不推荐
2
20
4K
200
TS >= T*3即可,若取TS=70ms
200*1000/70 = 2.8K
3
20
4K
200
TS >= T*3即可,若取TS=80ms
200*1000/80 = 2.5K
4
20
4K
80
TS >= T即可,若取TS=35ms
80*1000/30 = 2.6K
5
20
4K
70
TS >= T即可,若取TS=30ms
70*1000/30 =2.3K
6
20
4K
60
TS >= T即可,若取TS=30ms
60*1000/30 = 2K
7
20
4K
40
TS >= T即可,若取TS=30ms
40*1000/30 = 1.3K
8
20
4K
20
TS >= T即可,若取TS=30ms
20*1000/30 = 666byte
注:可以根据实际应用设计特定的通讯模式,串口包的长度可以设计在80byte < L < 200byte之间(大包传输),根据BLE协议有以下关系:
当取L<80时,TS >= T;
当取80<L<160时,TS >= T*2;
当取160<L<200时,TS >= T*3;
满足以上条件的转发模式都是相对安全的,其中取TS=T,TS=T*2,TS=T*3,可用但不推荐,丢包率相对较高,必须加入校验重发机制。也就是说,当串口包采用80byte < L < 200byte的大包时,串口数据可以一次性传递给模块,但需要预留模块通过蓝牙发送数据的时间,否则会出现追尾现象。如:在连接间隔设置为T=20ms时,如串口数据包长度选择L=200,则TS必须大于T*3 = 60ms,取TS=70ms是比较合理的选择。
9. 串口数据包的大小可以不定长,长度可以是200字节以下的任意值,同样满足以上条件即可。但为最大效率地使用通讯的有效载荷,同时又避免通讯满负荷运行,推荐使用20,40,60字节长度的串口数据包,包间间隔取大于20ms。
注:经测试,在IOS中,调用对Characteristic的写函数使用CBCharacteristicWriteWithResponse 参数,使用带回应写模式,这种模式会降低部分转发效率,但可保证单个数据包的正确性,而使用CBCharacteristicWriteWithoutResponse 参数,使用不带回应写模式,这种模式会有利于提高转发效率,但数据包的正确性需要APP上层去校验。
深圳市信驰达科技(RFStar)
展开阅读全文