FSC-BT6038A 编程手册

概述

发布说明

序号

版本

日期

说明

1

V1.0.0

2024/05/23

  1. 初始版本

2
V1.0.1
2024/07/09
1. 增加 Le Audio 相关指令和消息说明
2. 增加 GATTS 相关指令和消息说明
3. 修复已知错误
3
V1.0.2
2025/01/07
1. 修复已知错误
2. 增加部分指令和事件上报

说明

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

默认配置

BR/EDR 名称

FSC-BT6038A

BLE 名称

FSC-BT6038A-LE

串口配置

115200/8/N/1

硬件参考设计

引脚图

以 FSC-BT6038A 为例:

_images/BT6038A_pin_map.png

引脚说明

序号

名称

类型

说明

1

SYS_CTRL

I

开关机控制, 数字输入

2

MIC_LP

A

左声道模拟差分输入正

3

MIC_LN

A

左声道模拟差分输入负

4

MIC_RN

A

右声道模拟差分输入正

5

MIC_RP

A

右声道模拟差分输入负

6

MIC_BIAS

A

麦克风偏置输出

7

NC

N

未使用, 悬空

8

NC

N

未使用, 悬空

9

VDD_IO

P

I/O 电源输入

10

PIN34

I/O

可编程 I/O, 复用功能 I2C_SDA

11

PIN35

I/O

可编程 I/O, 复用功能 I2C_SCL

12

NC

N

未使用, 悬空

13

NC

N

未使用, 悬空

14

PIO18

I/O

可编程 I/O, 复用功能 I2S_DOUT

15

PIO16

I/O

可编程 I/O, 复用功能 I2S_BCLK

16

PIO19

I/O

可编程 I/O, 复用功能 I2S_DIN

17

PIO17

I/O

可编程 I/O, 复用功能 I2S_WS

18

PIO15

I/O

可编程 I/O, 复用功能 I2S_MCLK

19

VDD

P

电源输入

20

GND

P

电源地

21

AIO0

I/O

通用数字/模拟输入, LED 驱动输出

22

AIO1

I/O

通用数字/模拟输入, LED 驱动输出

23

RESET

I

复位输入

24

VBUS

P

USB 电源输入

25

GND

P

电源地

26

USB_DP

I/O

USB 数据差分正

27

USB_DN

I/O

USB 数据差分负

28

PIN7

I/O

可编程 I/O, TRBI_MISO

29

PIN6

I/O

可编程 I/O, TRBI_MOSI

30

PIN8

I/O

可编程 I/O, TRBI_CLK

31

PIO5

I/O

可编程 I/O, UART_TX

32

PIO4

I/O

可编程 I/O, UART_RX

33

PIO3

I/O

可编程 I/O, UART_CTS, SPDIF输入

34

GND

P

电源地

35

EXT_ANT

A

天线接口

36

GND

P

电源地

说明

  • 简单测试, 只需连接 VDD/VDD_IO/GND/UART_TX/UART_RX

  • 电路设计绘制完成后, 请发给feasy.com审核以确保模块最佳通讯距离

功能说明

配置规范

  • SPP (串口配置规范)

  • GATTS (通用属性配置文件, LE外设)

  • GATTC (通用属性配置文件, LE中心)

  • HFP-HF (免提规范, 设备)

  • HFP-AG (免提规范, 网关)

  • A2DP-SINK (高级音频分发规范, 从端)

  • A2DP-SOURCE (高级音频分发规范, 主端)

  • AVRCP-CONTROLLER (音视频远程控制规范, 控制器)

  • AVRCP-TARGET (音视频远程控制规范, 目标)

  • HID-DEVICE (人机接口规范)

  • PBAP (电话本规范)

  • LE-AUDIO (低功耗音频规范)

GATT 默认服务和特征

类型

UUID

特征

说明

服务

0xFFF0

透传服务

0xFFF2

写, 写不带响应

从 APP 发到模块

通知

0xFFF1

通知

从模块发到 APP

指令说明

概述

  • 所有指令和消息, 都符合下述形式

  • { } 中包含的内容是可选参数

  • << 后跟随主机发给模块的指令

  • >> 后跟随模块发给主机的响应/消息

指令格式

AT+CMD{=参数1{,参数2{,参数3...}}}<CR><LF>
  • 所有指令以"AT"开始, 回车换行结尾

  • <CR>表示回车符, 十六进制为0x0D

  • <LF>表示换行符, 十六进制为0x0A

  • 如果指令包含参数, 参数在"="之后

  • 如果指令包含多个参数, 每个参数之间以","分隔

  • 如果指令有响应, 响应以回车换行开始和结束

  • 模块对每条指令都会返回执行结果, 执行成功返回"OK", 失败返回"ERROR"

例如: 获取模块BR/EDR名称
<< AT+NAME
>> +NAME=FSC-BT6038A
>> OK
例如: 在没有来电和去电的时候接通通话
<< AT+HFPANSW
>> ERROR

消息格式

<CR><LF>+消息{=参数1{,参数2{,参数3...}}}<CR><LF>
  • 所有上报的消息, 以回车换行开始和结束

  • 如果消息包含参数, 参数在"="之后

  • 如果消息包含多个参数, 每个参数之间以","分隔

例如: 从APP接收到SPP的数据, 内容为"1234567890"
>> +SPPDATA=10,1234567890

指令列表

通用指令

AT+HELP - 列出当前固件支持的所有指令

指令

AT+HELP

响应
<COMMAND SUMMARY:DESCRIPTION:PROFILE CATEGORY>
...
...

AT+VER - 获取固件版本信息

指令

AT+VER

响应

+VER=参数1,参数2,参数3

说明

+VER - 固件版本信息

AT+BAUD - 获取/设置串口波特率

指令

AT+BAUD{=参数}

参数
9600/ 19200/ 38400/ 57600/ 115200/ 230400/ 460800
500000/ 921600/ 1000000/ 1382400/ 1500000/ 2000000

响应

+BAUD=参数

参数

模块当前波特率

说明

修改波特率立即生效, 不需要重启模块

AT+I2SCFG - 获取/设置 I2S 配置

指令

AT+I2SCFG{=参数}

参数

十进制数, 以十六进制解析

位[0]
0: 失能
1: 使能
位[1]
0: 主机模式
1: 从机模式
位[2]
0: 48000Hz采样率
1: 44100Hz采样率
位[3]
0: 数据左对齐
1: 数据右对齐
位[4]
0: 数据延时1位
1: 数据不延时
位[6-5]
00: 16位采样深度
01: 24位采样深度
10: 32位采样深度

响应

+I2SCFG=参数

参数

当前I2S配置, 格式如上

说明

重启后生效

AT+MICGAIN - 获取/设置输入增益

指令

AT+MICGAIN{=参数}

参数
0 ~ 10: 设置目标增益
+: 增益加大
-: 增益减小

响应

+MICGAIN=参数

参数

当前输入增益

说明
USB输入模式, 参数只能是+/-
I2S/SPDIF输入, 此指令无效

AT+REBOOT - 软件复位

指令

AT+REBOOT

说明

模块将断开所有连接, 然后重启

AT+RESTORE - 恢复默认配置

指令

AT+RESTORE

说明

模块将恢复默认配置, 然后重启

AT+BTEN - 获取和设置蓝牙状态

指令

AT+BTEN{=参数}

参数
0: 失能
1: 使能

响应

+BTEN=参数

参数

当前蓝牙状态

AT+LECFG - 获取/设置 LE 随机 MAC 地址

指令

AT+LECFG{=参数}

参数
0: 失能
1: 使能

响应

+LECFG=参数

参数

当前状态

AT+PROFILE - 获取/设置使用的蓝牙配置规范

指令

AT+PROFILE{=参数}

参数

十进制数, 以十六进制解析

位[0]

SPP (串口配置规范)

位[1]

GATTS (通用属性配置文件, LE外设)

位[2]

GATTC (通用属性配置文件, LE中心)

位[3]

HFP-HF (免提规范, 设备)

位[4]

HFP-AG (免提规范, 网关)

位[5]

A2DP-SINK (高级音频分发规范, 从端)

位[6]

A2DP-SOURCE (高级音频分发规范, 主端)

位[7]

AVRCP-CONTROLLER (音视频远程控制规范, 控制器)

位[8]

AVRCP-TARGET (音视频远程控制规范, 目标)

位[9]

HID-DEVICE (人机接口规范)

位[10]

PBAP (电话本规范)

位[11]

LE-AUDIO (低功耗音频规范)

响应

+PROFILE=参数

参数

当前使用的规范

说明
修改配置, 模块自动重启
BT6038A 只支持 SPP, HFP-AG, A2DP-SOURCE, AVRCP-TARGET, LE-AUDIO, GATTS
LE-AUDIO, GATTS 不能同时使用

AT+AUTOCONN - 获取/设置上电自动回连次数

指令

AT+AUTOCONN{=参数}

参数
0: 失能
1 ~ 15: 重连次数

响应

+AUTOCONN=参数

参数

当前重连次数

AT+STAT - 获取所有状态

指令

AT+STAT

响应

+STAT=参数1,参数2,参数3,参数4,参数5,参数6,参数7

参数1

+DEVSTAT - 模块状态

参数2

+SPPSTAT - SPP 状态

参数3

+GATTSTAT - GATT 状态

参数4

+HFPSTAT - HFP 状态

参数5

+A2DPSTAT - A2DP 状态

参数6

+AVRCPSTAT - AVRCP 状态

参数7

+LEASTAT - Le Audio 状态

AT+DEVSTAT - 获取模块状态

指令

AT+DEVSTAT

响应

+DEVSTAT=参数

参数

+DEVSTAT - 模块状态

AT+ADDR - 获取 BR/EDR MAC 地址

指令

AT+ADDR

响应

+ADDR=参数

参数

模块 BR/EDR MAC 地址(12字节 ASCII)

AT+LEADDR - 获取 LE MAC 地址

指令

AT+LEADDR

响应

+LEADDR=参数

参数

模块 LE MAC 地址(12字节 ASCII)

AT+NAME - 获取/设置 BR/EDR 名称

指令

AT+NAME{=参数1{,参数2}}

参数1

BR/EDR 名称

参数2
名称后缀, 在设置名称后面追加 MAC 地址的后4位
0: 失能
1: 使能

响应

+NAME=参数

参数

BR/EDR 名称

说明

设置名称最多不超过31字节

AT+LENAME - 获取/设置 LER 名称

指令

AT+LENAME{=参数1{,参数2}}

参数1

LE 名称

参数2
名称后缀, 在设置名称后面追加 MAC 地址的后4位
0: 失能
1: 使能

响应

+LENAME=参数

参数

LE 名称

说明

设置名称最多不超过31字节

AT+ADVDATA - 获取/设置 LE 广播数据

指令

AT+ADVDATA{=参数}

参数

LE 广播数据

响应

+ADVDATA=参数

参数

当前 LE 广播数据

说明
获取/设置广播数据, 格式为十六进制字符串, 长度最多62字节
此指令在未使能 GATTS 时无效

AT+COD - 获取/设置模块类型

指令

AT+COD=参数

参数

设备类型(6字节 ASCII)

响应

+COD=参数

参数

设备类型

说明

设备类型, 详见 COD

AT+PAIR - 获取/设置蓝牙可见性

指令

AT+PAIR=参数

参数
0: 失能
1: 使能

响应

+PAIR=参数

参数

当前蓝牙可见性

AT+SCAN - 扫描附近设备

指令

AT+SCAN=参数1{,参数2}{,参数3}

参数1
0: 停止扫描
1: 扫描 BR/EDR 设备
2: 扫描 LE 设备

参数2

扫描时间, 最大 255 (单位: 秒)

参数3
0: LE 上报格式和 BR/EDR 一样
1: LE 上报原始广播数据
2: 只上报支持 Le Audio 设备

说明

+SCAN - 扫描结果

AT+PLIST - 获取/删除配对记录

指令

AT+PLIST{=参数}

参数
0: 删除所有配对记录
1 ~ 8: 删除对应序号的配对记录
MAC 地址(12字节 ASCII): 删除对应 MAC 地址的配对记录

响应1

+PLIST=参数1, 参数2{,参数3}

参数1

序号

参数2

MAC 地址(12字节 ASCII)

参数3

配对设备名称(UTF-8)

响应2

+PLIST=E

说明

如果不带参数, 则列出所有配对记录

AT+DSCA - 断开所有蓝牙连接

指令

AT+DSCA

说明

此指令只是发起断开请求, 以实际查询对应状态为准

AT+TPMODE - 获取/设置数据透传模式

指令

AT+TPMODE{=参数}

参数
0: 失能
1: 使能

响应

+TPMODE=参数

参数

当前透传模式

说明

当 SPP/GATT 连接上并且使能透传模式, 串口收到的所有数据都将发送到 APP

AT+AUXCFG - 获取/设置音频输入模式

指令

AT+AUXCFG{=参数}

参数
0: USB
1: 模拟
2: SPDIF
3: I2S

响应

+AUXCFG=参数

参数

当前输入模式

说明
重启后生效
Le Audio 模式, 只支持USB和模拟输入

AT+LINKKEY - 获取连接设备的密钥

指令

AT+LINKKEY=参数

参数

目标设备 MAC 地址(12字节 ASCII)

响应

+LINKKEY=参数1,参数2

参数1

目标设备 MAC 地址(12字节 ASCII)

参数2

目标设备连接密钥(32字节 ASCII)

AT+RSSI - 获取连接设备信号值

指令

AT+RSSI=参数

参数

目标设备 MAC 地址(12字节 ASCII)

响应

+RSSI=参数1,参数2

参数1

目标设备 MAC 地址(12字节 ASCII)

参数2

目标设备连接信号值

说明

如果返回0, 表示获取失败

AT+LINKCFG - 获取/设置自动扫描连接

指令

AT+LINKCFG{=参数1{,参数2}}

参数1
0: 失能
1: 使能
参数2
0: 扫描所有设备
1: 只扫描主服务为音频的设备

AT+AUDMODE - 获取/设置蓝牙音频模式

指令

AT+AUDMODE{=参数1}

参数1
0: BR/EDR 模式
1: Le Audio 广播模式
2: Le Audio 单播模式

说明

修改配置, 模块自动重启

AT+PRINT - 获取/设置消息上报模式

指令

AT+PRINT{=参数1}

参数1
0: 失能
1: 失能

说明

打开/关闭消息上报

HFP 指令

AT+HFPSTAT - 获取 HFP 状态

指令

AT+HFPSTAT

响应

+HFPSTAT=参数

参数

+HFPSTAT - HFP 状态

AT+HFPCONN - 创建 HFP 连接

指令

AT+HFPCONN{=参数}

参数

目标设备 MAC 地址(12字节 ASCII)

说明

如果不带参数, 将连接最后连接的设备

AT+HFPDISC - 断开 HFP 连接

指令

AT+HFPDISC

说明

此指令只是发起断开请求, 以实际查询对应状态为准

AT+HFPRING - 模拟来电

指令

AT+HFPRING{=参数}

参数

模拟来电号码(ASCII)

说明
最多15字节
如果不带参数, 将重拨上次通话号码

AT+HFPANSW - 接听来电

指令

AT+HFPANSW

AT+HFPCHUP - 拒接/挂断通话

指令

AT+HFPCHUP

AT+HFPAUDIO - 建立/断开通话

指令

AT+HFPAUDIO=参数

参数
0: 断开与连接设备的通话
1: 建立与连接设备的通话

AT+HFPWBS - 获取/设置 HFP 协商功能

指令

AT+HFPWBS{=参数}

参数
0: 失能
1: 使能

响应

+HFPWBS=参数

参数

当前状态

AT+HFPNREC - 获取/设置 HFP 回声消除功能

指令

AT+HFPNREC{=参数}

参数
0: 失能
1: 使能

响应

+HFPNREC=参数

参数

当前状态

A2DP/AVRCP 指令

AT+A2DPSTAT - 获取 A2DP 状态

指令

AT+A2DPSTAT

响应

+A2DPSTAT=参数

参数

+A2DPSTAT - A2DP 状态

AT+A2DPCONN - 创建 A2DP 连接

指令

AT+A2DPCONN{=参数}

参数

目标设备 MAC 地址(12字节 ASCII)

说明

如果不带参数, 将连接最后连接的设备

AT+A2DPDISC - 断开 A2DP 连接

指令

AT+A2DPDISC

说明

此指令只是发起断开请求, 以实际查询对应状态为准

AT+A2DPCFG - 获取/设置 A2DP 编码配置

指令

AT+A2DPCFG{=参数}

参数

十进制数, 以十六进制解析

位[0]
AAC
0: 失能
1: 使能
位[1]
APTX
0: 失能
1: 使能
位[2]
APTX-LL
0: 失能
1: 使能
位[3]
APTX-HD
0: 失能
1: 使能
位[4]
APTX-AD
0: 失能
1: 使能
位[5]
LDAC
0: 失能
1: 使能

响应

当前配置

说明

BT6038A 只支持 APTX, APTX-AD, APTX-HD

AT+A2DPENC - 获取 当前 A2DP 使用的编码方式

指令

AT+A2DPENC

响应

+A2DPENC=参数

参数

+A2DPENC - A2DP 编码方式

AT+A2DPAUDIO - 建立/断开 A2DP 音频

指令

AT+A2DPAUDIO=参数

参数
0: 断开与连接设备的音频
1: 建立与连接设备的音频

AT+AVRCPSTAT - 获取 AVRCP 状态

指令

AT+AVRCPSTAT

响应

+AVRCPSTAT=参数

参数

+AVRCPSTAT - AVRCP 状态

AT+AVRCPCONN - 创建 AVRCP 连接

指令

AT+AVRCPCONN{=参数}

参数

目标设备 MAC 地址(12字节 ASCII)

说明

如果不带参数, 将连接最后连接的设备

AT+AVRCPDISC - 断开 AVRCP 连接

指令

AT+AVRCPDISC

说明

此指令只是发起断开请求, 以实际查询对应状态为准

AT+AVRCPSPKVOL - 获取/设置远端输出音量

Command

AT+AVRCPSPKVOL{=参数}

参数

音量值(0 - 15)

说明

此指令只在AVRCP已连接且远端设备支持绝对音量控制下有效

GATT 指令

AT+GATTSTAT - 获取 GATT 状态

指令

AT+GATTSTAT

响应

+GATTSTAT=参数

参数

+GATTSTAT - GATT 状态

AT+GATTSEND - 通过 GATT 发送数据

指令

AT+GATTSEND=参数1,参数2

参数1

数据长度(1 ~ 236)

参数2

数据内容

说明

数据透传模式, 此指令无效

SPP 指令

AT+SPPSTAT - 获取 SPP 状态

指令

AT+SPPSTAT

响应

+SPPSTAT=参数

参数

+SPPSTAT - SPP 状态

AT+SPPDISC - 断开 SPP 连接

指令

AT+SPPDISC

说明

此指令只是发起断开请求, 以实际查询对应状态为准

AT+SPPSEND - 通过 SPP 发送数据

指令

AT+SPPSEND=参数1,参数2

参数1

数据长度(1 ~ 236)

参数2

数据内容

说明

数据透传模式, 此指令无效

Le Audio 指令

AT+LEASTAT - 获取 Le Audio 状态

指令

AT+LEASTAT

响应

+LEASTAT=参数

参数

+LEASTAT - Le Audio 状态

AT+LEADISC - 断开 Le Audio 连接

指令

AT+LEADISC

说明
此指令只是发起断开请求, 以实际查询对应状态为准
此指令只在Le Audio 单播模式有效

AT+LEACONN - 创建 Le Audio 连接

指令

AT+LEACONN=参数1

参数1

目标设备 MAC 地址(12字节 ASCII)

说明

此指令只在Le Audio 单播模式有效

消息列表

通用消息

+VER - 固件版本信息

消息

+VER=参数1,参数2,参数3

参数1

模块型号

参数2

固件版本

参数3

固件编译时间

+DEVSTAT - 模块状态

消息

+DEVSTAT=参数

参数

十进制数, 以十六进制解析

位[0]
0: 关机
1: 开机
位[1]
0: BR/EDR 不可发现
1: BR/EDR 可发现
位[2]
0: LE 停止广播
1: LE 广播中
位[3]
0: BR/EDR 停止扫描
1: BR/EDR 扫描中
位[4]
0: LE 停止扫描
1: LE 扫描中

+SCAN - 扫描结果

消息1

+SCAN =参数1,参数2,参数3, 参数4,参数5{,参数6{,参数7}}

参数1

序号

参数2
0: LE 公共 MAC 地址
1: LE 随机 MAC 地址
2: BR/EDR MAC 地址

参数3

MAC 地址(12 字节 ASCII)

参数4

信号值(-127 ~ -1)

参数5

设备名称长度/广播数据长度

参数6

设备名称/广播数据

参数7

设备类型

消息2

+SCAN=E

说明

扫描结束

+PAIRED - 配对完成

消息

+PAIRED=参数

参数

当前配对设备 MAC 地址(12字节 ASCII)

+I2SSR - I2S 采样率

消息

+I2SSR=参数

参数

I2S 采样率

HFP 消息

+HFPSTAT - HFP 状态

消息

+HFPSTAT=参数

参数1
0: 不支持
1: 待机
2: 连接中
3: 已连接
4: 去电
5: 来电
6: 通话中

+HFPDEV - HFP 连接设备信息

消息

+HFPDEV=参数1{,参数2}

参数1

当前连接设备 MAC 地址

参数2

当前连接设备名称(UTF-8)

+HFPCONN - HFP 连接中

消息

+HFCONN=参数

参数

当前 HFP 连接中的设备 MAC 地址

+HFPAUDIO - HFP 通话状态

消息

+HFPAUDIO=参数

参数
0: 通话断开
1: 通话连接

+HFPCID - HFP 通话号码

消息

+HFPCID=参数

参数

通话号码(ASCII)

+HFPSR - HFP 通话采样率

消息

+HFPSR=参数

参数

通话采样率

+HFPHUNG - HFP 连接设备 拒接来电/结束去电

消息

+HFPHUNG

+HFPVGS - HFP 连接设备的扬声器增益

消息

+HFPVGS=参数

参数

连接设备的扬声器增益

+HFPVGM - HFP 连接设备的麦克风增益

消息

+HFPVGM=参数

参数

连接设备的麦克风增益

A2DP/AVRCP 消息

+A2DPSTAT - A2DP 状态

消息

+A2DPSTAT=参数

参数
0: 不支持
1: 待机
2: 连接中
3: 已连接
4: 播放中
5: 暂停播放

+A2DPENC - A2DP 编码方式

消息

+A2DPENC=参数

参数
1: SBC
2: APTX
3: APTX-HD
4: APTX-AD

+A2DPDEV - A2DP 连接设备信息

消息

+A2DPDEV=参数1{,参数2}

参数1

当前连接设备 MAC 地址

参数2

当前连接设备名称(UTF-8)

+A2DPCONN - A2DP 连接中

消息

+A2DPCONN=参数

参数

当前连接中的设备 MAC 地址

+A2DPSR - A2DP 编码采样率

消息

+A2DPSR=参数

参数

A2DP 编码采样率

+AVRCPSTAT - AVRCP 状态

消息

+AVRCPSTAT=参数

参数
0: 不支持
1: 待机
2: 连接中
3: 已连接

+AVRCPCONN - AVRCP 连接中

消息

+AVRCPCONN=参数

参数

当前连接中的设备 MAC 地址

+SPKVOL - 远端扬声器音量

消息

+SPKVOL=参数

参数

远端扬声器音量

+CTVOLUP - 音量加

消息

+CTVOLUP

说明

收到音量加指令

+CTVOLDN - 音量减

消息

+CTVOLDN

说明

收到音量加指令

+CTPLAY - 播放

消息

+CTPLAY

说明

收到播放指令

+CTPAUSE - 播放暂停

消息

+CTPAUSE

说明

收到播放暂停指令

+CTSTOP - 播放停止

消息

+CTSTOP

说明

收到播放停止指令

+CTFWD - 快进

消息

+CTFWD

说明

收到快进指令

+CTBACK - 快退

消息

+CTBACK

说明

收到快退指令

Le Audio 消息

+LEASTAT - Le Audio 状态

消息

+LEASTAT=参数

参数
0: 不支持
1: 待机
2: 连接中
3: 已连接
4: 播放中
5: 播放暂停

+LEASR - Le Audio 采样率

消息

+LEASR=参数

参数

采样率

GATT 消息

+GATTSTAT - GATT 状态

消息

+GATTSTAT=参数

参数
0: 不支持
1: 待机
2: 连接中
3: 已连接

+GATTDATA - GATT 收到数据

消息

+GATTDATA=参数1,参数2

参数1

数据长度

参数2

数据内容

SPP 消息

+SPPSTAT - SPP 状态

消息

+SPPSTAT=参数

参数
0: 不支持
1: 待机
2: 连接中
3: 已连接

+SPPDATA - SPP 收到数据

消息

+SPPDATA=参数1,参数2

参数1

数据长度

参数2

数据内容

+SPPDEV - SPP 连接设备信息

消息

+SPPDEV=参数1

参数1

当前连接设备 MAC 地址(12字节 ASCII)

应用示例

修改 BR/EDR 名称

@startuml

hide footbox
skinparam sequenceMessageAlign center

box #LightBlue
participant 主机 as host
participant 模块 as bt
end box

rnote over host, bt: 复位重启
bt -> host: +SPPSTAT=1
bt -> host: +GATTSTAT=1
bt -> host: +A2DPSTAT=1
bt -> host: +AVRCPSTAT=1
bt -> host: +HFPSTAT=1
bt -> host: +VER=FSC-BT6038A,V1.0.1,20240524
bt -> host: +DEVSTAT=1

rnote over host, bt: 发送 AT+PAIR=1, 进入可发现模式
host -> bt: AT+PAIR=1
bt -> host: +DEVSTAT=7 (进入可发现模式, 手机可以搜索并通过 SPP/GATT 连接)

rnote over host, bt: 修改模块名称为 "CARKIT" 关闭名称后缀, 然后检查修改结果
host -> bt: AT+NAME
bt -> host: AT+NAME=FSC-BT6038A
host -> bt: AT+NAME=CARKIT,0
bt -> host: OK
host -> bt: AT+NAME
bt -> host: +NAME=CARKIT

@enduml

修改名称示例代码

 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");  // 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}

备注

修改任何参数, 建议先查询再修改, 最后验证修改结果

A2DP/HFP 示例

@startuml

hide footbox
skinparam sequenceMessageAlign center

box #LightBlue
participant 主机 as host
participant 模块 as bt
end box

rnote over host, bt: 复位重启
bt -> host: +SPPSTAT=1
bt -> host: ...
bt -> host: +DEVSTAT=1

rnote over host, bt: 扫描附近 BR/EDR 设备
host -> bt: AT+SCAN=1
bt -> host: +SCAN=1,2,DC0D30000057,-42,11,FSC-BT1026C,240408
bt -> host: +SCAN=2,2,DC0D30000012,-70,16,FSC-BT1006A-0012,240404
bt -> host: +SCAN=E

host -> bt: AT+A2DPCONN=DC0D30000057 (A2DP 连接 FSC-BT1026C)
bt -> host: OK
bt -> host: +A2DPSTAT=2
bt -> host: +A2DPSTAT=3 (A2DP 连接成功)
bt -> host: +A2DPDEV=DC0D30000057,FSC-BT1026C
bt -> host: +HFPSTAT=3 (HFP 连接成功)
bt -> host: +AVRCPSTAT=3 (AVRCP 连接成功)
bt -> host: +A2DPENC=1 (SBC 编码方式)
bt -> host: +A2DPSTAT=4 (自动进入音频播放)

rnote over host, bt: 断开音频连接
host -> bt: AT+A2DPAUDIO=0
bt -> host: +A2DPSTAT=5 (音频暂停)

rnote over host, bt: 建立 HFP 通话
host -> bt: AT+HFPAUDIO=1
bt -> host: +HFPSTAT=4
bt -> host: +HFPAUDIO=1
bt -> host: +HFPSTAT=6
bt -> host: +HFPSR=16000 (采样率: 16000)

rnote over host, bt: 断开 HFP 通话
host -> bt: AT+HFPAUDIO=0
bt -> host: +HFPSTAT=3
bt -> host: +HFPAUDIO=0

@enduml

Le Audio 广播模式

@startuml

hide footbox
skinparam sequenceMessageAlign center

box #LightBlue
participant 主机 as host
participant 模块 as bt
end box

rnote over host, bt: 复位重启
bt -> host: +SPPSTAT=1
bt -> host: ...
bt -> host: +DEVSTAT=1

rnote over host, bt: 修改配置, 使能 Le Audio
host -> bt: AT+PROFILE=2385
bt -> host: OK
bt -> host: +SPPSTAT=1
bt -> host: ...
bt -> host: +DEVSTAT=1

