低功耗蓝牙(BLE)模块及协议
低功耗蓝牙(BLE)模块及协议
协议版本:V3.00u
RF-BM-ND01(C) RF-BM-ND02(C)
深圳信驰达科技有限公司 更新日期:2019 年 03 月 08 日
前言
如何快速低成本地开发智能手机新外设
―论低功耗蓝牙技术在智能移动设备中的应用―
USB 协议的产生,让个人电脑的外设如雨后春笋般地涌现。同样,做为智能手机最新开放的低功耗蓝牙(BLE)无线应用技术,也有异曲同工之妙。BLE 技术给电子产品桥接智能手机提供了可能。相对 Wi-Fi,Bluetooth 2.0 等无线技术,有着能耗低,连接迅速,通讯距离更远等优势,让智能手机的外围电子设备有了更开阔的发展前景。
做为国际蓝牙联盟(BT-SIG)成员之一,Nordic Semiconductor 推出 nRF518x2 单芯片(SOC)低功耗蓝牙收发器,nRF518x2 就受到了市场xx的关注。nRF518x2 基于配备 256kB flash + 16kB RAM 的 32 位 ARM® Cortex™ M0 CPU 而构建。具备丰富的模拟和数字xx产品,可以在无需 CPU 参与的情况下通过可编程xx产品互联(PPI)系统进行互动。灵活的 31 引脚 GPIO 映射方案可使 I/O(例如串行接口、PWM 和正弦解调器)根据 PCB 需求指示映射到任何设备引脚。这可实现完全的设计灵活性及引脚位置和功能。
为方便低功耗蓝牙(BLE)应用技术在各个行业产品中的移植和使用,信驰达科技特别推出了
RF-BM-ND01(C)/02(C)低功耗蓝牙透传模块,其中RF-BM-ND02(C)通过了蓝牙技术联盟BQB 认证:
RF-BM-ND02(C)(小尺寸精简版,非全引脚):
详见:xxxxx://xxxxxxxxxxxx.xxxxxxxxx.xxx/XxxxxxxXxxxxxx/00000其他模块认证中。
模块做为智能手机外设的桥梁,使得主机端应用开发异常简单。在桥接模式下(串口),用户的现有产品或者方案配合此透传模块,能十分方便地和移动设备(需支持蓝牙 4.0 以上)相互通讯,实现超强的智能化控制和管理。
RF-BM-ND01(C)\ND02(C)低功耗蓝牙模块,采用 Nordic 的 nRF518x2 作为核心处理器,其中 nRF51802 是 nRF51822 的 Cost down 廉价版,与 nRF51822 引脚定义完全相同。模块运行在 2.4 GHz ISM band,GFSK 调制方式(xx频移键控),40 频道 2 MHz 的通道间隙,3 个固定的广播通道,37 个自适应自动跳频数据通道,物理层可以和经典蓝牙 RF 组合成双模设备,2 MHz间隙能更好地防止相邻频道的干扰。宽输出功率调节(-20dBm~4dBm),-93 dBm 高增益接收灵敏度。
此模块的设计目的是迅速桥接电子产品和智能移动设备,可广泛应用于有此需求的各种电子设备,如仪器xx,xxxx,xxxx,xxxx,xxxx,xxxx,xx玩具等。随着xx 4.3 智能设备对 BLE 技术的集成,智能手机标配 BLE 必将成为时尚,手机外设的市场需求将成级数倍增。用户可借此模块,以最短的开发周期整合现有方案或产品,以最快的速度占领市场,同时为企业的发展注入崭新的技术力量。
版本更新记录
版本号 | 文档日期 | 更新内容 |
V3.00u | 2019/03/08 | ✓ 第一次发布 |
注:
1、文档会不定期优化更新,在使用此文档前,请确保是最新版本;
2、获取最新协议或文档,请到信驰达科技官方网址下载:
xxxx://xxx.xxxxxxxx.xxx/xxxxxxx/xxxxxXXXxxxxxx/
目录
目录 5
⚫ 概述 6
⚫ 工作模式示意图 8
⚫ 封装尺寸脚位定义 9
⮚ RF-BM-ND01(C)(全引脚) 9
⮚ RF-BM-ND02(C)(BQB 认证,部分引脚) 11
⚫ 串口透传协议说明(桥接模式) 13
⚫ 串口 AT 指令: 16
⮚ 连接间隔设定 16
⮚ 获取模块名称 16
⮚ 模块重命名 17
⮚ xx率设定 17
⮚ 获取物理地址MAC 17
⮚ 模块复位 17
⮚ 广播周期设定 18
⮚ 附加自定义广播内容 18
⮚ 定义产品识别码 18
⮚ 发射功率设定 18
⮚ 数据延时设定 19
AT 指令表 20
⚫ 广播数据设置 22
⚫ 系统复位与恢复 23
⚫ BLE 协议说明(APP 接口) 24
⮚ 蓝牙数据通道【服务 UUID:0xFFE5】 24
⮚ 串口数据通道【服务 UUID:0xFFE0】 24
⮚ 模块参数设置【服务 UUID:0xFF90】 25
⚫ IOS APP 编程参考 28
⚫ 主机参考代码(透传) 30
⚫ 回流焊条件 31
⚫ 静电放电警示 32
⚫ 联系我们 33
附录 A:BLE 模块应用方案提示 34
附录B:FCC 认证 35
附录 C:BQB 认证 36
⚫ 概述
模块可以工作在桥接模式(透传模式)。
模块启动后会自动进行广播,已打开特定 APP 的手机会对其进行扫描和对接,成功之后便可以通过 BLE 协议对其进行监控。
桥接模式下,用户 CPU 可以通过模块的通用串口和移动设备进行双向通讯,用户也可以通过特定的串口 AT 指令,对某些通讯参数进行管理控制。用户数据的具体含义由上层应用程序自行定义。移动设备可以通过 APP 对模块进行写操作,写入的数据将通过串口发送给用户的 CPU。模块收到来自用户 CPU 串口的数据包后,将自动转发给移动设备。此模式下的开发,用户必须负责主 CPU 的代码设计,以及智能移动设备端 APP 代码设计。
主要特点:
1、使用简单,无需任何蓝牙协议栈应用经验;
2、用户接口使用通用串口设计,全双工双向通讯,最低xx率支持 4800bps;
3、默认 20ms 连接间隔,连接快速;
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 调节蓝牙连接间隔,掉电不保存。(动态功耗调整);
13、支持连接状态、广播状态提示脚;
14、支持单脚位下地(长按)20 秒恢复出厂设置,APP 远程恢复出厂设置;
15、广播内容提示模块实时系统状态,自定义设备识别码;
16、支持深度恢复模式;
17、支持从 TX 串口获取蓝牙连接状态(连接,正常断线)字串提示;
18、极低功耗的待机模式,nRF 518x2 芯片官方数据睡眠电流 1uA,模块实测功耗如下:
事件 | 平均电流 (小壁虎测量) | 测试条件/备注 |
模块睡眠功耗 | 1uA | EN 悬空 |
广播 | 146.19uA | 广播周期 200ms |
连接事件 | 265.68uA | 连接周期 30ms |
*1 注:官方测试方式:在电源回路上串一个 10R 的电阻,使用示波器截取压降波形,进行积分计算。
*2 注:台式万用表测试方式:用带积分功能的台式万用表 uA 或 mA 档串在电池与模块之间查看显示值。
测试电压为 3.07V。
以上数据为信驰达模块 RF-BM-ND01 抽样实测数据,仅供参考。如果希望得到更低功耗,可适当增大连接间隔或者广播周期,详见《模块参数设置》和《串口 AT 指令》相关章节。
⚫ 工作模式示意图
VCC
应用电路
(主机)
MMCCUU
UART TX
UART RX EN BRTS BCTS
RFn-RBFM51-8Sx022
透透传传模模块块
GND
BLE
模块桥接模式示意图
注:为避免用户 CPU 的 IO 和模块 IO 的输出电平差异导致大电流,建议在模块的输出信号线
TX,BCTS 上串入一小额隔离电阻。
⚫ 封装尺寸脚位定义
⮚ RF-BM-ND01(C)(全引脚)
RF-BM-ND01(C)
脚位 | 名称 | 功能 | 备注 |
Pin1 | GND | 模块地 | 模块地 |
Pin2 | VCC | 电源正极输入 | 模块电源,1.8-3.6V,推荐 3.3V |
Pin3 | P21 | I/O | 未使用 |
Pin4 | P22 | I/O | 未使用 |
Pin5 | P23 | I/O | 未使用 |
Pin6 | P24 | I/O | 未使用 |
Pin7 | P25 | I/O | 未使用 |
Pin8 | P28 | I/O | 未使用 |
Pin9 | P29 | I/O | 未使用 |
Pin10 | P30 | I/O | 未使用 |
Pin11 | P00 | I/O | 未使用 |
Pin12 | P01 | I/O | 未使用 |
Pin13 | P02 | I/O | 未使用 |
Pin14 | P03 | I/O | 未使用 |
Pin15 | P04 | I/O | 未使用 |
Pin16 | P05 | 广播状态指示 | 模块广播时为低电平,休眠和连接后置高 |
Pin17 | P06 | 连接状态指示 | 模块连接时为低电平,断开后置高 |
Pin18 | P07 | EN | 模块使能控制线, 低电平有效,不带内部上拉。 0:模块开始广播,直到连接到移动设备 1:无论模块当前状态,立即进入完全睡眠状态 (1uA) |
Pin19 | P08 | RESTORE | 恢复出厂设置触发 上电后 30 秒内保持 20s 以上则将会恢复全部参数 |
Pin20 | P09 | I/O | 未使用 |
Pin21 | P10 | I/O | 未使用 |
Pin22 | P11 | BRTS | 作为数据发送请求(用来唤醒模块) 0:主机有数据发送,模块将等待接收来自主机的数据,此时模块不睡眠 1:主机无数据发送,或主机数据发送完毕之 后,应该将此信号线置 1 |
Pin23 | P12 | BCTS | 数据输入信号(用来唤醒主机,可选) 0:模块有数据发送到主机,主机接收模块数据 1:模块无数据发送到主机,或模块数据发送完毕之后,会将此信号置 1 |
Pin24 | P13 | TX | 模块串口发送端 |
Pin25 | P14 | RX | 模块串口接收端 |
Pin26 | P15 | I/O | 未使用 |
Pin27 | P16 | I/O | 未使用 |
Pin28 | SWDIO | - | 仿真烧录脚/复位脚 |
Pin29 | SWCLK | - | 仿真烧录脚 |
Pin30 | P17 | I/O | 未使用 |
Pin31 | P18 | I/O | 未使用 |
Pin32 | P19 | I/O | 未使用 |
Pin33 | P20 | I/O | 未使用 |
⮚ RF-BM-ND02(C)(BQB 认证,部分引脚)
RF-BM-ND02(C)(BQB 认证)
脚位 | 名称 | 功能 | 备注 |
Pin1 | P21 | I/O | 未使用 |
Pin2 | P24 | I/O | 未使用 |
Pin3 | P25 | I/O | 未使用 |
Pin4 | P26 | I/O | 未使用 |
Pin5 | P27 | I/O | 未使用 |
Pin6 | P28 | I/O | 未使用 |
Pin7 | P29 | I/O | 未使用 |
Pin8 | VCC | 电源正极输入 | 模块电源,1.8-3.6V,推荐 3.3V |
Pin9 | GND | 模块地 | 模块地 |
Pin10 | P00 | I/O | 未使用 |
Pin11 | P01 | I/O | 未使用 |
Pin12 | P02 | I/O | 未使用 |
Pin13 | P03 | I/O | 未使用 |
Pin14 | P04 | I/O | 未使用 |
Pin15 | P05 | 广播状态指示 | 模块广播时为低电平,休眠和连接后置高 |
Pin16 | P06 | 连接状态指示 | 模块连接时为低电平,断开后置高 |
Pin17 | P07 | EN | 模块使能控制线,默认为电平触发模式 电平触发模式,低电平有效,不带内部上拉。 0:模块开始广播,直到连接到移动设备 1:无论模块当前状态,立即进入完全睡眠状态 (1uA) |
Pin18 | P08 | RESTORE | 恢复出厂设置触发 上电后 30 秒内保持 20s 以上则将会恢复全部参数 |
Pin19 | P09 | I/O | 未使用 |
Pin20 | P10 | I/O | 未使用 |
Pin21 | P11 | BRTS | 作为数据发送请求(用来唤醒模块) 0:主机有数据发送,模块将等待接收来自主机的数据,此时模块不睡眠 1:主机无数据发送,或主机数据发送完毕之 后,应该将此信号线置 1 |
Pin22 | P12 | BCTS | 数据输入信号(用来唤醒主机,可选) 0:模块有数据发送到主机,主机接收模块数据 1:模块无数据发送到主机,或模块数据发送完毕之后,会将此信号置 1 |
Pin23 | P13 | TX | 模块串口发送端 |
Pin24 | P14 | RX | 模块串口接收端 |
Pin25 | SWDIO | - | 仿真烧录脚/复位脚 |
Pin26 | SWCLK | - | 仿真烧录脚 |
注:RF-BM-ND02(C)由于是追求小尺寸的精简版,部分 IO 没有引出,对应功能无法使用。
⚫ 串口透传协议说明(桥接模式)
模块的桥接模式是指,通过通用串口和用户 CPU 相连,建立用户 CPU 和移动设备之间的双向通讯。用户可以通过串口,使用指定的 AT 指令对串口xx率、BLE 连接间隔进行重设置(详见后面《串口 AT 指令》章节)。针对不同的串口xx率以及 BLE 连接间隔,以及不同的发包间隔,模块将会有不同的数据吞吐能力。默认串口xx率为 115200bps。
当模块 BLE 连接间隔为 20 ms,串口xx率为 115200 bps 时,模块具有最高理论转发能力
(4K/S)。这里就在电平使能模式下,这种配置为例,对透传协议做详细介绍。
模块可以从串口一次性最多传输 200 字节数据包,模块会根据数据包大小自动分包发送,每个无线包最大载荷为 20 个字节。移动设备方发往模块的数据包,必须自行分包(1-20 字节/包)发送。模块收到无线包后,会依次转发到主机串口接收端。
1、串口硬件协议:115200bps,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:CONNECT\r\n" 字串,可以根据此字串来确定是否可以进行正常转发操作。当然也可以使用连接状态提示脚,也可以通过手机发送一个特定的确认字串到模块,主机收到后即可确认已经连接。当连接被 APP 端主动断开后,会从 TX 给出 “TTM:DISCONNECT\r\n”字串提示,如果是非正常断开,会从 TX 给出“TTM:DISCONNET FOR TIMEOUT\r\n”字串提示。
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 以下,漏包机率很低。安全起见,无论是低速或者高速转发应用,都建议在上层做校验重传处理。
通讯参考模 式 | 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 上层去校验。
⚫ 串口 AT 指令:
以"TTM"开头的字串会当成 AT 指令进行解析并执行,并从串口原样返回,之后会追加输出执行结果,"TTM:OK\r\n"或 "TTM:ERR\r\n"等。不以“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:ERR\r\n" 表主设备与模块未连接,修改失败;
"TTM:OK\r\n" 表示更改成功,正以新的连接间隔在运行;
这个连接间隔设定需要主设备与模块连接时才可以修改成功,并且成功与否取决于移动设备对连接间隔的限制,不同的 IOS 版本最大连接间隔也有不同。使用 iPhone X(IOS 12.1.4)中测试,最快支持 30ms,最慢支持 2s,另外,由于 BLE 协议内部机制,不同的连接间隔下此指令会有不同的执行效率。在 IOS 12.1.4 中,从当前连接间隔为 2000ms 的情况下(最长 2000ms),改变到其他连接间隔,可能最长需要等待约 100s 左右,而在其他高频度连接间隔(如:100ms)下执行此 AT 指令,会有很快的执行效率。
注:此连接间隔掉电不保存,并且更改指令只有在连接成功后有效。
⮚ 获取模块名称
向串口 RX 输入以下字串:
"TTM:NAM-?"
会从 TX 收到:
"TTM:NAM-xxxxxxxxxxxx\r\n"
字串后面"xxxxxxxxxxxx"为蓝牙模块名称。
⮚ 模块重命名
向串口 RX 输入以下字串,其中“Name”为模块名称,长度为 16 个字节以内,ASCII 码格
式,
"TTM:REN-" + Name
如“TTM:REN-ABC123”表示将模块重命名为“ABC123”。
若修改成功则会从 TX 收到 "TTM:OK\r\n" 确认,如果指令格式不对,则会返回:
"TTM:ERR\r\n"
⮚ xx率设定
向串口 RX 输入以下字串,设定xx率:
"TTM:BPS-X"
其中 X="4800","9600","19200","38400","57600","115200",(以上数据格式都为 ASCII
码)。如“TTM:BPS-115200”表示设定xx率为 115200bps。在执行完此指令之后,会从串口 TX 得到以下确认:
之后会从 TX 收到 "TTM:BPS SET AFTER 2S..." 确认,如果设置值不在选项中,或者指令格式不对,则返回:
"TTM:ERR\r\n"
用户可以通过 PC 进行设置后使用,也可以通过移动设备的 BLE APP 接口进行设置。见
《模块参数设置【服务 UUID:0xFF90】》。
⮚ 获取物理地址 MAC
向串口 RX 输入以下字串:
"TTM:MAC-?"
会从 TX 收到:
"TTM:MAC-xxxxxxxxxxxx\r\n"
字串后面"xxxxxxxxxxxx"为 6 字节模块蓝牙地址。
⮚ 模块复位
向串口 RX 输入以下字串:
"TTM:RST-SYSTEMRESET"
会迫使模块软复位一次。
⮚ 广播周期设定
向串口 RX 输入以下字串,设置模块的广播周期,T = X * 100ms "TTM:ADP-(X)"
其中 X = "20","50","100","200","500","1000","1500","2000","2500","3000","4000","5000"
之一(以上数据格式都为 ASCII 码)。如“TTM:ADP-(200)”表示设定广播周期为 200ms。会从 TX 脚收到 "TTM:OK\r\n" 确认,如果指令格式不对,则会返回:
"TTM:ERR\r\n"
广播周期设定掉电保存,重启模块后,模块将按照新的广播周期进行广播。
⮚ 附加自定义广播内容
向串口 RX 输入以下字串,自定义广播内容;
"TTM:ADD-"+ Data
其中 Data 为准备附加的广播的数据,长度 0< L <= 16,以 ASCII 码格式输入。例如向串口 RX 输入“TTM:ADD-Advertisement!”,会从 TX 脚收到 "TTM:OK\r\n" 确认,如果指令格式不对,则会返回:
"TTM:ERR\r\n"
此指令设置后立即生效,可以通过此功能广播一些自定义内容,数据掉电保存
⮚ 定义产品识别码
向串口 RX 输入以下字串,自定义产品识别码;
"TTM:PID-"+ Data
其中 Data 为两个字节的产品识别码,范围 0x0000~0xFFFF ( L = 2 ),每个字符以 ASCII 码格式向串口 RX 输入。例如向串口 RX 输入“TTM:XXX-XX("XX"对应的十六进制为 0x4E44),会从 TX 脚收到 "TTM:OK\r\n" 确认,如果指令格式不对,则会返回:
"TTM:ERR\r\n"
此识别码掉电保存,会出现在广播中,可以以此来过滤设备或判断是否是特定的产品。
⮚ 发射功率设定
向串口 RX 输入以下字串,设置相应的发射功率,单位 dBm。 "TTM:TPL-(X)"
其中 X="+4","0",,"-4","-8","-12","-16","-20","-30" ( 以上数据格式都为 ASCII 码)。如
“TTM:TPL-(+4)”表示设定发射功率为+4dBm。之后会从 TX 脚收到 "TTM:OK\r\n" 确认,并且模块立即使用新的发射功率进行通讯,如果指令格式不对,则会返回:
"TTM:ERR\r\n"
⮚ 数据延时设定
向串口 RX 输入以下字串,设置 BCTS 输出低到串口 TX 输出数据之间的延时,单位 ms "TTM:CDL-Xms"
其中 X="0","2","5","10","15","20","25"之一,如果指令无误,会从 TX 收到
"TTM:OK\r\n" 确认,如果指令格式不对,则会返回:
"TTM:ERR\r\n"
为让用户 CPU 有足够的时间从睡眠中唤醒,到准备接收,模块提供了这个延时(X)设定,在模块串口有数据发出之前会置低 BRTS,而 BRTS 输出低到模块 TX 输出数据之间的延时由此参数设定。可以保证最小延时不小于 X,实际延时会是 T = ( X+Y )ms,其中 500us<Y<1ms。此参数掉电保存。
BCTS
串口数据提醒信号
TX_DATA
模块串口输出数据
T= X+Y
模块串口输出数据延时设定示意图
AT 指令表
AT 指令格式 | 掉电保存 | 参数说明 | 可能的回应 | 含义 |
TTM:CIT-Xms( 连 接成功后才有效) | 否 | X="20","30","50","100", "200","300","400","500", "1000","1500","2000"设置 相应的 BLE 连接间隔,单位 ms | TTM:OK\r\n TTM:ERR\r\n | 设置超时设置成功错误参数 |
TTM:NAM-? | 是 | 获取模块名称 | TTM:NAM-xxxxxxxxxxxx, "xxxxxxxxxxxx"为模块名称 | 返回模块名称 |
TTM:REN-+ Name | 是 | Name,新模块名,长度为 16 字节以内的任意字串。 | TTM:OK\r\n TTM:ERR\r\n | 设置成功错误参数 |
TTM:BPS-X | 是 | X="4800","9600","19200", "38400","57600","115200" 设置相应的xx率 | TTM:BPSSET AFTER 2S ...\r\n TTM:ERR\r\n | 设置成功,会在两秒后使用新的xx率 错误参数 |
TTM:MAC-? | - | 获取 MAC 地址 | TTM:MAC-xxxxxxxxxxxx, "xxxxxxxxxxxx" 为 模 块 MAC 地址 | 返回 MAC 地址 |
TTM:RST-SYSTEM RESET | - | 让模块系统复位 | 无 | 复位模块 |
TTM:ADP-(X) | 是 | X = "20","50","100","200", "500","1000","1500","2000"," 2500","3000","4000","5000" 设置相应的广播周期 | TTM:OK\r\n TTM:ERR\r\n | 设置广播周期, 如设置 为 "200" , 则 为 200ms |
TTM:ADD- + Data | 是 | Data 为自定义广播数据,数据长度 L <= 16; | TTM:OK\r\n TTM:ERR\r\n | 设置自定义广播内容 |
TTM:PID- + Data | 是 | Data 为自定义产品识别码,数据长度 L = 2 ,默认为 ND; | TTM:OK\r\n TTM:ERR\r\n | 设置自定义产品识别码 |
TTM:TPL-(X) | 是 | X="+4","0",,"-4","-8","-12","-1 6","-20","-23" 设置相应的发射功率,单位 dBm | TTM:OK\r\n TTM:ERR\r\n | 设定发射功率 |
TTM:CDL-Xms | 是 | X="0","2","5","10","15", "20","25" 设置 BCTS 输出低到串口输出数据之间的延时,单位 ms | TTM:OK\r\n TTM:ERR\r\n | 最小延时不于 X,实际延时会是 X+Y ms, 500us<Y<1ms. |
* 注:蓝色粗体为默认设置。灰色提示指令,掉电不保存。
⚫ 广播数据设置
默认广播数据:当模块的 EN 脚被置低后,模块将会进行间隔为 200ms 的广播,在广播数据中的GAP_ADTYPE_MANUFACTURER_SPECIFIC(IOS 编程中官方定义宏)域中包含了以下内容,默认广播内容为 9 个字节:
{
0x4E,0x44,自定义设备类型编码,默认为 0x4E44 ,可由 AT 指令进行设定;
0x00,0x00,保留;
0x00,0x00,0x00,0x00,0x00,0x00, 模块 MAC 地址;
0x05, 模块 BPS 参数;
0x05, 模块 CTS 参数;
0x03, 模块广播间隙参数;
0x01, 模块发射功能参数;
0x00,保留;}
自定义广播数据:如果使用 AT 指令自定义了广播内容,最大长度为 16 字节(蓝色部分),在广播数据中的 GAP_ADTYPE_MANUFACTURER_SPECIFIC 域中将包含了以下内容,长度为 2+n个字节:
{
0x00,0x00, 自定义设备类型编码,默认为 00 00,可由 AT 指令进行设定;
Data [n], 自定义广播数据,n <= 16;
}
注:自定义广播数据可通过 AT 指令修改,并且掉电保存。重新上电后,将会使用最后自定义的广播数据。为避免广播数据过长带来多余的功耗,也可以通过设置自定义广播数据为 1 字节的任意值。
⚫ 系统复位与恢复
x模块复位有三种方法,其中第三种方法可以恢复系统参数:
1、使用 AT 指令复位模块(详见《串口 AT 指令》章节);
2、使用服务通道接口,用 APP 对模块进行远程复位。(详见《BLE 协议说明(APP 接口)-模块参数设置》章节);
3、使用硬件 RESTORE 脚位(见脚位定义表),上电 30 秒内,持续拉低 20 秒后会将模块的所有系统参数恢复到出厂设置(深度恢复),并立即复位。此脚位带内部上拉,默认不会进入此模式。
被恢复的系统参数包括:
a) 串口xx率,恢复到 115200bps;
b) 设备名称,恢复到"Tv300u-XXXXXXXX",X 是 MAC 的后八位;
c) 串口数据延时,恢复到 5ms( 500us < Delay < 1ms );
d) 广播周期,恢复到 2 (200ms);
e) 连接间隔,恢复到 20ms;
f) 产品识别码,恢复到 0x4E,0xEE;
g) 发射功率,恢复到 0dBm;
h) 自定义广播长度,恢复到 0;
i) 自定义广播数据,恢复到全 0,不使用自定义广播数据,使用默认广播数据;
注:RESTORE(P08)脚位的特殊性,在电路设计中,需避免上电前 30 秒持续下地,否则会进入恢复模式。
⚫ BLE 协议说明(APP 接口)
⮚ 蓝牙数据通道【服务 UUID:0xFFE5】
特征值 UUID | 可执行的操作 | 字节数 | 默认值 | 备注 |
FFE9 | Write | 20 | 无 | 写入的数据将会从串口 TX 输出 |
说明:蓝牙输入转发到串口输出。APP 通过 BLE API 接口向此通道写操作后,数据将会从串口
TX 输出。详细操作规则见《串口透传协议说明(桥接模式)》章节。
⮚ 串口数据通道【服务 UUID:0xFFE0】
特征值 UUID | 可执行的操作 | 字节数 | 默认值 | 备注 |
FFE4 | notify | 20 | 无 | 从串口 RX 输入的数据将会在此通道产生通知发给移动设备 |
说明:串口输入转发到蓝牙输出。如果打开了 FFE4 通道的通知使能开关(如果使用 BTool 操作,需向 0x000F+1= 0x0010 写入 01 00),主 CPU 通过串口向模块 RX 发送的合法数据后,将会在此通道产生一个 notify 通知事件,APP 可以直接在回调函数中进行处理和使用。详细操作规则见《串口透传协议说明(桥接模式)》章节。
⮚ 模块参数设置【服务 UUID:0xFF90】
特征值 UUID | 可执行的操作 | 是否保 存 | 字节数 | 默认值 | 备注 |
FF91 | Read/write | 是 | 16 | Tv300u-xxxxxxxx (带结束符的 ASCII 字串) | 设备名称, xxxxxxxx 为物理地址的后四个字节 |
FF92 | Read/write | 否 | 1 | 0 | 蓝牙通讯连接间隔: 0:20ms 1:30ms 2:50ms 3:100ms 4:200ms 5:300ms 6:400ms 7:500ms 8:1000ms 9:1500ms A:2000ms |
FF93 | Read/write | 是 | 1 | 5 | 设定串口xx率: 0:4800 bps 1:9600 bps 2:19200 bps 3:38400 bps 4:57600 bps 5:115200 bps |
FF94 | write | - | 1 | 无 | 远程复位恢复控制通道: ⮚ 远程复位控制,写入 0x55 对模块进行复位 ⮚ 远程深度恢复控制, 写入 0x36 对模块进行深度恢复 (让模块所有参数回到出厂设置),并复位 |
FF95 | Read/write | 是 | 1 | 3 | 设定广播周期: 0:20 ms, 1:50 ms, 2:100 ms, 3:200 ms, 4:500 ms, 5:1000 ms, 6:1500 ms, 7:2000 ms, 8:2500 ms, 9:3000 ms, A:4000 ms, B:5000 ms, | ||
FF96 | Read/write | 是 | 2 | 0x4E44 | 设定产品识别码 | ||
FF97 | Read/write | 否 | 1 | 1 | 设定发射功率: 0:+4dBm 1:0dBm 2:-4dBm 3:-8 dBm 4:-12 dBm 5:-16dBm 6:-20 dBm 7:-30dBm | ||
FF98 | Read/write | 是 | 16 | 默认广播内容 (详见《广播数据设置》章节) | 设定自定义广播数据 自定义广播数据,0 <n <= 16 |
说明:模块信息配置通道。
FF91 为设备名称设置通道。可以通过对此通道进行读写操作,来获取和设定模块名称。设置的名称长度 L,必须满足 0<L<17 ,建议以结束符结尾(‘\0’)。默认为“Tv300u-xxxxxxxx\0”(16 byte) ,Tv300u 为固件版本号,xxxxxxxx 为 MAC 地址后四个字节。
FF92 为模块连接间隔设置通道。可以通过对此通道进行写操作,来设定移动设备和模块之间的连接间隔,借此可以灵活控制设备功耗,以及数据吞吐量。为了提高连接速度,连接间隔参数不保存,上电后总以默认值(20ms)工作。测试表明,使用 iphone X (IOS 12.1.4)从连接间隔为 2000ms 修改为其他连接间隔,需要大约 30s 的等待时间。相反从高频度的连接间隔(如 20ms)进行变更,会有很高的执行效率(BLE 协议导致)。
FF93 为模块串口xx率设置通道。可以通过对此通道进行读写操作,来设定模块通用串口xx率,两秒后开始启用新的xx率,
FF94 为远程复位恢复控制通道,通过写入不同值,可以实现不同的控制功能。
1、对此通道写入 0x55,对模块进行软件复位。
2、对此通道写入 0x36,对模块进行深度恢复,所有系统参数将恢复到出厂设置控制,之后会复位模块。
FF95 为模块广播周期设置通道。可以通过对此通道进行读写操作,来设定模块广播周期。此参数掉电保存。。
FF96 为模块产品识别码设置通道。可以通过对此通道进行读写操作,来设定模块识别码,
APP 端可以通过此识别码来进行过滤和连接指定的产品类型,此参数掉电保存。
FF97 为模块发射功率设置通道。可以通过对此通道进行写操作,来设定模块发射功率。
FF98 为模块广播内容设置通道。可以通过对此通道进行写操作,来自定义模块的广播数据,此参数掉电保存详见《广播数据设置》章节。
⚫ 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:(CBChara cteristicWriteType)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 *)characteristic;
说明:打开特征值通知使能开关。
[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 updated a
* characteristic for a peripheral. All reads and notifications come here to be processed.
*
*/
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)c haracteristic error:(NSError *)error
说明:每次执行完读取操作后,会执行到这个回调函数。应用层在此函数内保存读取到的数据。
有关设备的扫描,连接以及其他通讯细节,可以参考信驰达科技提供的基于 IOS 的透传模块测试 APP 源码。里面实现了对 FFE9 和 FFE4 转发蓝牙数据到串口,转发串口数据到蓝牙两个通道(特征值)的操作(通知和写操作),其他直驱功能控制方法类似,都是通过对某个通道(特征值)的读写来实现。只是通道 UUID 以及读写字节数不同。(相关源码请向业务索取)
⚫ 主机参考代码(透传)
逻辑关系:模块间是用 BCTS、BRTS 两个 IO 口进行发送接收的通知和控制。
这两个 IO 常态高位,置低触发,如果模块有数据要发,置低 BCTS 通知单片机接收,如果单片机有数据要发,置低 BRTS 通知模块接收。示意性代码如下:
void main(void)
{
EN = 0 ; //使能 EN,开始广播
while(!BLEMoudleAck("TTM:OK\r\n")); //等待手机端扫描,连接
//等待连接成功,也可加入限时等待
//也可判断连接提示信号线的电平
BRTS = 0; //BRTS 置低通知 2540 模块准备接收
halMcuWaitMs(2); //延迟 2ms
UARTWrite( HAL_UART_PORT_0, "TTM:CIT-100ms", 14);
//修改连接间隔,从串口得到确认:
halMcuWaitMs(5); //延迟 5ms,确保数据已经发出 BRTS = 1; //RTS 置高,发送完毕
while(!BLEMoudleAck("TTM:OK\r\n")); //等待设置成功,也可加入限时等待
while(1){ //循环收发测试
while(1){
if(BCTS == 0){ //检测,x BCTS 置低则准备接收 while(BCTS==0); //等待发送完毕,也可限时等待 if(UARTRead(uartBuffer) == SUCCESS) //串口读取数据
{... ...} //使用数据
}
BRTS = 0; //RTS 置低通知 2540 模块准备接收
halMcuWaitMs(2); //延迟 2ms
send_TX("1234567890"); //发送任意数据(200byte 以内)
halMcuWaitMs(5); //延迟 5ms,确保数据已经发出 BRTS = 1; //RTS 置高,发送完毕
halMcuWaitMs(20); //延迟再发下一个包,延时视包大小而定
}
}
}
}
⚫ 回流焊条件
1、加热方法:常规对流或 IR 对流;
2、允许回流焊次数:2 次,基于以下回流焊(条件)(见下图);
3、温度曲线:回流焊应按照下列温度曲线(见下图);
4、最高温度:245°C 。
部件的焊接耐热性温度曲线(焊接点)
⚫ 静电放电警示
模块会因静电释放而被损坏,RF-star 建议所有模块应在以下 3 个预防措施下处理:
1、必须遵循防静电措施,不可以裸手拿模块。
2、模块必须放置在能够预防静电的放置区。
3、在产品设计时应该考虑高电压输入或者高频输入处的防静电电路。
静电可能导致的结果为细微的性能下降到整个设备的故障。由于非常小的参数变化都可能导致设备不符合其认证要求的值限,从而模块会更容易受到损害。
⚫ 联系我们
深圳市信驰达科技有限公司
SHENZHEN RF STAR TECHNOLOGY CO.,LTD.
Tel:0755–8632 9829Web: xxx.xxxxxxxx.xxx Fax:0000-00000000 E-mail:xxxxx@xxxxxxxx.xxx
地址:深圳市南山区xx园科技南一道创维大厦 C 座 601 室
Add:Room 601,BlockC,SkyworthBuilding,Nanshan High-Tech Xxxx,Shenzhen.
附录 A:BLE 模块应用方案提示
计数采集(计步器,弹跳球,心率计),86 盒插座改造,遥控开关,调光照明,环境渲染背景光,医疗检测〔血压,血氧,体温〕,互动遥控玩具〔开关量,模拟量,输入,输出〕,机器人,直升飞机,玩具车,防丢寻物,电量采集,充电管理,外置 gps,温湿度计,蓝牙手表,飞镖机,保龄球等娱乐设备新接口,(智能设备)遥控接口,报警器,门禁考勤(蓝牙锁),巡逻寻根器,反控(智能设备)应用(紧急拨号,遥控拍摄),蓝牙打印,空调控制器,机顶盒控制器,物流统计管理,胎压检测,汽车自动锁,遥控按摩器,车位记录,户外点阵广告,运动计量
〔跑步,自行车,高尔夫〕,定时开关,宠物监管,婴儿儿童护理(实时体温检测,防丢失),运动健身玩具(手机配合),距离感应触发应用,调速应用,智能家居(遥控类),仪器仪表无线接口,设备无线配置接口,景点定位,区域软禁控制,定量计时,可穿戴设备,蓝牙读卡器,便携仪表,设备固件远程升级接口… …
附录 B:FCC 认证
* 注:RF-BM-N16-B2D 为 RF-BM-ND01 的旧名称。