FSC-BT671B 指令手册

介绍

[English]

描述

本设计指南适用于工程师开发 FSC-BT671B 系列蓝牙模组

模组默认配置

Name

FSC-BT671B

Service UUID

FFF0

Write UUID

FFF2

Notify UUID

FFF1

UART Baudrate

115200/8/N/1

硬件说明

引脚图

_images/BT671B_pin_map.png

引脚描述

Pin

Pin Name

Type

Pin Descriptions

1

UART_RTS

I/O

串口流控脚/不需要连接

2

UART_CTS

I/O

串口流控脚/不需要连接

3

UART_TX

O

串口数据脚

4

UART_RX

I

串口数据脚

8

RESET

I

低电平复位

9

VDD

Power

3.3V供电,建议使用LDO供电

10

GND

GND

GND

11

SWCLK

I/O

烧录脚

12

SWDIO

I/O

烧录脚

17

SLP_IND

O

指示模组睡眠状态,睡眠状态输出高电平

18

WAKE_UP

I

输入高电平进入睡眠, 输入低电平退出睡眠

19

LED

O

蓝牙未连接输出方波,蓝牙连接输出高电平

20

STATUS

O

蓝牙未连接输出低电平,蓝牙连接输出高电平

22

EXT_ANT

ANT

模组默认没有天线需要连接外置蓝牙天线

硬件设计说明

  • 模组只需要连接VDD/GND/STATUS/UART_RX/UART_TX/EXT_ANT即可使用

  • 如果MCU需要获取蓝牙模组的连接状态,需要接STATUS引脚

  • 画完原理图后请发给飞易通进行审核,避免蓝牙距离达不到最佳效果

  • 默认默认不带天线,需要使用外置天线

  • 如果有低功耗需求,请连接 PIN17 和 PIN18; 不需要低功耗可以悬空

功能说明

GPIO指示

LED引脚 PIN 19

状态

描述

1Hz方波

蓝牙未连接

高电平

蓝牙连接

连接状态引脚 PIN 20

状态

描述

低电平

蓝牙未连接

高电平

蓝牙连接

工作模式

透传模式

蓝牙未连接,串口收到的数据按照AT指令进行解析;蓝牙连接后串口收到的数据全
部原样发送到远端蓝牙。

指令模式

蓝牙未连接,串口收到的数据按照AT指令进行解析;蓝牙连接后串口收到的数据仍
然按照AT指令进行解析。需要发送数据到远端的时候,发送AT+LESEND指令。

GATT透传服务

类型

UUID

权限

描述

Service

0xFFF0

透传服务

Write

0xFFF2

Write,Write Without Response

APP发给模组

Notify

0xFFF1

Notify

模组发给APP

性能参数

类型

Min.

Type.

Max.

描述

上电时间

230ms

使能串口响应时间

唤醒时间

200ms

串口发送完唤醒数据才开始计算

数据传输速率

波特率

数据包

发送间隔

连接间隔

发送方式

速率

921600

244

16ms

15ms

Notify

50000 Byte/s

低功耗说明

模式

睡眠

唤醒

AT+LPM=1

串口超过5s没有收到数据自动进入低功耗
蓝牙连接成功不进入低功耗
串口第一帧数据唤醒
蓝牙连接成功唤醒

AT+LPM=2

PIN18输入高电平进入睡眠

PIN18输入低电平退出睡眠

AT指令说明

规范说明

适用于整个文档

  • {} : 包括与{…}中的内容为可选项

  • << : 主机发给模组的 COMMAND

  • >> : 模组回复主机的 RESPONSE

指令

指令是主机主动发给模组的控制命令,模组在收到指令后需要回复 <CR><LF>OK<CR><LF> 作为应答。

指令格式

AT+Command{=Param1{,Param2{,Param3…}}}<CR><LF>
  • 所有的指令使用 AT 开头,使用 <CR><LF> 结尾

  • <CR> 代表回车符,对应 HEX 为 0x0D

  • <LF> 代表换行符,对应 HEX 为 0x0A

  • 若指令包含参数,参数应使用 = 分隔

  • 若指令包含多项参数,参数应使用 , 分隔

  • 若指令有响应返回,响应使用 <CR><LF> 开始,使用 <CR><LF> 结束

  • 模组应当总是返回指令执行的结果 (成功返回 OK,失败时返回 ERROR)

Example:
读取模块蓝牙名称
<< AT+VER
>> +VER=1.0.0,FSC-BT671B
>> OK

写入不支持的波特率
<< AT+BAUD=0
>> ERROR

通知

通知是模组主动发给主机的数据。一般用来指示状态的变化或收到的数据。

通知格式

<CR><LF>+Indication{=Param1{,Param2{,Param3…}}}<CR><LF>
  • 所有的通知使用<CR><LF>开始, 使用<CR><LF>结束

  • 若通知包含参数, 参数应位于 “=” 后面

  • 若通知包含多项参数, 参数应使用 “,” 分割

Example:
指令模式下收到APP发来的数据
>> +DATA=0,10,1234567890

指令列表

AT - 串口通信测试

Command

AT

Response

OK

Description

当上电或更改波特率时,测试主机和模块之间的UART通讯

Example:
<< AT
>> OK

AT+VER - 读取固件版本

Command

AT+VER

Response

+VER=Param

Param

固件版本

Description

读取版本号

Example:
<< AT+VER
>> +VER=1.0.0,FSC-BT671B
>> OK

AT+ADDR - 读取蓝牙MAC地址

Command

AT+ADDR

Response

+ADDR=Param

Param

模块的蓝牙MAC地址(12 Bytes ASCII)

Description

读取蓝牙MAC地址

Example:
<< AT+ADDR
>> +ADDR=DC0D30010203
>> OK

AT+NAME - 读/写蓝牙名称

Command

AT+NAME{=Param1{,Param2}}

Param1

蓝牙名称(1~29 Bytes ASCII)

Param2

使能MAC地址后缀(0/1,default:0)
0: 关闭后缀
1: 开启后缀“-XXXX”(MAC地址后4Byte)

Response

+NAME=Param

Param

蓝牙名称

Description

如果存在参数则设置蓝牙名称,否则只是读取

Example:
读取蓝牙名称
<< AT+NAME
>> +NAME=FSC-BT671B
>> OK

设置蓝牙名称
<< AT+NAME=ABC
>> OK

设置蓝牙名称为“ABC”并自动在广播包中添加地址后缀
<< AT+NAME=ABC,1
>> OK

AT+BAUD - 读/写串口波特率

Command

AT+BAUD{=Param}

Param

波特率(1200/2400/4800/9600/19200/38400/57600/115200/
230400/460800/921600, default:115200)

Response

+BAUD=Param

Param

波特率

Description

模块将在接收到这条指令后,马上切换波特率

Example:
读取波特率
<< AT+BAUD
>> +BAUD=115200
>> OK

设置波特率
<< AT+BAUD=9600
>> OK

AT+TXPOWER - 读/写发射功率

Command

AT+TXPOWER{=Param}

Param

发射功率

Response

+TXPOWER=Param

Param

发射功率

Description

修改发射功率

Example:
读取发射功率
<< AT+TXPOWER
>> +TXPOWER=5
>> OK

设置发射功率0dbm
<< AT+TXPOWER=0
>> OK

AT+LPM - 开启/关闭低功耗模式

Command

AT+LPM{=Param}

Param

低功耗模式 (0/1/2, default: 0)
0: 关闭
1: 串口唤醒模式
2: IO 唤醒模式

Response

+LPM=Param

Param

低功耗模式

Description

查询修改低功耗模式

Example:
读取低功耗模式
<< AT+LPM
>> +LPM=0
>> OK

设置串口唤醒模式
<< AT+LPM=1
>> OK

AT+ADVIN - 读/写广播间隔

Command

AT+ADVIN{=Param}

Param

广播间隔 (20~10000 ms, 默认: 152ms)

Response

+ADVIN=Param

Param

广播间隔

Description

查询修改广播间隔

Example:
读取广播间隔
<< AT+ADVIN
>> +ADVIN=152
>> OK

设置广播间隔100ms
<< AT+ADVIN=100
>> OK

AT+LECHCNT - 读/写BLE的最大连接数量配置

Command

AT+LECHCNT{=Param}

Param

最大允许连接数量 (1~8, default:1)

Response

+LECHCNT=Param

Param

最大允许连接数量

Description

更新最大连接数,需要重启生效

Example:
读取最大连接数
<< AT+LECHCNT
>> +LECHCNT=1
>> OK

设置最大8路连接
<< AT+LECHCNT=8
>> OK

AT+IDCFG - 读/写8字节ID

Command

AT+IDCFG{=Param}

Param

8字节ID

Response

+IDCFG=Param

Param

8字节ID

Description

查询修改8字节ID

Example:
读取ID
<< AT+IDCFG
>> +IDCFG=12345678
>> OK

设置ID
<< AT+IDCFG=12345678
>> OK

AT+LEDISC - 断开指定连接

Command

AT+LEDISC{=Param}

Param

连接索引

Response

OK

Description

断开指定通道的蓝牙连接

Example:
断开索引为1的设备
<< AT+LEDISC=1
>> OK

断开全部连接
<< AT+LEDISC
>> OK

AT+LECCONN - 向指定地址发起连接

Command

AT+LECCONN{=Param1{,Param2{,Param3{,Param4}}}}

Param1

12字节设备地址+1字节地址类型

Param2

通信服务UUID

Param3

通信写权限特征值UUID

Param4

通信通知权限特征值UUID

Response

OK

Description

向指定设备发起连接,参数由12字节(设备地址)和1字节
(地址类型)组成,一般情况下地址类型为“0”或者“1”。地址
类型获取方式:
使用 AT+SCAN 扫描返回的第二个参数,例:
+SCAN=0,0,DC0D30001ED4,-65,10,FSC-BT946
连接命令:
AT+LECCONN=DC0D30001ED40
Example:
连接指定设备,0为地址类型
<< AT+LECCONN=DC0D3000039E0
>> OK

向指定地址发起连接,使用FFF0,FFF2,FFF1进行通信
<< AT+LECCONN=DC0D3000039E0,FFF0,FFF2,FFF1
>> OK

AT+FILTER - 读/写搜索过滤条件

Command

AT+FILTER{=Param1{,Param2}}

Param1

过滤类型(0~3)
0: 删除全部条件
1: 地址过滤
2: 广播数据过滤
3: 信号强度过滤

Param2

过滤类型为1,参数为地址
过滤类型为2,参数为广播数据
过滤类型为3,参数为信号强度

Response

+FILTER=1,Param1
+FILTER=2,Param2
+FILTER=3,Param3

Description

过滤指令只会影响AT+SCAN=2
过滤广播数据时,参数字段依次为:tag,offset,len,data
配置完毕后启动 AT+SCAN=2时按照设置参数过滤扫描到的设备
AT+FILTER=0,删除全部过滤条件。
过滤参数不会保存到flash。
Example:
地址过滤
<< AT+FILTER=1,DC0D30010203
>> OK

过滤广播数据 \x是十六进制
<< AT+FILTER=2,\xFF,\x04,\x02,\xDC\x0D
>> OK

清除过滤条件
<< AT+FILTER=0
>> OK

AT+SCAN - 搜索附近的设备

Command

AT+SCAN{=Param}

Param

扫描方式(0~2)
0: 停止扫描
1: 扫描附近的设备,过滤重复地址,最多可以搜到8个设备
2: 扫描BLE广播包,输出原始广播数据包,可以通过AT+FILTER指令进行过滤

Response

+SCAN=Param1,Param2,Param3,Param4,Param5,Param6 (AT+SCAN=1格式)
+SCAN=Param21,Param22,Param23,Param24,Param25,Param26 (AT+SCAN=2格式)

Param1

列表序号

Param2

地址类型(1字节)

Param3

地址(12字节)

Param4

RSSI

Param5

设备名长度

Param6

设别名名

Param21

地址类型(1字节)

Param22

地址(12字节)

Param23

RSSI

Param24

广播数据包类型

Param25

广播数据包长度

Param26

广播数据包

Description

AT+SCAN=1 常用于连接前的搜索
AT+SCAN=2 常用于作为蓝牙网关使用,搜索周围的Beacon设备
Example:
搜索设备
<< AT+SCAN=1
>> +SCAN={
>> +SCAN=0,1,70CFC9A98840,-43,24,LE-Bose QuietControl 30
>> +SCAN=1,1,DC0D30001ED4,-65,10,FSC-BT946
>> +SCAN=}

嗅探 BLE 广播,并返回原始数据(乱码部分为原始数据,使用 hex 格式)
<< AT+SCAN=2
>> +SCAN{
>> +SCAN=0,DC0D24CFB6D0,-70,1,31,?.曹$隙衐 觜40#-BP104D
>> +SCAN}

AT+TPMODE - 读/写连接状态下的工作模式

Command

AT+TPMODE{=Param}

Param

模式(0~1,默认1)
0: 指令模式
1: 透传模式

Response

+TPMODE=Param

Param

模式

Description

指令模式:
蓝牙没有连接串口数据按照指令解析,蓝牙连接后串口收到
的数据按照指令解析
透传模式:
蓝牙没有连接串口数据按照指令解析,蓝牙连接后串口收到
的数据全部发到远端蓝牙
Example:
透传模式
<< AT+TPMODE=1
>> OK

指令模式
<< AT+TPMODE=0
>> OK

AT+ADVEN - 读/写广播使能

Command

AT+ADVEN{=Param}

Param

模式(0~1,默认1)
0: 禁用广播
1: 启用广播

Response

+ADVEN=Param

Param

模式

Description

控制蓝牙广播的使能

Example:
启用广播
<< AT+ADVEN=1
>> OK

禁用广播
<< AT+ADVEN=0
>> OK

AT+ADVDATA - 读/写BLE广播0xFF的数据

Command

AT+ADVDATA{=Param}

Param

tag为0xFF的广播数据

Response

+ADVDATA=Param

Param

tag为0xFF的广播数据

Description

查询修改蓝牙广播数据

Example:
查询tag 0xFF的广播数据内容,\x为十六进制数据
<< AT+ADVDATA
>> +ADVDATA=\x03\x01\x02
>> OK

查询tag 0xFF的广播数据内容,\x为十六进制数据
<< AT+ADVDATA=\x03\x01\x02
>> OK

AT+LESEND - 发送数据到远端设备

Command

AT+LESEND{=Param1{,Param2{,Param3}}}

Param1

连接索引

Param2

数据长度

Param3

数据

Response

OK

Description

此指令仅在指令模式下使用,指令模式模块串口接收数据默
认做 AT 指令解析,需要发送到远端需要使用指令发送,连
接索引信息使用 AT+CHINFO 指令查询
Example:
向连接索引为1的设备发送数据
<< AT+LESEND=1,4,2022
>> OK

AT+CHINFO - 读取连接对端信息

Command

AT+CHINFO

Response

+CHINFO=Param1,Param2,Param3,Param4

Param1

连接索引

Param2

连接状态 (1:未连接,2:连接中,3:已连接)

Param3

连接角色 (0:从机,1:主机)

Param4

对端地址

Description

查询连接信息

Example:
查询连接信息
<< AT+CHINFO
>> +CHINFO=0,3,0,4F85B3319170
>> +CHINFO=1,3,0,6A8E79C29A99
>> +CHINFO=2,1,0,000000000000
>> +CHINFO=3,1,0,000000000000
>> +CHINFO=4,1,0,000000000000
>> OK

AT+REBOOT - 软件复位

Command

AT+REBOOT

Response

OK

Description

模块将复位

Example:
<< AT+REBOOT
>> OK

AT+RESTORE - 恢复出厂设置

Command

AT+RESTORE

Response

OK

Description

模块将恢复为出厂设置

Example:
<< AT+RESTORE
>> OK

AT+UARTCFG - 读/写串口配置

Command

AT+UARTCFG{=Param}

Param

配置 (0~5)
bit0:
0 - 1位停止位
1 - 2位停止位
bit2~bit3:
00 - None
01 - Odd
10 - Even

Response

+UARTCFG=Param

Param

配置 (0~5)

Description

修改串口配置(停止位和校验位)

Example:
8 None 1
<< AT+UARTCFG=0
>> OK

8 Odd 1
<< AT+UARTCFG=2
>> OK

8 Even 1
<< AT+UARTCFG=4
>> OK

8 None 2
<< AT+UARTCFG=1
>> OK

8 Odd 2
<< AT+UARTCFG=3
>> OK

8 Even 2
<< AT+UARTCFG=5
>> OK

AT+PIN - 读/写配对密码

Command

AT+PIN{=Param}

Param

配对密码 (000000 ~ 999999, 默认000000)

Response

+PIN=Param

Param

配对密码

Description

修改配对密码

Example:
查询配对密码
<< AT+PIN
>> +PIN=000000
>> OK

修改配对密码为 123456
<< AT+PIN=123456
>> OK

通知列表

+SCAN - AT+SCAN=1扫描结果上报

Indication

+SCAN=Param1,Param2,Param3,Param4,Param5,Param6

Param1

列表序号

Param2

地址类型(1字节)

Param3

地址(12字节)

Param4

RSSI

Param5

设备名长度

Param6

设别名名

Description

模组收到AT+SCAN=1后,会持续扫描,发现设备后通过+SCAN进行上报

Example:
搜索设备
<< AT+SCAN=1
>> +SCAN={
>> +SCAN=0,1,70CFC9A98840,-43,24,LE-Bose QuietControl 30
>> +SCAN=1,1,DC0D30001ED4,-65,10,FSC-BT946
>> +SCAN=}

+SCAN - AT+SCAN=2扫描结果上报

Indication

+SCAN=Param1,Param2,Param3,Param4,Param5,Param6

Param1

地址类型(1字节)

Param2

地址(12字节)

Param3

RSSI

Param4

广播数据包类型

Param5

广播数据包长度

Param6

广播数据包

Description

模组收到AT+SCAN=2后,会持续扫描,发现设备后通过+SCAN进行上报

Example:
嗅探 BLE 广播,并返回原始数据(乱码部分为原始数据,使用 hex 格式)
<< AT+SCAN=2
>> +SCAN{
>> +SCAN=0,DC0D24CFB6D0,-70,1,31,?.曹$隙衐 觜40#-BP104D
>> +SCAN}

+GATTSTAT - 连接状态上报

Indication

+GATTSTAT=Param1,Param2

Param1

连接索引

Param2

连接状态 (1~3)
1: 未连接
2: 连接中
3: 已连接

Description

指令模式下,模组的连接状态发生变化,通过+GATTSTAT主动上报

Example:
连接成功
>> +GATTSTAT=0,3

+DATA - 收到蓝牙数据上报

Indication

+DATA=Param1,Param2,Param3

Param1

连接索引

Param2

数据包长度

Param2

数据包内容

Description

透传模式:上报数据不带+DATA包头
指令模式:上报数据带+DATA包头 +DATA=1,5,12345
Example:
收到数据1234567890
>> +DATA=1,10,1234567890

应用场景

查询/修改模组默认参数

模组在蓝牙没有连接的状态下,会将串口数据按照AT指令解析。 主机可以对模组的默认参数进行查询和修改,下图展示了:

  1. 修改设备名为 ABC

  2. 查询设备名

  3. 查询蓝牙地址

@startuml
hide footbox
skinparam sequenceMessageAlign center

box "local" #LightBlue
participant Host as host
participant Module as bt
end box


rnote over host, bt: 修改设备名为 ABC

host -> bt: AT+NAME=ABC\\r\\n
bt -> host: \\r\\nOK\\r\\n"

rnote over host, bt: 查询设备名

host -> bt: AT+NAME\\r\\n
bt -> host: \\r\\n+NAME=ABC\\r\\n\\r\\nOK\\r\\n"

rnote over host, bt: 查询蓝牙地址

host -> bt: AT+ADDR\\r\\n
bt -> host: \\r\\n+ADDR=DC0D30010203\\r\\n\\r\\nOK\\r\\n

@enduml

发送数据的流程

模组上电会持续向外发送广播数据,远端蓝牙(手机)可以通过搜索获取到广播包, 并向模组发起连接请求。连接成功后模组会拉高连接状态脚通知主机蓝牙连接成功。 主机可以通过蓝牙模组将数据发送给远端蓝牙,远端蓝牙也可以把数据发送给主机。

@startuml
hide footbox
skinparam sequenceMessageAlign center

box "local" #LightBlue
participant Host as host
participant Module as bt
end box

box "remote" #LightBlue
participant ”Remote BT“ as remote
end box

rnote over host, remote: 建立连接

        bt --> remote: 广播包
        bt <-  remote: 扫描
        bt --> remote: 广播包
        bt <-  remote: 请求建立连接

rnote over host, remote: 连接成功

host <- bt: 拉高连接状态脚

rnote over host, remote: 发送数据

host -> bt: 串口发送 ABC
        bt ->  remote: 蓝牙发送 ABC
        bt <-  remote: 蓝牙发送 DEF
host <- bt: 串口输出 DEF

        bt <-  remote: 断开蓝牙

host <- bt: 连接断开

host <- bt: 拉低连接状态脚
        bt --> remote: 广播包

@enduml

模组做主机连接远端设备

模组可以作为主设备去连接从设备,主机可以发送指令控制模组进行扫描连接和断开。下图展示了连接其他设备的过程:

@startuml

hide footbox
skinparam sequenceMessageAlign center

box "local" #LightBlue
participant Host as host
participant Module as bt
end box

box "remote" #LightBlue
participant ”Remote BT“ as remote
end box

host -> bt: AT+SCAN=1\\r\\n
host <- bt: \\r\\nOK\\r\\n
        bt ->  remote: 扫描
        bt <-- remote: 广播包
host <- bt: \\r\\n+SCAN=0,1,DC0D30001ED4,-65,10,FSC-BT946\\r\\n
host -> bt: AT+LECCONN=DC0D30001ED41\\r\\n
host <- bt: \\r\\nOK\\r\\n
        bt ->  remote: 请求建立连接

rnote over host, remote: 连接成功

host <- bt: 拉高连接状态脚

rnote over host, remote: 发送数据

host -> bt: 串口发送 ABC
        bt ->  remote: 蓝牙发送 ABC
        bt <-  remote: 蓝牙发送 DEF
host <- bt: 串口输出 DEF

host -> bt: AT+LEDISC\\r\\n
host <- bt: \\r\\nOK\\r\\n
        bt ->  remote: 断开蓝牙

rnote over host, remote: 连接断开

host <- bt: 拉低连接状态脚
        bt --> remote: 广播包

@enduml

FAQ

IOS 手机如何获取蓝牙MAC地址?

IOS系统出于安全考虑,在底层将蓝牙MAC地址变成了UUID发送给上层应用。所以APP无法获取到设备的MAC地址。

FSC-BT671B 默认会将MAC地址放在广播中,APP可以通过下面的方法从广播包中获取MAC地址。

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
    if(![self describeDictonary:advertisementData])
    {
        NSLog(@"is not fsc module");
        return;
    }
}

- (Boolean)describeDictonary: (NSDictionary *) dict
{
    NSArray *keys;
    id key;
    keys = [dict allKeys];
    for(int i = 0; i < [keys count]; i++)
    {
        key = [keys objectAtIndex:i];
        if([key isEqualToString:@"kCBAdvDataManufacturerData"])
        {
            NSData *tempValue = [dict objectForKey:key];
            const Byte *tempByte = [tempValue bytes];
            if([tempValue length] == 6)
            {
                // tempByte 后面参数是蓝牙地址
                return true
            }
        }else if([key isEqualToString:@"kCBAdvDataLocalName"])
        {
            //there is name
            //NSString *szName = [dict objectForKey: key];
        }
    }
    return false;
}

附录

下载 PDF版本

下载PDF版本