rnote over host, bt: 修改音频模式为 Le Audio 广播模式
host -> bt: AT+AUDMODE=1
bt -> host: OK
bt -> host: +SPPSTAT=1
bt -> host: ...
bt -> host: +DEVSTAT=1
bt -> host: +LEASTAT=4 (自动进入音频播放)
bt -> host: +LEASR=48000 (采样率: 48000)

@enduml

备注

设置好之后, 就可以使用支持 Le Audio 功能的设备进行扫描, 例如 FSC-BT1038A

Le Audio 单播模式

@startuml

hide footbox
skinparam sequenceMessageAlign center

box #LightBlue
participant 主机 as host
participant 模块 as bt
end box

rnote over host, bt: 复位重启
bt -> host: +SPPSTAT=1
bt -> host: ...
bt -> host: +DEVSTAT=1

rnote over host, bt: 修改配置, 使能Le Audio
host -> bt: AT+PROFILE=2385
bt -> host: OK
bt -> host: +SPPSTAT=1
bt -> host: ...
bt -> host: +DEVSTAT=1

rnote over host, bt: 修改音频模式为 Le Audio 单播模式
host -> bt: AT+AUDMODE=2
bt -> host: OK
bt -> host: +SPPSTAT=1
bt -> host: ...
bt -> host: +DEVSTAT=1

rnote over host, bt: 扫描附近设备
host -> bt: AT+SCAN=2,10,2 (只扫描支持 Le Audio 的设备)
bt -> host: +SCAN=1,0,00025B00FF02,-52,23,FSC-BT1038A-LE-FF02
bt -> host: +SCAN=E
bt -> host: +DEVSTAT=1
rnote over host, bt: 连接设备
host -> bt: AT+LEACONN=00025B00FF02 (连接 FSC-BT1038A-LE-FF02)
bt -> host: OK
bt -> host: +LEASTAT=3
bt -> host: +LEASTAT=4 (自动进入音频播放)
bt -> host: +LEASR=48000 (采样率: 48000)

@enduml

SPP 数据传输

@startuml

hide footbox
skinparam sequenceMessageAlign center

box  #LightBlue
participant 主机 as host
participant 模块 as bt
end box

rnote over host, bt: 复位重启
bt -> host: +SPPSTAT=1
bt -> host: ...
bt -> host: +DEVSTAT=1

rnote over host, bt: 进入可发现模式
host -> bt: AT+PAIR=1
bt -> host: OK
bt -> host: +DEVSTAT=7

rnote over host, bt: 手机连接模块
bt -> host: +PAIRED=594171484D07
bt -> host: +SPPDEV=594171484D07
bt -> host: +SPPSTAT=3
bt -> host: +DEVSTAT=5

rnote over host, bt: 发送数据到手机
host -> bt: AT+SPPSEND=10,0123456789
bt -> host: OK

rnote over host, bt: 收到手机发的数据
bt -> host: +SPPDATA=10,0123456789

rnote over host, bt: 断开连接
host -> bt: AT+SPPDISC
bt -> host: OK
bt -> host: +SPPSTAT=1
bt -> host: +DEVSTAT=7

@enduml

备注

SPP 连接不支持苹果设备

GATT 数据传输

@startuml

hide footbox
skinparam sequenceMessageAlign center

box  #LightBlue
participant 主机 as host
participant 模块 as bt
end box

rnote over host, bt: 复位重启
bt -> host: +SPPSTAT=1
bt -> host: ...
bt -> host: +DEVSTAT=1

rnote over host, bt: 进入可发现模式
host -> bt: AT+PAIR=1
bt -> host: OK
bt -> host: +DEVSTAT=7

rnote over host, bt: 手机连接模块
bt -> host: +GATTSTAT=3
bt -> host: +GATTDEV=594171484D07

rnote over host, bt: 发送数据到手机
host -> bt: AT+GATTSEND=10,0123456789
bt -> host: OK

rnote over host, bt: 收到手机发的数据
bt -> host: +GATTDATA=10,0123456789

rnote over host, bt: 断开连接
host -> bt: AT+GATTDISC
bt -> host: OK
bt -> host: +GATTSTAT=1

@enduml

Appendix

下载文档

下载 PDF 文档