FSC-BT909C 指令手册
介绍
描述
本设计指南适用于工程师开发 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为例:
引脚描述
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 开头,使用 <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 |
Event格式
所有的事件使用<CR><LF>开始, 使用<CR><LF>结束
若事件包含参数, 参数应位于 “=” 后面
若事件包含多项参数, 参数应使用 “,” 分割
使用命令AT+SEP替换默认分隔符以防止冲突
指令表
通用指令
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} |
|
设置范围0x01~0xFF,默认: ‘,’ , 其中‘0’表示0xFF |
Response |
返回当前分隔符 |
Description |
events/responses的参数可能包含与默认分隔符相同的值,
使用此命令替换默认分隔符以防止冲突。
(通常将默认分隔符“,”替换为十六进制值“xFF”)
|
AT+VER - 读取固件版本
Command |
AT+VER |
Response |
+VER=Param1,Param2,Param3 |
|
模块类型 |
|
固件版本 |
|
生产日期 |
Note |
升级固件后,生产日期不会变化 |
AT+BAUD - 读/写串口波特率
Command |
AT+BAUD{=Param} |
|
2400/4800/9600/19200/38400/57600/115200(default)/128000/
230400/256000/460800/512000/921600/1382400
|
Response |
+BAUD=Param1,Param2,Param3 |
|
返回当前所有支持的波特率 |
Description |
模块将在接收到这条指令后,马上切换波特率.BT1036、BT955、BT909C不支持2400 |
AT+REBOOT - 软件复位
Command |
AT+REBOOT |
Response |
OK |
Description |
模块将复位 |
AT+RESTORE - 恢复出厂设置
Command |
AT+RESTORE |
Response |
OK |
Description |
模块将恢复为出厂设置 |
AT+BTEN - 开关蓝牙
Command |
AT+BTEN{=Param} |
|
0-关闭蓝牙 1-打开蓝牙 |
AT+PROFILE - 蓝牙Profile配置
Command |
AT+PROFILE{=Param} |
|
以10进制位字段表示,每位表示 |
|
SPP (Serial Port Profile) |
|
GATT Server (Generic Attribute Profile) |
|
GATT Client (Generic Attribute Profile) |
|
HFP-HF (Hands-Free Profile Handsfree) |
|
HFP-AG (Hands-Free Profile Audio Gateway) |
|
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 Keyboard (Human Interface Profile) |
|
PBAP Server (Phonebook Access Profile) |
|
iAP2 (For iOS devices) |
Response |
+PROFILE=Param |
Description |
无法同时启用GATT Server and Client, HFP Sink and Source,
A2DP Sink and Source,AVRCP Controller and Target
|
AT+AUTOCONN - 设置蓝牙上电重连Profile
Command |
AT+AUTOCONN{=Param} |
|
以10进制位字段表示, 格式参考:AT+PROFILE |
Response |
+AUTOCONN=Param |
Description |
上电后,模块将根据设置PROFILE尝试与配对列表中的设备建立连接 |
AT+STAT - 读所有Profile状态
Command |
AT+STAT |
Response |
+STAT=Param1, Param2, Param3… |
Description |
查询所有使能Profile的当前状态 |
AT+DEVSTAT - 读设备状态
Command |
AT+DEVSTAT |
Response |
+DEVSTAT=Param |
|
以10进制位字段表示, |
|
0: Power Off; 1: Power On |
|
0: BR/EDR Not Discoverable; 1: BR/EDR Discoverable |
|
0: BLE Not Advertising; 1: BLE Advertising |
|
0: BR/EDR Not Scanning; 1: BR/EDR Scanning |
|
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 |
|
模块的BR/EDR蓝牙MAC地址(12 Bytes ASCII) |
AT+LEADDR - 读BLE蓝牙MAC地址
Command |
AT+LEADDR |
Response |
+LEADDR=Param |
|
模块的BLE蓝牙MAC地址(12 Bytes ASCII) |
AT+NAME - 读/写BR/EDR蓝牙名称
Command |
AT+NAME{=Param1{,Param2}} |
|
BR/EDR蓝牙名称(1~31 Bytes ASCII) |
|
使能MAC地址后缀(0/1,default:1)
0: 关闭后缀
1: 开启后缀“-XXXX”(MAC地址后4Byte)
|
Response |
+NAME=Param |
|
蓝牙名称 |
Description |
如果存在参数则设置蓝牙名称,否则只是读取 |
AT+LENAME - 读/写BLE蓝牙名称
Command |
AT+LENAME{=Param1{,Param2}} |
|
BLE蓝牙名称(1~25 Bytes ASCII) |
|
使能MAC地址后缀(0/1,default:1)
0: 关闭后缀
1: 开启后缀“-XXXX”(MAC地址后4Byte)
|
Response |
+LENAME=Param |
AT+SSP - 读/写BR/EDR配对模式
Command |
AT+SSP{=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} |
|
配对密码(4~15 Bytes ASCII, default:0000) |
Response |
+PIN=Param |
Description |
当+SSP=0时,配对密码有效 |
AT+CFM - 接受/拒绝远端的配对请求
Command |
AT+CFM=Param1, Param2 |
|
远端设备的MAC地址(12Bytes) |
|
0-拒绝远端的配对请求
1-接受远端的配对请求
|
Description |
当+SSP=3时,CFM命令有效 |
AT+COD: 读/写设备类型
Command |
AT+COD=Param |
|
设备类型(6 bytes ASCII, default:240408 Handsfree device) |
Response |
+COD=Param |
相关配置参考 COD.
AT+PAIR: 读/写BR/EDR/BLE可发现模式
Command |
AT+PAIR=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 |
|
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}} |
|
扫描方式(0~2)
0: 停止扫描
1: 扫描附近BR/EDR设备
2: 扫描附近BLE设备(部分程序不支持)
3: 扫描附近BR/EDR/BLE设备(部分程序不支持)
|
|
(1~48)扫描时间. unit:1.28s, default:12.8s |
|
(1~25 Bytes ASCII)过滤名称. |
Description |
格式说明参考: +SCAN - 扫描结果 |
AT+PLIST - 读取/清除配对记录
Command |
AT+PLIST{=Param} |
|
(0/1~8/12 Bytes MAC address)
(0) 清除所有配对记录
(1~8) 清除指定索引的配对记录
(MAC) 清除指定地址的配对记录
|
Response1 |
+PLIST=Param1, Param2, Param3{,Param4} |
|
(1~8) 配对设备序号 |
|
以10进制位字段,设备连接的profile,参考AT+PROFILE |
|
(MAC)配对设备的MAC地址 |
|
(UTF8)配对设备的蓝牙名称 |
Response2 |
+PLIST=E 配对记录查询完成 |
AT+DSCA - 断开所有连接
Command |
AT+DSCA |
Description |
模块断开与远程设备的所有蓝牙连接 |
AT+TPMODE - 打开/关闭透传模式
Command |
AT+TPMODE{=Param} |
|
模式(0~1,默认0) 0: 指令模式 1: 透传模式 |
Response |
+TPMODE=Param |
Description |
当在SPP/GATT协议下连接并且打开透传模式时,AT指令将会被禁用,
通过UART接收的每个字节将被发送到远端
|
AT+SECCFG: 设置Security等级
Command |
AT+PAGE=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} |
|
目标设备MAC地址(12 Bytes ASCII) |
AT+SPPDISC - 断开SPP连接
Command |
AT+SPPDISC |
Description |
断开当前与远程设备的SPP连接 |
AT+SPPSEND - 通过SPP发数据
Command |
AT+SPPSEND=Param1,Param2 |
|
Payload length (1~492) |
|
Payload (1~492 Bytes UTF8) |
Description |
如果透传模式开启,该指令将会被禁用 |
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 |
|
Payload length (1~492) |
|
Payload (1~492 Bytes UTF8) |
Description |
如果透传模式开启,该指令将会被禁用 |
HID指令
AT+HIDSTAT - 读HID状态
Command |
AT+HIDSTAT |
Response |
+HIDATAT=Param |
Description |
格式说明参考: +HIDSTAT - HID状态 |
AT+HIDCONN - 建立HID连接
Command |
AT+HIDCONN{=Param} |
|
目标设备MAC地址(12 Bytes ASCII) |
AT+HIDDISC - 断开HID连接
Command |
AT+HIDDISC |
Description |
断开当前与远程设备的HID连接 |
AT+HIDMODE - 读/写HID模式
Command |
AT+HIDMODE{=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} |
|
HID report period in millisecond, default 10 ms |
AT+HIDSEND - 通过HID发数据
Command |
AT+HIDSEND=Param1,Param2 |
|
Report length |
|
Report payload |
Note |
For special key code:
0x0D -> ENTER
0x08 -> BACKSPACE
0x09 -> TAB
0x20 -> SPACE
|
Description |
如果透传模式开启,该指令将会被禁用 |
AT+HIDCMD - 通过HID发命令
Command |
AT+HIDCMD=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 |
如果透传模式开启,该指令将会被禁用 |
Events表
通用指示
+PWRSTAT - 上电状态
Format |
+PWRSTAT=Param |
|
0-Powering off 1-Powering on(booting) |
Description |
在上下电状态下,不建议使用AT命令 |
+SCAN - 扫描结果
Format1 |
+SCAN =Param1,Param2,Param3, Param4,Param5,Param6 |
|
索引 |
|
RSSI (-127 ~ -1) |
|
设备地址类型 (0~3)
(0) BR/EDR address
(1) LE public address
(2) LE random address
(3) iOS device with Carplay support
|
|
MAC地址 (12 Bytes ASCII) |
|
BR/EDR设备名称或者LE设备广播数据 |
|
设备类型(6 Bytes ASCII) |
Format2 |
+SCAN=E: 停止扫描 |
+PAIRREQ - 配对请求
Format |
+PAIRREQ=Param1,Param2{,Param3} |
|
Passkey (000000~999999) |
|
当前配对设备的MAC地址(12 Bytes ASCII) |
|
当前配对设备的名称 |
+PAIRED - 配对结果
Format |
+PAIRED=Param1,Param2 |
|
配对结果 (0)-成功 (1~255)-失败原因 |
|
当前配对设备的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 |
|
(0) Unsupported
(1) Standby
(2) Connecting
(3) Connected
|
+SPPDATA - SPP接收数据
Format |
+SPPDATA=Param1,Param2 |
|
Payload length |
|
Payload |
GATT指示
+GATTSTAT - GATT状态
Format |
+GATTSTAT=Param |
|
(0) Unsupported
(1) Standby
(2) Connecting
(3) Connected
|
+GATTDATA - GATT接收数据
Format |
+SPPDATA=Param1,Param2 |
|
Payload length |
|
Payload |
HID指示
+HIDSTAT - HID状态
Format |
+HIDSTAT=Param |
|
(0) Unsupported
(1) Standby
(2) Connecting
(3) Connected
|
应用场景
读写参数
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}
数据透传
在透传状态下可以进行全双工透明通信, 有关模块进入透传状态的时序,参考下图:
![]()
SPP主从
蓝牙模块的标准固件同时支持SPP主从功能, 当使用SPP主功能的AT命令时,模块充当主角色,否则充当从角色.
SPP主端功能AT命令列表:
Commands |
Description |
AT+SCAN |
搜索周围蓝牙设备 |
AT+SPPCONN |
建立SPP连接 |
AT+SPPSTAT |
读SPP状态 |
AT+SPPDISC |
断开SPP连接 |
AT+SPPSEND |
通过SPP发送数据 |
SPP主端交互(AT命令模式)示例: