低功耗蓝牙(BLE)模块及简易透传协议
低功耗蓝牙(BLE)模块及简易透传协议
协议版本:V2.32u
深圳市信驰达科技有限公司更新日期:2019 年 11 月 18 日
Shenzhen RF-star Technology Co.,Ltd.
1
前言
如何快速低成本地开发智能手机新外设
―论低功耗蓝牙技术在智能移动设备中的应用―
USB 协议的产生,让个人电脑的外设如雨后春笋般地涌现。同样,做为智能手机最新开放的低功耗蓝牙(BLE)无线应用技术,也有异曲同工之妙。BLE 技术给电子产品桥接智能手机提供了可能。相对 Wi-Fi,Bluetooth 2.0 等无线技术,有着能耗低、连接迅速、通讯距离更远等优势,让智能手机的外围电子设备有了更开阔的发展前景。
做为国际蓝牙联盟(BT-SIG)成员之一,德州仪器(TI)于 2012 年强势推出 CC254X 系列单芯片(SOC)低功耗蓝牙收发器,经典 51 内核,最强优势在于丰富的外围(21 个 IO,UART, SPI,USB2.0,PWM,ADC,Analog Comparator,op-amp),超宽的工作电压(2V ~ 3.6V),极低的能耗(0.3μA),极小的唤醒延时(4μs)。
为方便低功耗蓝牙(BLE)应用技术在各个行业产品中的移植和使用,中国 TI 无线领域战略合作伙伴信驰达科技特别推出了低功耗蓝牙透传模块,已经有两款模块成功通过了蓝牙技术联盟 BQB (EPL),FCC,CE,ROHS 认证:
RF-BM-S01(全引脚):
详见:xxxxx://xxx.xxxxxxxxx.xxx/xxx/XXX_Xxxxxx.xxx?XxxxxxxXXx00000
RF-BM-S02(小尺寸精简版,非全引脚):
详见:xxxxx://xxx.xxxxxxxxx.xxx/xxx/XXX_Xxxxxx.xxx?XxxxxxxXXx00000其他模块认证中。
模块做为智能手机外设的桥梁,使得主机端应用开发异常简单。在桥接模式下(串口),用户的现有产品或者方案配合此透传模块,能十分方便地和移动设备(需支持蓝牙 4.0)相互通讯,实现超强的智能化控制和管理。
RF-BM-S01A 低功耗蓝牙模块,采用TI 的CC2541 作为核心处理器。模块运行在 2.4 GHz ISM band,GFSK 调制方式(xx频移键控),40 频道 2 MHz 的通道间隙,3 个固定的广播通道,37 个自适应自动跳频数据通道,物理层可以和经典蓝牙 RF 组合成双模设备,2 MHz间隙能更好地防止相邻频道的干扰。宽输出功率调节(-23 dBm~0dBm),-93 dBm 高增益接收灵敏度。
此模块的设计目的是迅速桥接电子产品和智能移动设备,可广泛应用于有此需求的各种电子设备,如仪器xx,xxxx,xxxx,xxxx,xxxx,xxxx,xx玩具等。随着xx 4.3 智能设备对 BLE 技术的集成,智能手机标配 BLE 必将成为时尚,手机外设的市
场需求将成级数倍增。用户可借此模块,以最短的开发周期整合现有方案或产品,以最快的速度占领市场,同时为企业的发展注入崭新的技术力量。
版本更新记录
版本号 | 文档日期 | 更新内容 |
V2.21u | 2016/06/14 | ✓ 第一次发布 |
V2.21u | 2016/07/12 | ✓ 添加自定义 MAC 地址的 AT 指令 |
V2.32u | 2017/12/06 | ✓ 修正 Android8.0 的兼容问题。 ✓ 增加 30mS 连接间隙选项并默认为 30mS。 ✓ 增加设置 MAC 地址的 AT 指令。 ✓ 增加 RTC 写入与读取的 AT 指令。 ✓ 增加串口打开与关闭 RSSI 数值更新功能。 |
V2.32u | 2018/01/25 | ✓ 更新模块照片 ✓ 增加设备信息 APP 接口 |
V2.32u | 2018/02/26 | ✓ 增加获取模块名称 AT 指令。 ✓ 增加开启/关闭 EN 内部上拉的 AT 指令。 ✓ 修改连接成功的“TTM:OK”为“TTM:CONNECT”。 ✓ 修复通过 AT 指令修改连接间隙,第一次不返回“TTM:OK”的问 |
V2.32u | 2018/03/13 | ✓ 增加获取xx率的 AT 指令 |
V2.32u | 2018/07/06 | ✓ 修改了一些xx上的错误 |
V2.32u | 2018/08/02 | ✓ 更新公司地址 |
V2.32u | 2019/11/18 | ✓ 新增 AT 指令查询防劫持秘钥 ✓ 新增 AT 指令设定防劫持秘钥 ✓ 新增 AT 指令查询软件版本号 ✓ 新增 AT 指令恢复密码 ✓ 新增 AT 指令恢复出厂设置 |
注:
1、文档会不定期优化更新,在使用此文档前,请确保是最新版本;
2、获取最新协议或文档,请到信驰达科技官方网址下载: xxxx://xxx.xxxxxxxx.xxx/xxxxxxx/xxxxxXXXxxxxxx/。
目录
⮚ RF-BM-S02A(BQB 认证)、RF-BM-S02IA 11
⚫ 概述
模块可以工作在桥接模式(透传模式)。
模块启动后会自动进行广播,已打开特定 APP 的手机会对其进行扫描和对接,成功之后便可以通过 BLE 协议对其进行监控。
桥接模式下,用户 CPU 可以通过模块的通用串口和移动设备进行双向通讯,用户也可以通过特定的串口 AT 指令,对某些通讯参数进行管理控制。用户数据的具体含义由上层应用程序自行定义。移动设备可以通过 APP 对模块进行写操作,写入的数据将通过串口发送给用户的 CPU。模块收到来自用户 CPU 串口的数据包后,将自动转发给移动设备。此模式下的开发,用户必须负责主 CPU 的代码设计,以及智能移动设备端 APP 代码设计。
主要特点:
1、使用简单,无需任何蓝牙协议栈应用经验;
2、用户接口使用通用串口设计,全双工双向通讯,最低xx率支持 4800bps;
3、默认 30ms 连接间隔,连接快速;
4、支持 AT 指令软件复位模块,获取 MAC 地址;
5、支持 AT 指令调整蓝牙连接间隔,控制不同的转发速率(动态功耗调整);
6、支持 AT 指令调整发射功率,修改广播间隔,自定义广播数据,自定义设备识别码,设定数据延时 (用户 CPU 串口接收准备时间),修改串口xx率,修改模块名,均掉电保存;
7、串口数据包长度,可以是 200byte 以下(含 200)的任意长度(大包自动分发);
8、高速透传转发,最快可达 4K/S,可稳定工作在 2.5K-2.8K;
9、支持移动设备 APP 修改模块名称,修改串口xx率,产品识别码,自定义广播内容,广播周期,均掉电保存;
10、支持移动设备 APP 对模块进行远程复位,设置发射功率;
11、支持移动设备 APP 调节蓝牙连接间隔,掉电不保存(动态功耗调整);
12、包括调试口在内的全 IO 外扩;
13、支持连接状态、广播状态提示脚;
14、支持防劫持密码设置,修改和恢复,防止第三方恶意连接。也可不使用。独立的密码操作结果通知,方便 APP 编程;
15、支持单脚位下地(长按) 5s 恢复出厂设置,APP 远程恢复出厂设置;
16、广播内容提示模块实时系统状态,包括电池电量,自定义设备识别码(适合广播应用方案);
17、支持内部 RTC 实时时钟;
18、支持浅恢复和深度恢复模式,灵活恢复用户数据,而保留产品必须配置;
19、支持从 TX 串口获取蓝牙连接状态(连接,正常断线和超时断线)字串提示;
20、支持低电平使能模式和脉宽使能模式,支持远程关机;
21、脉冲使能模式下支持 30 秒无连接自动关机;
22、脉冲使能模式下支持xx报警提示连接超时(断线);
23、极低功耗的待机模式,CC2541 芯片官方数据睡眠电流 0.3μA,模块实测功耗如下:
事件 | 平均电流 (积分计算*1) | 平均电流 (电表测量*2) | 持续时间 | 测试条件/备注 |
模块睡眠功耗 | 0.3μA | 0.3μA | - | EN 悬空 |
广播 | 202μA | 0.25mA | 3.85ms | 广播周期 250ms |
连接事件 | 235μA | 0.35mA | 2.25ms | 连接周期 100ms |
单次 BLE 数据接收事件 | 335μA | 0.65 mA | 3.0ms | (20bytes,10 次/秒) |
单次 BLE 数据发送事件 | 340μA | 0.60mA | 3.2ms | (20bytes,10 次/秒) |
*1 注:官方测试方式:在电源回路上串一个 10R 的电阻,使用示波器截取压降波形,进行积分计算。
*2 注:万用表测试方式:用万用表 μA 或 mA 档串在电池与模块之间查看显示值。测试电压为 3.07V。
以上数据为信驰达模块 RF-CC2541A1 抽样实测数据,仅供参考。如果希望得到更低功耗,可适当增大连接间隔或者广播周期,详见《模块参数设置》和《串口 AT 指令》相关章节。
⚫ 工作模式示意图
模块桥接模式示意图
注:为避免用户 MCU 的 IO 和模块 IO 的输出电平差异导致大电流,建议在模块的输出信号线 TX,BCTS 上串入一小额隔离电阻。
⚫ 封装尺寸及脚位定义
⮚ RF-BM-S01A(BQB 认证)
RF-BM-S01A 模块尺寸图
模块引脚与实物图
引脚定义表
模块脚位序号 | 模块脚位名称 | 芯片 脚位名称 | 输入/输出 | 说明 |
Pin1 | GND | - | - | 模块地 GND |
Pin2 | VCC | - | - | 模块电源正极 2V ~ 3.6V |
Pin3 | IO7 | P2.2 | O | 睡眠状态指示 |
Pin4 | IO6 | P2.1 | O | 连接状态指示(低电平或xx提示,详见《模块参数设置》章节) |
Pin5 | EN | P2.0 | I | 模块使能控制线,默认为电平触发模式 ⮚ 电平触发模式,低电平有效,带内部上拉。 0:模块开始广播,直到连接到移动设备 1:无论模块当前状态,立即进入完全睡眠状态 (0.3μA) ⮚ 脉冲触发模式,每收到一次脉冲(W>200ms),模块会在开机(进行广播,允许被发现和连接)以及关机(完全睡眠状态)之间循环切换 (关于模式的切换请参考《模块参数设置》相关章节) |
Pin6 | IO5 | P1.7 | I/O | |
Pin7 | IO4 | P1.6 | I/O | |
Pin8 | I2C+ | - | I/O | CC2541 引出脚 I2C+,没使用 |
Pin9 | I2C- | - | I/O | CC2541 引出脚 I2C-,没使用 |
Pin10 | GND | - | - | 模块地 GND |
Pin11 | IO3 | P1.5 | I/O | |
Pin12 | IO2 | P1.4 | I/O | |
Pin13 | IO1 | P1.3 | I/O | |
Pin14 | RESTORE / IO0 | P1.2 | I/O | 恢复出厂设置触发或 ⮚ 上电后 30 秒内,保持此引脚低电平 5s ,系统会恢复部分参数(浅恢复),若保持 20s 以上则将会恢复全部参数(深度恢复)(见《系统复位与恢复》章节) ⮚ 上电后 30 秒后,做为普通 IO 使用 |
Pin15 | PWM1 | P1.1 | O | PWM 输出通道 1,没使用 |
Pin16 | PWM2 | P1.0 | O | PWM 输出通道 2,没使用 |
Pin17 | PWM3 | P0.7 | O | PWM 输出通道 3,没使用 |
Pin18 | PWM4 | P0.6 | O | PWM 输出通道 4,没使用 |
Pin19 | BRTS | P0.5 | I | 作为数据发送请求(用来唤醒模块) 0:主机有数据发送,模块将等待接收来自主机的数据,此时模块不睡眠 1:主机无数据发送,或主机数据发送完毕之后,应该将此信号线置 1 |
Pin20 | BCTS | P0.4 | O | 数据输入信号(用来唤醒主机,可选) 0:模块有数据发送到主机,主机接收模块数据 1:模块无数据发送到主机,或模块数据发送完毕之后,会将此信号置 1 |
Pin21 | TX | P0.3 | O | 模块串口发送端 |
Pin22 | RX | P0.2 | I | 模块串口接收端 |
Pin23 | ADC1 | P0.1 | I | 模拟量采集,通道 1,没使用 |
Pin24 | ADC0 | P0.0 | I | 模拟量采集,通道 0,没使用 |
Pin25 | RES | RST | I | 模块复位,低有效 |
⮚ RF-BM-S02A(BQB 认证)、RF-BM-S02IA
RF-BM-S02A 模块尺寸图
RF-BM-S02IA 模块尺寸图
模块脚位序号 | 模块脚位名称 | 芯片脚位名称 | 输入/输出 | 说明 |
Pin1 | GND | GND | - | 模块地 GND |
Pin2 | VCC | VCC | - | 模块电源正极 2V ~ 3.6V |
Pin3 | IO7 | P2.2 | O | 睡眠状态指示 |
Pin4 | IO6 | P2.1 | O | 连接状态指示(低电平或xx提示,详见《模块参数设置》章节) |
Pin5 | RES | RST | I | 模块复位,低有效 |
模块引脚图引脚定义表
Pin6 | EN | P2.0 | I | 模块使能控制线,默认为电平触发模式 ⮚ 电平触发模式,低电平有效,带内部上拉。 0:模块开始广播,直到连接到移动设备 1:无论模块当前状态,立即进入完全睡眠状态 (0.3μA) ⮚ 脉冲触发模式,每收到一次脉冲(W>200ms),模块会在开机(进行广播,允许被发现和连接)以及关机(完全睡眠状态)之间循环切换 (关于模式的切换请参考《模块参数设置》相关章节) |
Pin7 | IO5 | P1.7 | I/O | |
Pin8 | I2C+ | - | I/O | CC2541 引出脚 I2C+,没使用 |
Pin9 | I2C- | - | I/O | CC2541 引出脚 I2C-,没使用 |
Pin10 | RESTORE / IO0 | P1.2 | I/O | 恢复出厂设置触发 ⮚ 上电后 30 秒内,保持此引脚低电平 5s ,系统会恢复部分参数(浅恢复),若保持 20s 以上则将会恢复全部参数(深度恢复)(见《系统复位与恢复》章节) ⮚ 上电后 30 秒后,做为普通 IO 使用 |
Pin11 | PWM1 | P1.1 | O | PWM 输出通道 1,没使用 |
Pin12 | PWM3 | P0.7 | O | PWM 输出通道 3,没使用 |
Pin13 | PWM4 | P0.6 | O | PWM 输出通道 4,没使用 |
Pin14 | BRTS | P0.5 | I | 作为数据发送请求(用来唤醒模块) 0:主机有数据发送,模块将等待接收来自主机的数据,此时模块不睡眠 1:主机无数据发送,或主机数据发送完毕之后,应该将此信号 线置 1 |
Pin15 | BCTS | P0.4 | O | 数据输入信号(用来唤醒主机,可选) 0:模块有数据发送到主机,主机接收模块数据 1:模块无数据发送到主机,或模块数据发送完毕之后,会将此信号置 1 |
Pin16 | TX | P0.3 | O | 模块串口发送端 |
Pin17 | RX | P0.2 | I | 模块串口接收端 |
Pin18 | ADC1 | P0.1 | I | 模拟量采集,通道 1,没使用 |
注:RF-BM-S02A 由于是追求小尺寸的精简版,部分 IO 没有引出,对应功能无法使用。
⚫ 串口透传协议说明(桥接模式)
模块的桥接模式是指,通过通用串口和用户 CPU 相连,建立用户 CPU 和移动设备之间的双向通讯。用户可以通过串口,使用指定的 AT 指令对串口xx率,BLE 连接间隔进行重设置(详见后面《串口 AT 指令》章节)。针对不同的串口xx率以及BLE 连接间隔,以及不同的发包间隔,模块将会有不同的数据吞吐能力。默认xx率为 115200bps。
当模块 BLE 连接间隔为 20 ms,串口xx率为 115200 bps 时,模块具有最高理论转发能力(4K/S)。这里就在电平使能模式下,这种配置为例,对透传协议做详细介绍。
模块可以从串口一次性最多传输 200 字节数据包,模块会根据数据包大小自动分包发送,每个无线包最大载荷为 20 个字节。移动设备方发往模块的数据包,必须自行分包(1-20 字节
/包)发送。模块收到无线包后,会依次转发到主机串口接收端。 1、串口硬件协议:115200 bps,8,无校验位,1 停止位 。
2、EN 为高电平,蓝牙模块处于完全睡眠状态。EN 置低时,模块会以 200ms 的间隔开始广播,直到和手机对接成功。当 EN 从低到高跳变,不论模块状态,会立即进入睡眠。
3、连接成功之后,主机(MCU)如有数据发送至 BLE 模块,需将 BRTS 拉低,主机可在约 50ms后开始发送数据。发送完毕之后主机应主动抬高 BRTS,让模块退出串口接收模式。要注意的是,数据发送完毕后也要延时一段时间,抬高 BRTS 之前请确认串口数据完全发送完毕,否则会出现数据截尾现象。
4、当模块有数据上传请求时,模块会置低 BCTS,最快会在 500μs 之后开始发送,直到数据发送完毕。这个延时可以通过 AT 指令进行配置,见《串口 AT 指令》章节。数据发送完毕,模块会将 BCTS 置高。
5、如若主机的 BRTS 一直保持低电平,则蓝牙模块会一直处于串口接收模式,会有较高的功耗。
6、在模块连接成功后,会从 TX 给出 "TTM:CONNECT\r\n\0" 字串,可以根据此字串来确定是否可以进行正常转发操作。当然也可以使用连接状态提示脚,也可以通过手机发送一个特定的确认字串到模块,主机收到后即可确认已经连接。当连接被 APP 端主动断开后,会从 TX给出“ TTM:DISCONNECT\r\n\0 ” 字串提示, 如果是非正常断开, 会从 TX 给出 “TTM:DISCONNET FOR TIMEOUT\r\n\0”字串提示。
7、模块的蓝牙默认连接间隔为 30 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 以下,漏包机率很低。安全起见,无论是低速或者高速转发应用,都建议在上层做校验重传处理。
通讯参考模 式 | 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 |
8、以下是就 20ms 连接间隔的通讯模式举例,也可以自行配置。转发速率 V0 越低,丢包率越低:
注:可以根据实际应用设计特定的通讯模式,串口包的长度可以设计在 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上层去校验。
⚫ BLE 协议说明(APP 接口)
⮚ 蓝牙数据通道【服务 UUID:0xFFE5】
特征值 UUID | 可执行的操作 | 字节数 | 默认值 | 备注 |
FFE9 (handle:0x0013) | Write | 20 | 无 | 写入的数据将会从串口 TX 输出 |
说明:蓝牙输入转发到串口输出。APP 通过 BLE API 接口向此通道写操作后,数据将会从串口 TX 输出。详细操作规则见《串口透传协议说明(桥接模式)》章节。
⮚ 串口数据通道【服务 UUID:0xFFE0】
特征值 UUID | 可执行的操作 | 字节数 | 默认值 | 备注 |
FFE4 (handle:0x000E) | notify | 20 | 无 | 从串口 RX 输入的数据将会在此通道产生通知发给移动设备 |
说明:串口输入转发到蓝牙输出。如果打开了 FFE4 通道的通知使能开关(如果使用 BTool操作,需向 0x000E+1= 0x000F 写入 01 00),主 CPU 通过串口向模块 RX 发送合法数据后,将会在此通道产生一个 notify 通知事件,APP 可以直接在回调函数中进行处理和使用。详细操作规则见《串口透传协议说明(桥接模式)》章节。
⮚ 防劫持密钥【服务 UUID:0xFFC0】
模块支持防劫持加密,此服务可以有效防止被非授权移动设备(手机)连接到此模块。模块的初始密码为 000000 (ASCII),此情况下 APP 无需提交密码,视为不使用密码,任何安装指定 APP 的移动设备可以对其发起连接。
新密码(非全 0)的设置和备份保存由 APP 完成,如果设置了新密码(非全 0),开始启用防劫持密码。在 APP 对此模块进行连接后,必须在蓝牙连接后的 20 秒内向模块提交一次曾经设置的连接密码,否则模块会断开连接。在 APP 提交正确密码到模块之前,无法对服务通道进行任何除提交密码之外的写操作。
如果想恢复密码,需先重置模块,在 30 秒钟之内拉低 RESTORE(IO0)脚位(见脚位定义表),并保持 5 秒,模块密码会被恢复出厂设置。为了安全起见,模块不提供密码读操作,密码的记忆由 APP 来负责。
协议提供了密码通道来实现密码的提交,修改,和取消密码服务。同样也提供了密码事件通知服务来通知 APP 对密码操作的结果,其中包括密码正确,密码错误,密码修改成功,取消使用密码四个事件。
特征值 UUID | 可执行的操作 | 字节 数 | 举例 | 备注 |
FFC1 (handle: 0x0045) | write (掉电 保存) | 12 | “123456123456”(ASCII) | 提交当前密码 123456,新密码和旧密码必须一致 |
“123456888888”(ASCII) | 把旧密码 123456 修改为新密码 888888,旧密码必须正确 | |||
“888888000000”(ASCII) | 取消密码,新密码修改为 000000,旧密码必须正确 | |||
FFC2 (handle: 0x0048) | notify | 1 | 0(PWD_RIGHT_EVENT) | 提交密码正确 |
1(PWD_ERROR_EVENT) | 提交密码错误 | |||
2(PWD_UPDATED_EVENT) | 密码修改成功 | |||
3(PWD_CANCEL_EVENT) | 取消密码 |
说明:
1、密码结构为 12 字节 ASCII 码,红色部分为当前密码,蓝色部分为新密码;
2、当前密码在被 APP 修改之前,默认为“000000”;
3、通过打开通道 FFC2 的通知使能(如果使用 BTool 操作,需向 0x0048+1= 0x0049 写入 01
00),将会在此通道产生有关密码操作的执行结果通知。
4、当 APP 提交密码“123456123456” ,新密码和当前密码相同,APP 会在 FFC2 通道得到通知 notify:0( PWD_ RIGHT _EVENT ),表示提交密码正确;
5、当 APP 提交密码(红色部分)和当前密码不一致,如:“123455xxxxxx” ,x 部分不论是何值,APP 会在 FFC2 通道得到通知 notify:1( PWD_ ERROR _EVENT ),表示密码提交错误; 6、当 APP 提交密码“123456888888” ,新密码为“888888” ,当前密码为“123456” ,APP会在 FFC2 通道得到通知 notify:2( PWD_ UPDATED _EVENT ),表示密码修改成功;
7、当 APP 提交密码“888888000000” ,新密码被修改为全 0,则表示取消使用密码,APP 会在 FFC2 通道得到通知 notify:3( PWD_ CANCEL _EVENT )。
⮚ 模块参数设置【服务 UUID:0xFF90】
特征值 UUID | 可执行的操作 | 是否保存 | 字节数 | 默认值 | 备注 |
FF91 (handle: 0x0062) | Read/write | 是 | 16 | Tv232u-xxxxxxxx (带结束符的 ASCII 字串) | 设备名称, xxxxxxxx 为物理地址的后四个字节 |
FF92 (handle: 0x0065) | Read/write | 否 | 1 | 1 | 蓝牙通讯连接间隔: 0:20ms 1:30ms 2:50ms 3:100ms 4:200ms 5:300ms 6:400ms 7:500ms 8:1000ms 9:1500ms 10:2000ms |
FF93 (handle: 0x0068) | Read/write | 是 | 1 | 5 | 设定串口xx率: 0:4800 bps 1:9600 bps 2:19200 bps 3:38400 bps 4:57600 bps 5:115200 bps |
FF94 (handle: 0x006B) | write | - | 1 | 无 | 远程复位恢复控制通道: ⮚ 远程复位控制,写入 0x55 对模块进行复位 ⮚ 远程浅恢复控制,写入 0x35 对模块进行浅恢复(仅仅恢复用户数据),并复位 ⮚ 远程深度恢复控制,写入 0x36 对模块进行深度恢复(让模块所有参数回到出厂设置),并复位 |
FF95 (handle: 0x006E) | Read/write | 是 | 1 | 0 | 设定广播周期: 0:200 ms, 1:500 ms, 2:1000 ms, 3:1500 ms, 4:2000 ms, 5:2500 ms, 6:3000 ms, 7:4000 ms, 8:5000 ms, |
FF96 (handle: 0x0071) | Read/write | 是 | 2 | 0x0000 | 设定产品识别码 |
FF97 (handle: 0x0074) | Read/write | 否 | 1 | 1 | 设定发射功率: 1:0 dBm 2:-6 dBm 3:-23 dBm |
FF98 (handle: 0x0077) | Read/write | 是 | 16 | 默认广播内容 (详见《广播数据设置》章节) | 设定自定义广播数据 自定义广播数据,0 < n <= 16 |
FF99 (handle: 0x007A) | write | - | 1 | 无 | 远程控制扩展通道: 远程关机控制,当在脉冲使能模式下,向此通道写入 0x02,可对模块进行远程关机 |
FF9A (handle: 0x007D) | Read/write | 是 | 1 | 0b00000000 | 系统功能使能开关: BIT0:使能模式设置,默认为 0,对应低电平电平使能,1 表示脉冲使能,当 EN脚每收到一个脉冲,模块将会在开机(开始广播)和关机(停止广播)之间轮流切换。有效脉宽 T , 必须满足 W > 200ms。当广播时间超过 30s,仍未被连接,则会自动进入关机状态。 BIT1~BIT7:暂未使用。 |
* 注:灰色提示指令,掉电不保存。
说明:模块信息配置通道。
FF91 为设备名称设置通道。可以通过对此通道进行读写操作,来获取和设定模块名称。设置的名称长度 L , 必须满足 0<L<17 , 建议以结束符结尾( ‘\0’ ) 。 默认为 “Tv2vvv-xxxxxxxx\0”(16 byte) ,vvvv 为固件版本号,xxxxxxxx 为 MAC 地址后四个字节。
FF92 为模块连接间隔设置通道。可以通过对此通道进行写操作,来设定移动设备和模块之间的连接间隔,借此可以灵活控制设备功耗,以及数据吞吐量。为了提高连接速度,连接间隔参数不保存,上电后总以默认值(30ms)工作。测试表明,使用 iphone4s (IOS 5.1.1)从连接间隔为 500ms 修改为其他连接间隔,需要大约 30s 的等待时间。相反从高频度的连接间隔(如 20ms)进行变更,会有很高的执行效率(BLE 协议导致)。
FF93 为模块串口xx率设置通道。可以通过对此通道进行读写操作,来设定模块通用串口xx率,两秒后开始启用新的xx率,掉电保存。出厂设置默认为 5(115200 bps)。
FF94 为远程复位恢复控制通道,通过写入不同值,可以实现不同的控制功能。
1、对此通道写入 0x55,对模块进行软件复位。
2、过此通道写入 0x35,对模块进行浅恢复,所有用户参数将恢复到出厂设置控制,包括 IO
输出口的状态,PWM 的初始化模式,以及用户密码,之后会复位模块。
3、过此通道写入 0x36,对模块进行深度恢复,所有系统参数将恢复到出厂设置控制,之后会复位模块。
FF95 为模块广播周期设置通道。可以通过对此通道进行读写操作,来设定模块广播周期。此参数掉电保存,出厂设置默认为 0 (200ms)。
FF96 为模块产品识别码设置通道。可以通过对此通道进行读写操作,来设定模块识别码, APP 端可以通过此识别码来进行过滤和连接指定的产品类型,此参数掉电保存。出厂设置默认为 0x0000。
FF97 为模块发射功率设置通道。可以通过对此通道进行写操作,来设定模块发射功率,此参数掉电不保存。出厂设置默认为 1 ( 0 dBm )。
FF98 为模块广播内容设置通道。可以通过对此通道进行写操作,来自定义模块的广播数
据,此参数掉电保存。当数据为全 0(16 byte)时,认为不使用自定义广播数据,而使用默认的广播数据,详见《广播数据设置》章节。
FF99 为远程控制关机通道。当在脉冲使能模式下,对此通道写入 0x02,可对模块进行远程关机,在电平使能模式下无效。
FF9A 为系统功能使能开关通道,通过 BIT0~BIT7 的写操作可以开启和关闭系统的特定功能。1 为开启,0 为关闭。默认为全 0b00000000。此设置掉电保存。
BIT0:使能模式默认为 0,对应低电平使能(开始广播),高电平睡眠(0.3μA)。此位被置成 1,则模块会被设置为脉冲使能模式,每得到一次合法脉宽(W>200 ms),模块将轮流在开(开始广播)和关(深度睡眠 0.3μA)之间切换。如果模块处于正连接状态,关无效。
如果正处于广播状态,关有效。
BIT1~BIT7:保留。
电平使能模式
开始广播,可被发现和连接 进入睡眠 (关机)
脉冲使能模式
W>200ms
开始广播,可被发现和连接
进入睡眠 (关机)
电平使能模式和脉冲使能模式示意
在电平使能模式下,广播(此状态下,可被发现,被连接)有以下特性:
1、如果 EN 脚被使能后(置低),模块会保持一直广播,直到被连接,或者 EN 被置高。
2、正常断开或者超时断开后,只要 EN 置低,模块总会保持广播,直到再次被连接。
在脉冲使能模式下,广播(此状态下,可被发现,被连接)有以下特性:
1、如果使能后持续广播 30 秒,仍没被连接,模块会停止广播进入关机状态。
2、正常断开后持续广播 30 秒,仍没被连接,模块会停止广播进入关机状态。
3、连接超时断开后会一直保持广播,直到再次被连接,EN 关机无效。
在电平使能模式下,IO6 做为信号提示引脚时(IO6 默认为蓝牙连接状态提示),当已连接输出低电平,当蓝牙未连接或者断开(超时断开和 APP 主动断开)后处于未连接状态时,输出高电平。
在脉冲使能模式下,IO6 做为信号提示引脚时(IO6 默认为蓝牙连接状态提示),输出信号有以下特性:
1、当已连接,会输出低电平脉冲(1s)一次。
2、当蓝牙正常断开(APP 主动断开)时,会输出低电平脉冲(0.5s)一次。
3、当蓝牙超时断开时,会输出 2Hz 的xx,这种提示会持续 2 分钟,期间会一直保持广播,并不可关机,直到模块重新连接上主设备。
不同使能模式下的广播状态和 IO6 的提示方式:
模块状态 | 使能后未连接 | 连接 | 正常断开 | 超时断开 | ||||
IO6 提示方式 | 广播状态 | IO6 提示方式 | 广播状态 | IO6 提示方式 | 广播状态 | IO6 提示方式 | 广播状态 | |
电平使能模式 | 高电平 | 保持广播 | 低电平 | 停止广播 | 高电平 | 保持广播 | 高电平 | 保持广播 |
脉冲使能模式 | 高电平 | 广播 30 秒 | 一个低电平脉冲 w=1 秒 | 停止广播 | 一个低电平脉冲 w=0.5 秒 | 广播 30 秒 | 2Hz xx持续 2 分 钟 | 保持广播 |
⮚ 设备信息【服务 UUID:0x180A】
特征值 UUID | 可执行的操作 | 字节数 | 默认值 | 备注 |
2A23 (handle:0x0003) | Read | 8 | xxxxxx0000xxxxxx (Hex) | 系统 ID, xxxxxxxxxxxx 为模块芯片物理地址,低字节在前 |
2A26 (handle:0x0005) | Read | 7 | V2.32u (ASCII) | 模块软件版本号 |
说明:模块信息读取通道。
2A23 为模块信息获取通道,可以通过对此通道进行读操作,来获取此模块 ID。格式如 xxxxxx0000xxxxxx,其中 xx 部分为模块芯片的物理地址 MAC,六个字节,低字节在前。
2A26 为模块软件版本号读取通道,可以通过对此通道进行读操作,来获取模块软件版本,格式为 Vx.xx。x.xx 为固件版本号。
⚫ 串口 AT 指令
以"TTM"开头的字串会当成 AT 指令进行解析并执行,并从串口原样返回,之后会追加输出执行结果,"TTM:OK\r\n\0"或 "TTM:ERP\r\n\0"等。不以“TTM”开头的串口数据包,将被视为透传数据。
⮚ 连接间隔设定
向串口 RX 输入以下字串,设定 BLE 连接间隔:"TTM:CIT-Xms" 。
其中 X="20","30","50","100","200","300","400","500","1000","1500","2000",
单位 ms(以上数据格式都为 ASCII 码)。如“TTM:CIT-30ms”表示设定连接间隔为 30ms。在执行完此指令之后,会从串口 TX 得到以下确认:
"TTM:TIMEOUT\r\n\0" 表示更改超时,修改失败;
"TTM:OK\r\n\0" 表示更改成功,正以新的连接间隔在运行;
这个连接间隔设定的成功与否取决于移动设备对连接间隔的限制,不同的 IOS 版本最大连接间隔也有不同。使用 iPhone 4s(IOS 5.1.1)中测试,最快支持 30ms,最慢支持 2s,另外,由于 BLE 协议内部机制,不同的连接间隔下此指令会有不同的执行效率。在 IOS5.1.1 中,从当前连接间隔为 2000ms 的情况下(最长 2000ms),改变到其他连接间隔,可能最长需要等待约 100s 左右,而在其他高频度连接间隔(如:100ms)下执行此 AT 指令,会有很快的执行效率。
注:此连接间隔掉电不保存,并且更改指令只有在连接成功后有效。
⮚ 获取模块名称
向串口 RX 输入以下字串:"TTM:NAM-?"。
会从 TX 收到:" TTM:NAM-xxxxxxxxxxxx\r\n\0",字串后面"xxxxxxxxxxxx"为蓝牙模块名称。
⮚ 模块重命名
向串口 RX 输入以下字串,其中“Name”为模块名称,长度为 16 个字节以内,ASCII码格式:" TTM:REN-" + Name。
如“TTM:REN-ABC123”表示将模块重命名为“ABC123”。
若修改成功则会从 TX 收到 "TTM:OK\r\n\0" 确认,如果指令格式不对,则会返回:
"TTM:ERP\r\n\0"
测试表明,由于 IOS 版本关系,设备名称修改在 IOS6 以上版本中可立即变更,在 IOS5
中无法立即变更。此名称掉电保存。
⮚ 获取xx率
向串口 RX 输入以下字串,设定xx率:"TTM:BPS-?"。
会从 TX 收到:"TTM:BPS-X" 。其中 X="4800","9600","19200","38400","57600",
"115200"(以上数据格式都为 ASCII 码)。
⮚ xx率设定
向串口 RX 输入以下字串,设定xx率:"TTM:BPS-X"。
其中 X="4800","9600","19200","38400","57600","115200",(以上数据格式都为
ASCII 码)。如“TTM:BPS-115200”表示设定xx率为 115200bps。在执行完此指令之后会从 TX 收到 "TTM:BPS SET AFTER 2S..." 确认,如果设置值不在选项中,或者指令格式不对,则返回:"TTM:ERP\r\n\0"。
测试表明,在 IOS5 中,xx率修改无法成功,但在 IOS6 中可立即变更。用户可以通过 PC 进行设置后使用,也可以通过移动设备的 BLE APP 接口进行设置。见《模块参数设置【服务 UUID:0xFF90】》。
⮚ 获取物理地址MAC
向串口 RX 输入以下字串:"TTM:MAC-?"。
会从 TX 收到:" TTM:MAC-xxxxxxxxxxxx\r\n\0",字串后面"xxxxxxxxxxxx"为 6 字节模块蓝牙地址。
⮚ 设置模块MAC 地址
向串口 RX 输入以下字串:"TTM:MAC-xxxxxxxxxxxx",其中"xxxxxxxxxxxx"为待设置的 6
字节模块蓝牙地址。
会从 TX 脚收到 "TTM:OK\r\n\0" 确认,如果指令格式不对,则会返回:"TTM:ERP\r\n\0"。设定掉电保存,重启模块后,模块将按照新的 MAC 地址进行工作。
⮚ 广播周期设定
向串口 RX 输入以下字串,设置模块的广播周期,T = X * 100ms:"TTM:ADP-(X)"。
其中 X = "2","5","10","15","20","25","30","40","50"之一(以上数据格式都为 ASCII 码)。
如“TTM:ADP-(2)”表示设定广播周期为 200ms。会从 TX 脚收到 "TTM:OK\r\n\0" 确认,如果指令格式不对,则会返回:"TTM:ERP\r\n\0"。
广播周期设定掉电保存,重启模块后,模块将按照新的广播周期进行广播。
⮚ 附加自定义广播内容
向串口 RX 输入以下字串,自定义广播内容:"TTM:ADD-"+ Data,其中 Data 为准备附加的广播的数据, 长度 0< L <= 16 , 以 ASCII 码格式输入。 例如向串口 RX 输入 “TTM:ADD-Advertisement!”,会从 TX 脚收到 "TTM:OK\r\n\0" 确认,如果指令格式不对,则会返回:"TTM:ERP\r\n\0"。
此指令设置后立即生效,可以通过此功能广播一些自定义内容,数据掉电保存。如果设置为 16 个全 0 数据,则认为不使用自定义广播数据,而是使用默认广播内容。
⮚ 定义产品识别码
向串口 RX 输入以下字串,自定义产品识别码;
"TTM:PID-"+ Data
其中 Data 为两个字节的产品识别码,范围 0x0000~0xFFFF ( L = 2 ),每个字符以 ASCII
码格式向串口RX 输入。例如向串口 RX 输入“TTM:PID-RS(” “RS 对应的十六进制为 0x5253”),
会从 TX 脚收到 "TTM:OK\r\n\0" 确认,如果指令格式不对,则会返回:
"TTM:ERP\r\n\0"
此识别码掉电保存,会出现在广播中,可以以此来过滤设备或判断是否是特定的产品。
⮚ 发射功率设定
向串口 RX 输入以下字串,设置相应的发射功率,单位 dBm。 "TTM:TPL-(X)"
其中 X="0","-6","-23"(以上数据格式都为 ASCII 码)。如“TTM:TPL-(0)”表示设定发射功率为 0dBm。之后会从 TX 脚收到 "TTM:OK\r\n\0" 确认,并且模块立即使用新的发射功率进行通讯,如果指令格式不对,则会返回:
"TTM:ERP\r\n\0"
注:此参数掉电不保存。
⮚ EN 脚内部使能
向串口 RX 输入以下字串,设置 EN 脚开启内部上拉,默认状态。
"TTM:EUP-ON\r\n\0"
向串口 RX 输入以下字串,设置关闭 EN 脚开启内部上拉,EN 脚拉低使能广播时,能节省 80 多μA 电流。
"TTM:EUP-OFF\r\n\0"
设置成功后 TX 脚收到 "TTM:OK\r\n\0" 确认,如果指令格式不对,则会返回:
"TTM:ERP\r\n\0"
注:此参数掉电不保存,并且掉电后默认恢复上拉状态。
⮚ RSSI 信号强度输出
向串口 RX 输入以下字串,设置开启 RSSI 信号强度定时打印,间隔时间 1 秒。
"TTM:RSI-ON"
向串口 RX 输入以下字串,设置关闭 RSSI 信号强度定时打印。
"TTM:RSI-OFF"
设置成功后 TX 脚收到 "TTM:OK\r\n\0" 确认,如果指令格式不对,则会返回:
"TTM:ERP\r\n\0"
如果已开启 RSSI 打印功能,则每间隔 1 秒钟时间打印一次 RSSI 信号强度字符串,
"TTM:RSI-xx\r\n\0"(例如:RSSI 为-63dBm 则打印字符为"TTM:RSI-63\r\n\0")注:此参数掉电不保存,并且连接断开后自动关闭 RSSI 输出。
⮚ RTC 设定与获取
向串口 RX 输入以下字串,设置 RTC 时间,格式为年 4 位,月、日、时、分、秒各 2 位。
"TTM:RTC-xxxxxxxxxxxxxx"
比如设定 2017 年 1 月 2 日 3 时 4 分 5 秒则需输入的字符为"TTM:RTC-20170102030405"设置成功后 TX 脚收到 "TTM:OK\r\n\0" 确认,如果指令格式不对,则会返回: "TTM:ERP\r\n\0"
向串口 RX 输入以下字串,设置获取当前系统时间。
"TTM:RTC-?\r\n\0"
设置成功后 TX 脚收到 "TTM:RTC-xxxxxxxxxxxxxx\r\n\0",格式与设定 RTC 格式相同;如果指令格式不对,则会返回:"TTM:ERP\r\n\0"
注:此参数掉电不保存,并且模块重新上电后 RTC 需要重新设定。
⮚ 数据延时设定
向串口 RX 输入以下字串,设置 BCTS 输出低到串口 TX 输出数据之间的延时,单位 ms。 "TTM:CDL-Xms"
其 中 X="0","2","5","10","15","20","25" 之 一 ( 以 上 数 据 格 式 都 为 ASCII 码 )。 如 “TTM:CDL-2ms”表示设定延时为 2ms,如果指令无误,会从 TX 收到 "TTM:OK\r\n\0" 确认,如果指令格式不对,则会返回:
"TTM:ERP\r\n\0"
为让用户 CPU 有足够的时间从睡眠中唤醒,到准备接收,模块提供了这个延时(X)设定,在模块串口有数据发出之前会置低 BCTS,而 BCTS 输出低到模块 TX 输出数据之间的延时由此参数设定。可以保证最小延时不小于 X,实际延时会是 T = ( X +Y ) ms,其中 500μs<Y<1ms。此参数掉电保存。
BCTS 串口数据提醒信号
TX_DATA 模块串口输出数据
T=
模块串口输出数据延时设定示意图
⮚ 获取模块版本号
向串口 RX 输入以下字串:"TTM:VER-? "。
会从 TX 脚收到"TTM:VER-XXXXXX",X 为模块的版本号,如果指令格式不对,则会返回:"TTM:ERP\r\n\0"。
⮚ 获取模块连接密码
向串口 RX 输入以下字串:"TTM:PWD-?"。
会从 TX 脚收到 "TTM:PWD-XXXXXX" ,X 为 6 个字节的连接密码,如果指令格式不对,则会返回:"TTM:ERP\r\n\0"。
⮚ 设置模块连接密码
向串口 RX 输入以下字串,可以设置或者更改模块的连接密码,长度为 6 个字节的数字格式。
"TTM:PWD-xxxxxx"。
会从 TX 脚收到 "TTM:OK-xxxxxx\r\n\0" 确认,如果指令格式不对,则会返回:
"TTM:ERP\r\n\0"。
⮚ 模块复位—上电复位
向串口 RX 输入以下字串:"TTM:RST-SYSTEMRESET",会迫使模块软复位一次。
⮚ 模块复位—浅恢复
向串口 RX 输入以下字串:"TTM:RST-RSTPWD",会迫使模块浅复位一次,恢复模块的密码参数。
⮚ 模块复位—深度恢复
向串口 RX 输入以下字串:"TTM:RST-RESET",会迫使模块深度复位一次恢复模块所有修改过的参数,使其恢复到出厂状态。
AT 指令格式 | 掉电保存 | 参数说明 | 可能的回应 | 含义 |
TTM:CIT-Xms (连接成功后才有效) | 否 | X="20","30","50","100", "200","300","400","500", "1000","1500","2000" 设 置相应的 BLE 连接间隔,单 位 ms | TTM:TIMEOUT\r\n\0 TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置超时设置成功错误参数 |
TTM:NAM-? | 是 | 获取模块名称 | TTM:NAM-xxxxxxxxxxx x,"xxxxxxxxxxxx"为模 块名称 | 返回模块名称 |
TTM:REN-Name | 是 | Name,新模块名,长度为 16 字节以内的任意字串。 | TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:BPS-? | - | 获取xx率 | TTM:BPS-X, "X"为xx率 | 返回xx率 |
TTM:BPS-X | 是 | X="4800","9600","19200"," 38400","57600","115200" 设置相应的xx率 | TTM:BPS SET AFTER 2S ...\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:MAC-? | - | 获取 MAC 地址 | TTM:MAC-xxxxxxxxxxx x,"xxxxxxxxxxxx"为模 块 MAC 地址 | 返回 MAC 地址 |
TTM:MAC-X | 是 | X 为 12 位 MAC 字符,比如 123456789ABC | TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:ADP-(X) | 是 | X = "2","5","10","15","20", "25","30","40","50",设置相 应的广播周期, T = X * 100ms | TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:ADD-Data | 是 | Data 为自定义广播数据,数据长度 L <= 16; | TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:PID-Data | 是 | Data 为自定义产品识别码,数据长度 L = 2 ,默认为 00 00; | TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:TPL-(X) | 否 | X="0","-6","-23" 设置相应的发射功率,单位 dBm | TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:EUP-ON | 否 | 开启 EN 脚上拉使能 | TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:EUP-OFF | 否 | 关闭 EN 脚上拉使能 | TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:RSI-ON | 否 | 开启定时 1 秒获取 RSSI 信号功能 | TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:RSI-OFF | 否 | 关闭获取 RSSI 信号功能 | TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:RTC-? | 否 | 获取 RTC 时间 | TTM:RTC-xxxxxxxxxxx xxx , "xxxxxxxxxxxxxx"为年、月、日、时、分秒 | 获取 RTC 时间 |
TTM:RTC-X | 否 | X 为年、月、日、时、分秒 | TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:CDL-Xms | 是 | X="0","2","5","10","15", "20","25"。设置 BCTS 输出 低到串口输出数据之间的延时,单位 ms | TTM:OK\r\n\0 TTM:ERP\r\n\0 | 设置成功错误参数 |
TTM:VER-? | - | 获取版本号 | TTM:VER-XXXXXX, "X"为模块版本号 | 返回版本号 |
TTM:PWD-? | - | 获取密码 | TTM:PWD-XXXXXX | 返回密码 |
TTM:PWD-xxxxxx | 是 | X 为 6 位纯数字, 比如 123456 | TTM:OK-xxxxxx\r\n\0 TTM:ERP\r\n\0 | 返回 MAC 地址 错误参数 |
TTM:RST-SYSTEM RESET | - | 让模块系统复位 | Module is working! | 复位模块 |
TTM:RST-RSTPWD | - | 浅恢复 | Module is working! | 恢复出厂密码 |
TTM:RST-RESET | - | 深度恢复 | Module is working! | 恢复所有参数 |
⚫ 广播数据设置
默认广播数据:当模块的 EN 脚被置低后,模块将会进行默认间隔为 200ms 的广播,在广播数据中的 GAP_ADTYPE_MANUFACTURER_SPECIFIC(IOS 编程中官方定义宏),域中包含了以下内容,默认广播内容为 9 个字节:
{
0x00,0x00, 自定义设备类型编码,默认为 00 00 ,可由 AT 指令进行设定;
0x00,0x00,0x00,0x00, 无定义;
0x00, 无定义;
0x00,0x00, 无定义;
}
自定义广播数据:如果使用 AT 指令自定义了广播内容,最大长度为 16 字节(蓝色部分),在广播数据中的 GAP_ADTYPE_MANUFACTURER_SPECIFIC 域中将包含了以下内容,长度为 2+n 个字节:
{
0x00,0x00, 自定义设备类型编码,默认为 00 00 ,可由 AT 指令进行设定;
Data [n], 自定义广播数据,n <= 16 ;
}
注:自定义广播数据可通过 AT 指令修改,并且掉电保存。重新上电后,将会使用最后自
定义的广播数据。如果自定义广播数据为全 0 (16 byte),则认为不使用自定义广播,而使用系统默认的广播内容。为避免广播数据过长带来多余的功耗,也可以通过设置自定义广播数据为 1 字节的任意值。
⚫ 系统复位与恢复
x模块复位有三种方法,其中第三种方法可以恢复系统参数:
1、使用 AT 指令复位模块(详见《串口 AT 指令》章节);
2、使用服务通道接口,用 APP 对模块进行远程复位。(详见《BLE 协议说明(APP 接口)-模块参数设置》章节);
3、使用硬件 RESTORE 脚位(见脚位定义表),上电 30 秒内,将此脚位拉低 5 秒后,模块的系统参数会恢复用户级参数(浅恢复,释放此脚位后立即复位),如果持续拉低 20 秒后会将模块的所有系统参数恢复到出厂设置(深度恢复),并立即复位。此脚位带内部上拉,默认不会进入此模式。
浅恢复中被恢复的系统参数包括:
a) 防劫持密码,恢复到“000000”,默认不使用密码;深度恢复中除了上述系统参数外,还包括以下参数:
a) 串口xx率,恢复到 115200bps;
b) 设备名称,恢复到"Tv232u-XXXXXXXX",X 是 MAC 的后四个字节;
c) 串口数据延时,恢复到 0 ( 500μs < Delay < 1ms );
d) 广播周期,恢复到 2 (200ms);
e) 连接间隔,恢复到 30ms;
f) 发射功率,恢复到 0dBm;
g) 产品识别码,恢复到 0x0000;
h) 自定义广播长度,恢复到 0;
i) 自定义广播数据,恢复到全 0,不使用自定义广播数据,使用默认广播数据;
j) 使能模式恢复到 0,默认电平使能模式。
注:RESTORE(IO0)脚位的特殊性,在电路设计中,需避免上电前 30 秒持续下地,否则会进入恢复模式。
⚫ IOS APP 编程参考
模块总是以从模式进行广播,等待智能移动设备做为主设备进行扫描,以及连接。这个扫描以及连接通常是由 APP 来完成,由于 BLE 协议的特殊性,在系统设置中的扫描蓝牙连接没有现实意义。智能设备必须负责对 BLE 从设备的连接,通讯,断开等管理事宜,而这一切通常是在 APP 中实现。
有关 BLE 在 IOS 下的编程,最关键的就是对特征值(Characteristic,本文叫通道)的读,写,以及开启通知开关。通过对通道的读写即可实现对模块直驱功能的直接控制,无需额外的 CPU。典型函数说明摘抄如下:
/*!
* @method writeValue:forCharacteristic:withResponse:
* @param data The value to write.
* @param characteristic The characteristic on which to perform the write operation.
* @param type The type of write to be executed.
* @discussion Write the value of a characteristic.
* The passed data is copied and can be disposed of after the call finishes.
* The relevant delegate callback will then be invoked with the status of the request.
* @see peripheral:didWriteValueForCharacteristic:error:
*/
- (void)writeValue:(NSData *)data forCharacteristic:(CBCharacteristic *)characteristic type:( CBCharacteristicWriteType)type;
说明:对某个特征值进行写操作。
NSData *d = [[NSData alloc] initWithBytes:&data length:mdata.length]; [p writeValue:d
forCharacteristic:c
type:CBCharacteristicWriteWithoutResponse];
/*!
* @method readValueForCharacteristic:
* @param characteristic The characteristic for which the value needs to be read.
* @discussion Fetch the value of a characteristic.
* The relevant delegate callback will then be invoked with the status of the request.
* @see peripheral:didUpdateValueForCharacteristic:error:
*/
- (void)readValueForCharacteristic:(CBCharacteristic *)characteristic;
说明:读取某个特征值。
[p readValueForCharacteristic:c];
/*!
* @method setNotifyValue:forCharacteristic:
* @param notifyValue The value to set the client configuration descriptor to.
* @param characteristic The characteristic containing the client configuration.
* @discussion Ask to start/stop receiving notifications for a characteristic.
* The relevant delegate callback will then be invoked with the status of the request.
* @see peripheral:didUpdateNotificationStateForCharacteristic:error:
*/
- (void)setNotifyValue:(BOOL)notifyValue forCharacteristic:(CBCharacteristic *)characteristi c;
说明:打开特征值通知使能开关。
[self setNotifyValue:YES forCharacteristic:c];//打开通知使能开关 [self setNotifyValue:NO forCharacteristic:c]; //关闭通知使能开关
/*
* @method didUpdateValueForCharacteristic
* @param peripheral Pheripheral that got updated
* @param characteristic Characteristic that got updated
* @error error Error message if something went wrong
* @discussion didUpdateValueForCharacteristic is called when CoreBluetooth has update d a characteristic for a peripheral. All reads and notifications come here to be processed.
*
*/
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharact eristic *)characteristic error:(NSError *)error
说明:每次执行完读取操作后,会执行到这个回调函数。应用层在此函数内保存读取到的数 据。
有关设备的扫描、连接以及其他通讯细节,可以参考信驰达科技提供的基于 IOS 的透传模块测试 APP 源码(Module test)。里面实现了对 FFE9 和 FFE4 转发蓝牙数据到串口,转发串口数据到蓝牙两个通道(特征值)的操作(通知和写操作),其他直驱功能控制方法类似,都是通过对某个通道(特征值)的读写来实现。只是通道 UUID 以及读写字节数不同。(相关源码请向业务索取)
⚫ 用 APP 测试透传功能
模块 IOS 平台的测试工具(APP)可以在 App Store 下载到。打开操作系统为 IOS6以上设备中的 App Store,搜索 Module Tools,下载安装,进行测试。你有三种方法安装此应用:
1. 从 APP Store 上搜索下载安装,需要 App 苹果账户,免费申请;
2. 使用源码编译下载到你的苹果设备,需要苹果开发者账户;
3. 越狱你的苹果设备,到信驰达官网下载 IPA 文件(相当于 windows 的 exe 文件),使用快用助手,PP 助手,等工具安装。
APP 打开后界面如图1所示,点击右上角处蓝牙图标进行扫描,扫描到的设备会出现在列表中(或许会提示需要打开蓝牙),如图2所示;点击某个设备,会进行连接,连接成功后会跳转到控制主界面,如图3所示。
图1 图2
如果模块串口已经就绪(连接了主 CPU,或者串口终端),即可以开始工作,可进行手动和自动收发测试。如图4所示,Rx 是主机 CPU 或者串口中断发出的数据包,Tx 是 iPhone 发出的数据包。
图3 图4
注:如果使用串口终端进行测试,串口终端的数据要发到手机,必须保持 BRTS 置低,防止模块进入睡眠。
关于 IOS 编程,根据低功耗蓝牙协议,移动设备发送数据可以通过 B 通道(发送)的对应服务(UUID)进行写操作。模块数据到移动设备的数据传送,是通过通知的形式进行,因此在 APP 启动后需要打开 A 通道(接收)对应服务(UUID)的通知(Notification)使能,之后模块串口收到的数据包会自动发送到移动设备。相关参考资料可以向业务询问索取。
⚫ 用 USB Dongle 及 BTool 测试
BLE 模块可使用 TI 官方 CC2540 MiniDK 开发套件中的 USB Dongle 模拟手机配合安装目录下的C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\Btool\BTool.exe 进行蓝牙通讯测试。
这个 USB Dongle 需要使用安装目录下
C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\HostTestApp\CC2540 的工程项目。编译下载到 USB dongle 中。具体的 BTOOL 的使用详情请参考官方说明文档 CC2540 Mini Development Kit User's Guide (Rev. B).pdf。
⮚ 连接 BLE 模块
USB Dongle 和模块的连接是通讯的基础,扫描连接的操作步骤如下:
1、打开 C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\HostTestApp 目录下的工程文件,编译,下载到 USB Dongle 中;
2、将模块上电(3 ~ 3.3V);
3、将模块使能脚 EN 下地,模块开始广播;
4、将 USB Dongle 插入 PC USB 口,会在硬件管理中出现一个串口设备(如:COM25);
5、打开 C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\BTool\BTool.exe;
6、菜单 Device -> New Device,选择 4 中发现的串口,选默认设置,点击 OK;
7、扫描连接,按照箭头的方向进行扫描,连接,其中 F4:B8:5E:96:8C:81 为模块的物理地址。连接前请确认是否为目标模块。
8、连接成功后,左边会出现已经连接的模块信息 Connection Info。
这样就已经成功连接了,下面就可以开始测试直驱功能以及蓝牙串口转发功能(透传)。
⮚ 测试透传功能
将模块如系统示意图中的桥接模式,连接到串口终端或者单片机,便可以进行蓝牙串口转发测试。注:BRTS 必须被置低,否则串口数据无法被模块 RX 接收。
1、使用 BTool 使 BLE 模块与 USB Dongle 建立连接后(连接过程参考上节说明),通过对 Handle : 0x000F 写入 01:00,来打开串口数据通道的自动通知开关,如下图所示。如果主机将合法数据包发送到 BLE 模块的 RX 端,模块将会自动以通知的形式发到 BTool,左侧的显示栏会显示具体的数据。MCU 发给模块的串口数据可以是 200 字节以内的任意长度。
模块发送至移动设备使用串口数据通道,对应特征值(通道)的 UUID 如下:
名称 | 无线包数据长度 | UUID | Handle | Notification Enable Handle |
串口数据通道 | 20 Bytes | 0xFFE4 | 0x000E | 0x000F |
2、通过 BTool 写 1-20 字节数据到模块。当模块收到来自 BTool 的写操作,模块会通过串口发送到 MCU。用户可以通过读取 MCU 检验数据是否正确,也可以通过串口助手显示 BTool写入模块的数据。
例如:写 7 个字节的数据到模块,是通过 Handle 0x0013 写入,如下图所示。
注:可写入 1-20 个字节到模块,但不能超过 20 个字节,因此在手机端编程时,必须自
行分包发送,每包长度不得超过 20 字节。
移动设备发往模块通过蓝牙数据通道,对应特征值(通道)的 UUID 如下:
名称 | 无线包数据长度 | UUID | Handle |
蓝牙数据通道 | 20 Bytes | 0xFFE9 | 0x0013 |
透传功能的测试,可以通过电平转换模块直连 PC 串口,通过串口终端来测试。
参考截图如下:
1、BTool 收发数据截屏。
2、PC 终端连接透传模块截屏,注 BRTS 必须被置低,否则串口数据无法被模块接收。
⚫ 主机参考代码(透传)
逻辑关系:模块间是用 BCTS、BRTS 两个 IO 口进行发送接收的通知和控制。
这两个 IO 常态高位,置低触发,如果模块有数据要发,置低 BCTS 通知单片机接收,如果单片机有数据要发,置低 BRTS 通知模块接收。示意性代码如下:
void main(void)
{
EN = 0 ; //使能EN,开始广播
while(!BLEMoudleAck("TTM:OK\r\n\0")); //等待手机端扫描,连接
//等待连接成功,也可加入限时等待
//也可判断连接提示信号线的电平
BRTS = 0; //BRTS 置低通知模块准备接收
halMcuWaitMs(50); //延迟 50ms UARTWrite( HAL_UART_PORT_0, "TTM:CIT-100ms", 14);
//修改连接间隔,从串口得到确认:
halMcuWaitMs(50); //延迟 50ms,确保数据已经发出
BRTS = 1; //RTS 置高,发送完毕
while(!BLEMoudleAck("TTM:OK\r\n\0")); //等待设置成功,也可加入限时等待
while(1){ //循环收发测试
while(1){
if(BCTS == 0){ //检测,若BCTS 置低则准备接收 while(BCTS==0); //等待发送完毕,也可限时等待 if(UARTRead(uartBuffer) == SUCCESS) //串口读取数据
{... ...} //使用数据
}
BRTS = 0; //RTS 置低通知模块准备接收
halMcuWaitMs(50); //延迟 50ms
send_TX("1234567890"); //发送任意数据(200byte 以内)
halMcuWaitMs(50); //延迟 50ms,确保数据已经发出
BRTS = 1; //RTS 置高,发送完毕
halMcuWaitMs(20); //延迟再发下一个包,延时视包大小而定
}
}
}
}
⚫ 联系我们
深圳市信驰达科技有限公司
SHENZHEN RF STAR TECHNOLOGY CO.,LTD.
Tel:0755–0000 0000 Web: xxx.xxxxxxxx.xxx Fax:0000-00000000 E-mail:xxxxx@xxxxxxxx.xxx
地址:深圳市南山区xx园科技南一道创维大厦 C 座 601 室
Add:Room 601,Block C,Skyworth Building,Nanshan High-Tech Xxxx,Shenzhen.
附录 A:BLE 模块原理图
RF-CC2540A1 原理图
附录 B:BLE 模块应用方案提示
计数采集(计步器,弹跳球,心率计),86 盒插座改造,遥控开关,调光照明,环境渲染背景光,医疗检测〔血压,血氧,体温〕,互动遥控玩具〔开关量,模拟量,输入,输出〕,机器人,直升飞机,玩具车,防丢寻物,电量采集,充电管理,外置 gps,温湿度计,蓝牙手表,飞镖机,保龄球等娱乐设备新接口,(智能设备)遥控接口,报警器,门禁考勤(蓝牙锁),巡逻寻根器,反控(智能设备)应用(紧急拨号,遥控拍摄),蓝牙打印,空调控制器,机顶盒控制器,物流统计管理,胎压检测,汽车自动锁,遥控按摩器,车位记录,户外点阵广告,运动计量〔跑步,自行车,高尔夫〕,定时开关,宠物监管,婴儿儿童护理(实时体温检测,防丢失),运动健身玩具(手机配合),距离感应触发应用,调速应用,智能家居(遥控类),仪器仪表无线接口,设备无线配置接口,景点定位,区域软禁控制,定量计时,可穿戴设备,蓝牙读卡器,便携仪表,设备固件远程升级接口 … …
* 部分可以利用模块透传功能进行开发,部分直接使用直驱功能即可完成设计。
附录 C:FCC 认证
附录 D:RoHS 认证
附录 E:End Product Listing
附录 F:REACH 认证
附录 G:BLE 模块硬件规格说明
一、概述
深圳信驰达蓝牙模块是基于 TI 公司 CC254x 芯片研发的低功耗蓝牙(BLE)射频模块,可广泛应用于短距离无线通信领域。具有功耗低、体积小、传输距离远、抗干扰能力强等特点。模块配备高性能蛇形天线;模块采用半孔形式硬件接口设计。
信驰达蓝牙模块现有八款:RF-CC2540A1/CC2541A1、RF-BM-S01/A、RF-BM-S02/A、
RF-BM-S02I/A,同时兼容 CC2540/1 脚位。
二、模块参数
· 工作电压:2.0V~3.6V,推荐工作电压:3.3V
· 工作频段:2402MHz~2480MHz
· 最大发射功率:0dBm (-23dBm~0dBm,可编程)
· 接收灵敏度:-87dbm(低增益模式)
· 接收灵敏度:-93dbm(高增益模式)
· 频率误差:±40kHz
· 工作温度:-40℃ ~ +85℃
· 储存温度:-40℃ ~ +125℃
· 接收电流 RX:19.6mA
· 发射电流 TX(–6dBm):24mA
· 功率模式 1(3-μs Wake-Up):235μA
· 功率模式 2(SleepTimerOn):0.9μA
· 功率模式 3(External Interrupts):0.3μA
三、注意事项
使用本模块注意事项:
1、在运输、使用过程中要注意防静电。
2、器件接地要良好,减少寄生电感。
3、尽量手工焊接,如需机贴,请控制回流焊温度不要超过 245 摄氏度,如下图所示。
4、模块天线下面不要铺铜,最好挖空,以防止阻抗改变。
5、天线应远离其他电路,防止辐射效率变低和影响其他电路正常使用。
6、模块的接入电源建议使用 2.2μF+0.1μF 滤波电容对地。
部件的焊接耐热性温度曲线(焊接点)
四、天线选择
1、IPEX 天线座的规格下图所示:
2、IPEX 线端的规格如下图所示:
3、常用天线: