FSC-BT909C 指令手册

介绍

[English]

描述

本设计指南适用于工程师开发 FSC-BT909C 系列蓝牙模组,同样也适合BT909数传系列模组

模组默认参数

Name

FSC-BT909C-XXXX

LE-Name

FSC-BT909C-LE-XXXX

Pin Code

0000

Secure Simple Pairing Mode

On

UART Baudrate

115200/8/N/1

硬件说明

引脚图

以FSC-BT909C为例:

_images/BT909C_pin_map.png

引脚描述

Pin

Pin Name

Type

Pin Descriptions

1

UART_TX

O

串口TX

2

UART_RX

I

串口RX

3

UART_CTS

I/O

串口流控脚(默认不需要接)

4

UART_RTS

I/O

串口流控脚(默认为PA脚)

11

RESET

I

低电平复位

12

VDD

VDD

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

13

GND

GND

GND

32

LED

I/O

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

33

STATUS

I/O

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

36

EXT_ANT

ANT

改变天线附近的0欧电阻,可以外接蓝牙天线

硬件设计说明

  • 模组简易测试只需要连接VDD/GND/UART_RX/UART_TX即可使用

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

Profiles & Features

  • SPP (Serial Port Profile)

  • GATTS (Generic Attribute Profile LE-Peripheral role)

  • GATTC (Generic Attribute Profile LE-Central role)

  • HFP-HF (Hands-Free Profile)

  • HFP-AG (Hands-Free-AG Profile)

  • A2DP-Sink (Advanced Audio Distribution Profile)

  • A2DP-Source (Advanced Audio Distribution Profile)

  • AVRCP-Controller (Audio/Video remote controller Profile)

  • AVRCP-Target (Audio/Video remote controller Profile)

  • HID-DEVICE (Human Interface Profile)

  • PBAP (Phonebook Access Profile)

GATT透传服务

类型

UUID

权限

描述

Service

0xFFF0

透传服务

Write

0xFFF2

Write,Write Without Response

APP发给模组

Notify

0xFFF1

Notify

模组发给APP

指令说明

规范说明

适用于整个文档

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

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

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

指令格式

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

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

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

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

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

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

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

Error Code

Meaning

001

Failed

002

Invalid parameter

003

Invalid state

004

Command mismatch

005

Busy

006

Command not supported

007

Profile not turned on

008

No memory

Others

Reserved for future use

Example:
读取模块蓝牙名称
<< AT+VER
>> +VER=FSC-BT1036-XXXX
>> OK

Event格式

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

  • 若事件包含参数, 参数应位于 “=” 后面

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

  • 使用命令AT+SEP替换默认分隔符以防止冲突

Example:
手机端通过SPP协议发送”1234567890”
>> +SPPDATA=10,1234567890
指令模式下接收

指令表

通用指令

AT+HELP - 查询固件功能和命令说明

Command

AT+HELP

Response

<FIRMWARE FUNCTION: appropriate working scenario >
<OTA PATH: latest suitable firmware path on server for upgrade On-The-Air>
<ENABLED PROFILES: LINKS: ON/OFF>
<COMMAND SUMMARY: DESCRIPTION: PROFILE CATEGORY>

Description

使用help命令获取基本摘要信息

Note

如需升级最新版本请参考 空中升级说明

AT+SEP - 读/写Event分隔符

Command

AT+SEP{=Param}

Param

设置范围0x01~0xFF,默认: ‘,’ , 其中‘0’表示0xFF

Response

返回当前分隔符

Description

events/responses的参数可能包含与默认分隔符相同的值,
使用此命令替换默认分隔符以防止冲突。
(通常将默认分隔符“,”替换为十六进制值“xFF”)
Example:读模块的配对记录
<< AT+PLIST
>> +PLIST=1,32808,1C5CF226D773, Tony, iPhone12
>> +PLIST=2,40, A0BC30075421, Samsung S8
>> +PLIST=E
>> OK
Example: 设置分隔符为‘0xFF’
<< AT+SEP=0
>> OK
Example: 再读模块的配对记录
<< AT+PLIST
>> +PLIST=1<FF>32808<FF>1C5CF226D773<FF>Tony, iPhone12
>> +PLIST=2<FF>40<FF> A0BC30075421<FF>Samsung S8
>> +PLIST=E
>> OK

AT+VER - 读取固件版本

Command

AT+VER

Response

+VER=Param1,Param2,Param3

Param1

模块类型

Param2

固件版本

Param3

生产日期

Note

升级固件后,生产日期不会变化

Example:
<< AT+VER
>> +VER=BT1036,V2.6.1,20220922
>> OK

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

Command

AT+BAUD{=Param}

Param

2400/4800/9600/19200/38400/57600/115200(default)/128000/
230400/256000/460800/512000/921600/1382400

Response

+BAUD=Param1,Param2,Param3

Param

返回当前所有支持的波特率

Description

模块将在接收到这条指令后,马上切换波特率.BT1036、BT955、BT909C不支持2400

Example:
读取波特率
<< AT+BAUD
>> +BAUD=2400,4800,9600,19200,38400,57600,115200,128000,230400,256000,
460800,512000,921600,1382400
>> OK

设置波特率
<< AT+BAUD=9600
>> 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+BTEN - 开关蓝牙

Command

AT+BTEN{=Param}

Param

0-关闭蓝牙 1-打开蓝牙

AT+PROFILE - 蓝牙Profile配置

Command

AT+PROFILE{=Param}

Param

以10进制位字段表示,每位表示

BIT[0]

SPP (Serial Port Profile)

BIT[1]

GATT Server (Generic Attribute Profile)

BIT[2]

GATT Client (Generic Attribute Profile)

BIT[3]

HFP-HF (Hands-Free Profile Handsfree)

BIT[4]

HFP-AG (Hands-Free Profile Audio Gateway)

BIT[5]

A2DP Sink (Advanced Audio Distribution Profile)

BIT[6]

A2DP Source (Advanced Audio Distribution Profile)

BIT[7]

AVRCP Controller (Audio/Video remote controller Profile)

BIT[8]

AVRCP Target (Audio/Video remote controller Profile)

BIT[9]

HID Keyboard (Human Interface Profile)

BIT[10]

PBAP Server (Phonebook Access Profile)

BIT[15]

iAP2 (For iOS devices)

Response

+PROFILE=Param

Description

无法同时启用GATT Server and Client, HFP Sink and Source,
A2DP Sink and Source,AVRCP Controller and Target
Example:读取当前Profile
<< AT+PROFILE
>> +PROFILE=3
Example:只使能SPP,其他不使能
<< AT+PROFILE=1
>> OK
注: 数传版本仅支持SPP、HID、BLE

AT+AUTOCONN - 设置蓝牙上电重连Profile

Command

AT+AUTOCONN{=Param}

Param

以10进制位字段表示, 格式参考:AT+PROFILE

Response

+AUTOCONN=Param

Description

上电后,模块将根据设置PROFILE尝试与配对列表中的设备建立连接

AT+STAT - 读所有Profile状态

Command

AT+STAT

Response

+STAT=Param1, Param2, Param3…

Description

查询所有使能Profile的当前状态

Example:读取当前Profile
<< AT+PROFILE
>> +PROFILE=83
Example:读Profile的状态
<< AT+STAT
+STAT=3,1,2,5
>> OK
_images/profile_state.png

AT+DEVSTAT - 读设备状态

Command

AT+DEVSTAT

Response

+DEVSTAT=Param

Param

以10进制位字段表示,

BIT[0]

0: Power Off; 1: Power On

BIT[1]

0: BR/EDR Not Discoverable; 1: BR/EDR Discoverable

BIT[2]

0: BLE Not Advertising; 1: BLE Advertising

BIT[3]

0: BR/EDR Not Scanning; 1: BR/EDR Scanning

BIT[4]

0: BLE Not Scanning; 1: BLE Scanning

Example:常用组合和描述

0

Device power off

1

Device power on

3

Device power on, BR/EDR Discoverable

5

Device power on, BR/EDR Not Discoverable, BLE Advertising

7

Device power on, BR/EDR Discoverable, BLE Advertising

13

Device power on, BR/EDR Not Discoverable, BLE Advertising, Scanning nearby BR/EDR devices

AT+ADDR - 读BR/EDR蓝牙MAC地址

Command

AT+ADDR

Response

+ADDR=Param

Param

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

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

AT+LEADDR - 读BLE蓝牙MAC地址

Command

AT+LEADDR

Response

+LEADDR=Param

Param

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

AT+NAME - 读/写BR/EDR蓝牙名称

Command

AT+NAME{=Param1{,Param2}}

Param1

BR/EDR蓝牙名称(1~31 Bytes ASCII)

Param2

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

Response

+NAME=Param

Param

蓝牙名称

Description

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

Example:
读取BR/EDR蓝牙名称
<< AT+NAME
>> +NAME=FSC-BT1036-XXXX
>> OK

设置BR/EDR蓝牙名称,且关掉后缀
<< AT+NAME=ABC,0
>> OK

设置BR/EDR蓝牙名称为“ABC”并自动添加地址后缀
<< AT+NAME=ABC,1
>> OK

AT+LENAME - 读/写BLE蓝牙名称

Command

AT+LENAME{=Param1{,Param2}}

Param1

BLE蓝牙名称(1~25 Bytes ASCII)

Param2

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

Response

+LENAME=Param

AT+SSP - 读/写BR/EDR配对模式

Command

AT+SSP{=Param}

Param

Pairing mode (0~3, default:1)
(0) Legacy pairing, use pin code for pairing
(1) Secure simple pairing, auto pairing
(2) Secure simple pairing, display yes/no in pairing
(3) Secure simple pairing, passkey compare,
user need to accept/reject pair request with command AT+CFM

Response

+SSP=Param

Note

重启生效

AT+PIN - 读/写配对密码

Command

AT+PIN{=Param}

Param

配对密码(4~15 Bytes ASCII, default:0000)

Response

+PIN=Param

Description

当+SSP=0时,配对密码有效

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

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

AT+CFM - 接受/拒绝远端的配对请求

Command

AT+CFM=Param1, Param2

Param1

远端设备的MAC地址(12Bytes)

Param2

0-拒绝远端的配对请求
1-接受远端的配对请求

Description

当+SSP=3时,CFM命令有效

AT+COD: 读/写设备类型

Command

AT+COD=Param

Param

设备类型(6 bytes ASCII, default:240408 Handsfree device)

Response

+COD=Param

相关配置参考 COD.

AT+PAIR: 读/写BR/EDR/BLE可发现模式

Command

AT+PAIR=Param

Param

Mode(0-3)
0: Leave BR/EDR/BLE discoverable mode (stop advertising/broadcasting)
1: Enter BR/EDR discoverable mode (start broadcasting)
2: Enter BLE discoverable mode (start advertising)
3: Enter BR/EDR/BLE discoverable mode (start advertising/broadcasting)

Description

如果未连接设备(BR/EDR或BLE),模块将始终可被发现;
如果与远程设备连接,模块将不可被发现,除非收到此命令

AT+PAGE: 读/写BR/EDR可连接模式

Command

AT+PAGE=Param

Param

Mode(0-1)
0: Leave BR/EDR connectable mode (stop paging)
1: Enter BR/EDR connectable mode (start paging)

Description

如果未连接设备,模块将始终处于可连接模式,
如果与远程设备连接,模块将不可连接,除非收到此命令

AT+SCAN - 搜索附近的设备

Command

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

Param1

扫描方式(0~2)
0: 停止扫描
1: 扫描附近BR/EDR设备
2: 扫描附近BLE设备(部分程序不支持)
3: 扫描附近BR/EDR/BLE设备(部分程序不支持)

Param2

(1~48)扫描时间. unit:1.28s, default:12.8s

Param3

(1~25 Bytes ASCII)过滤名称.

Description

格式说明参考: +SCAN - 扫描结果

AT+PLIST - 读取/清除配对记录

Command

AT+PLIST{=Param}

Param

(0/1~8/12 Bytes MAC address)
(0) 清除所有配对记录
(1~8) 清除指定索引的配对记录
(MAC) 清除指定地址的配对记录

Response1

+PLIST=Param1, Param2, Param3{,Param4}

Param1

(1~8) 配对设备序号

Param2

以10进制位字段,设备连接的profile,参考AT+PROFILE

Param3

(MAC)配对设备的MAC地址

Param4

(UTF8)配对设备的蓝牙名称

Response2

+PLIST=E 配对记录查询完成

Example:读模块的配对记录
<< AT+PLIST
>> +PLIST=1,32808,1C5CF226D773, iPhone12
+PLIST=2,40, A0BC30075421, Samsung S8
+PLIST=E
>> OK

Example:清除模块的所有配对记录
<< AT+PLIST=0
>> OK

AT+DSCA - 断开所有连接

Command

AT+DSCA

Description

模块断开与远程设备的所有蓝牙连接

AT+TPMODE - 打开/关闭透传模式

Command

AT+TPMODE{=Param}

Param

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

Response

+TPMODE=Param

Description

当在SPP/GATT协议下连接并且打开透传模式时,AT指令将会被禁用,
通过UART接收的每个字节将被发送到远端

AT+SECCFG: 设置Security等级

Command

AT+PAGE=Param

Param

Mode(0-1),default:0
0: Level 0
1: Level 2

Description

默认0,两个909C连接无配对记录, 需设置1,则有配对记录

SPP指令

AT+SPPSTAT - 读SPP状态

Command

AT+SPPSTAT

Response

+SPPATAT=Param

Description

格式说明参考: +SPPSTAT - SPP状态

AT+SPPCONN - 建立SPP连接

Command

AT+SPPCONN{=Param}

Param

目标设备MAC地址(12 Bytes ASCII)

AT+SPPDISC - 断开SPP连接

Command

AT+SPPDISC

Description

断开当前与远程设备的SPP连接

AT+SPPSEND - 通过SPP发数据

Command

AT+SPPSEND=Param1,Param2

Param1

Payload length (1~492)

Param2

Payload (1~492 Bytes UTF8)

Description

如果透传模式开启,该指令将会被禁用

Example: 通过SPP给远程设备发送数据 “1234567890”
<< AT+SPPSEND=10,1234567890
>> OK

GATT指令

AT+GATTSTAT - 读GATT状态

Command

AT+GATTSTAT

Response

+GATTATAT=Param

Description

格式说明参考: +GATTSTAT - GATT状态

AT+GATTDISC - 断开GATT连接

Command

AT+GATTDISC

Description

断开当前与远程设备的GATT连接

AT+GATTSEND - 通过GATT发数据

Command

AT+GATTSEND=Param1,Param2

Param1

Payload length (1~492)

Param2

Payload (1~492 Bytes UTF8)

Description

如果透传模式开启,该指令将会被禁用

Example: 通过GATT给远程设备发送数据 “1234567890”
<< AT+SPPSEND=10,1234567890
>> OK

HID指令

AT+HIDSTAT - 读HID状态

Command

AT+HIDSTAT

Response

+HIDATAT=Param

Description

格式说明参考: +HIDSTAT - HID状态

AT+HIDCONN - 建立HID连接

Command

AT+HIDCONN{=Param}

Param

目标设备MAC地址(12 Bytes ASCII)

AT+HIDDISC - 断开HID连接

Command

AT+HIDDISC

Description

断开当前与远程设备的HID连接

AT+HIDMODE - 读/写HID模式

Command

AT+HIDMODE{=Param}

Param

HID键盘输入模式(0~1), default 1
(0) Hex key code
(1) Ascii key code (English)

Note

模块可以通过特定的固件支持各种键盘语言,例如:
TURKEY SPAIN PORTUGAL FRANCE GERMANY ITALY CZECH JAPAN

AT+HIDDLY - 读/写HID发送时间

Command

AT+HIDDLY{=Param}

Param

HID report period in millisecond, default 10 ms

AT+HIDSEND - 通过HID发数据

Command

AT+HIDSEND=Param1,Param2

Param1

Report length

Param2

Report payload

Note

For special key code:
0x0D -> ENTER
0x08 -> BACKSPACE
0x09 -> TAB
0x20 -> SPACE

Description

如果透传模式开启,该指令将会被禁用

Example: 发送字符 ‘A’ 到远端设备 (on AT+HIDMODE=1)
>> AT+HIDSEND=1,A
<< OK
Example: 发送字符 ‘A’ 到远端设备 (on AT+HIDMODE=0)
<< AT+HIDSEND=2, x00 x04
>> OK
Note: 数据为hex,对应的实际数据如下:
41 54 2B 48 49 44 53 45 4E 44 3D 32 2C 00 04 0d 0a
Where:
00 : modifier
04 : key code
模块将自动发送弹起键

AT+HIDCMD - 通过HID发命令

Command

AT+HIDCMD=Param

Param

2 bytes hid user report
e.g., for iPhone:
Play/Pause: 00 CD
Stop: 00 B7
Forward: 00 B5
Backward: 00 B6
Fast Forward: 00 B3
Rewind:00 B4
Record:00 B2
VolumpUp:00 E9
VolumpDn:00 EA
Mute:00 E2
On screen keyboard Toggle:01 AE

Description

如果透传模式开启,该指令将会被禁用

Example: 发送音量+给手机
<< AT+HIDCMD= x00 xE9
>> OK
Note: 数据为hex,对应的实际数据如下:
41 54 2B 48 49 44 43 4D 44 3D 00 E9 0D 0A

Events表

通用指示

+PWRSTAT - 上电状态

Format

+PWRSTAT=Param

Param

0-Powering off 1-Powering on(booting)

Description

在上下电状态下,不建议使用AT命令

+SCAN - 扫描结果

Format1

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

Param1

索引

Param2

RSSI (-127 ~ -1)

Param3

设备地址类型 (0~3)
(0) BR/EDR address
(1) LE public address
(2) LE random address
(3) iOS device with Carplay support

Param4

MAC地址 (12 Bytes ASCII)

Param5

BR/EDR设备名称或者LE设备广播数据

Param6

设备类型(6 Bytes ASCII)

Format2

+SCAN=E: 停止扫描

Example: 扫描BR/EDR附近设备
<< AT+SCAN=1
>> OK
+SCAN=1,-32,3,B019C66209FA,wt-iphone,7A020C
+SCAN=2,-74,0,DC0D30000053,BW226,040680
+SCAN=3,-43,0,00158354F994,LAPTOP-3L,120104
+SCAN=E

+PAIRREQ - 配对请求

Format

+PAIRREQ=Param1,Param2{,Param3}

Param1

Passkey (000000~999999)

Param2

当前配对设备的MAC地址(12 Bytes ASCII)

Param3

当前配对设备的名称

+PAIRED - 配对结果

Format

+PAIRED=Param1,Param2

Param1

配对结果 (0)-成功 (1~255)-失败原因

Param2

当前配对设备的MAC地址(12 Bytes ASCII)

SPP指示

Note

由于IAP2(Apple Accessory Protocol)和AAP(Android Auto Protocol)的指示和SPP几乎相同,分别是:

+IAPSTAT, +IAPDATA for iAP2 profile

+AAPSTAT, +AAPDATA for AAP profile

文档将忽略这些指示说明, 默认BT1036、BT955不支持该指令.

+SPPSTAT - SPP状态

Format

+SPPSTAT=Param

Param

(0) Unsupported
(1) Standby
(2) Connecting
(3) Connected

+SPPDATA - SPP接收数据

Format

+SPPDATA=Param1,Param2

Param1

Payload length

Param2

Payload

Example: 通过SPP从远端设备接收到数据“ 1234567890”
<< +SPPDATA=10,1234567890

GATT指示

+GATTSTAT - GATT状态

Format

+GATTSTAT=Param

Param

(0) Unsupported
(1) Standby
(2) Connecting
(3) Connected

+GATTDATA - GATT接收数据

Format

+SPPDATA=Param1,Param2

Param1

Payload length

Param2

Payload

Example: 通过GATT从远端设备接收到数据“ 1234567890”
<< +GATTDATA=10,1234567890

HID指示

+HIDSTAT - HID状态

Format

+HIDSTAT=Param

Param

(0) Unsupported
(1) Standby
(2) Connecting
(3) Connected

应用场景

读写参数

_images/read_write.png

MCU 修改设备名CARKIT参考代码,修改任何参数建议先查询再修改最后校验:

 1void change_name(void)
 2{
 3    uart_send("AT+NAME\r\n");
 4    if(uart_read("+NAME",name_buf))
 5    {
 6        if(memcmp(name_buf,"CARKIT",6))
 7        {
 8            uart_send("AT+NAME=CARKIT,0\r\n");      //defalut disable MAC address suffix
 9            uart_send("AT+NAME\r\n"); // read bt name
10            if(uart_read("+NAME",name_buf))
11            {
12                if(memcmp(name_buf,"CARKIT",6))
13                {
14                    //change name fail
15                }
16                else
17                {
18                    //change name success
19                }
20            }
21        }
22    }
23}

数据透传

在透传状态下可以进行全双工透明通信, 有关模块进入透传状态的时序,参考下图:

_images/throughput.png

SPP主从

  • 蓝牙模块的标准固件同时支持SPP主从功能, 当使用SPP主功能的AT命令时,模块充当主角色,否则充当从角色.

  • SPP主端功能AT命令列表:

Commands

Description

AT+SCAN

搜索周围蓝牙设备

AT+SPPCONN

建立SPP连接

AT+SPPSTAT

读SPP状态

AT+SPPDISC

断开SPP连接

AT+SPPSEND

通过SPP发送数据

  • SPP主端交互(AT命令模式)示例:

_images/SPP.png

附录

下载 PDF版本

下载PDF版本