4. Bluetooth Audio Source Sample
源码位置: samples/bluetooth/classic/a2dp_source 查看源码
4.1. 功能说明
本示例演示了如何使用 ARCS SDK 的蓝牙音频框架在 Source 模式下工作,将本地音频数据通过经典蓝牙发送到远程 A2DP Sink 设备,如蓝牙耳机或音箱。
示例实现了以下功能:
初始化 Lisa Shell、Lisa Bluetooth 和 BT Audio Framework
注册经典蓝牙发现回调,支持查看扫描到的设备名称和地址
通过 Shell 命令执行设备扫描、按名称或索引连接远端设备
通过虚拟音频接口发送本地音频数据
在编码模式下将 PCM 数据编码为 SBC 后发送
支持
AT透传命令直接调试底层蓝牙 AT 指令
4.2. 硬件连接
ARCS 开发板(支持蓝牙经典功能)
蓝牙耳机或蓝牙音箱(支持 A2DP Sink)
4.3. 软件依赖
FreeRTOS
Lisa Bluetooth 组件
Lisa Bluetooth Audio Framework
Lisa Shell
预置音频数据资源
4.4. 示例内容
初始化 Shell 与文件系统
初始化蓝牙协议栈并注册发现回调
初始化虚拟蓝牙音频接口
通过
bt_inquiry扫描可连接设备通过
bt_connect或bt_connect_index连接目标设备通过
bt_audio_start启动音频发送任务
4.5. 编译
重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:
arcs_evb - ARCS EVB 评估板
arcs_mini - ARCS Mini 开发板
根据您的开发板型号,选择对应的编译命令:
在 SDK 根目录执行编译:
# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini
Note
确保已安装对应的工具链。
4.6. 烧录
编译完成后,使用 SDK tools 目录下的 cskburn 工具烧录固件:
./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 0x0 build/arcs.bin -C arcs
Note
烧录参数说明:
-s /dev/ttyUSB0:串口设备路径,需要根据实际情况修改 - Linux 系统:通常是/dev/ttyUSB0或/dev/ttyACM0- 可通过ls /dev/tty*命令查看可用串口设备 - 不同开发板或 USB 转串口芯片可能使用不同的设备名-b 3000000:烧录波特率(3Mbps)0x0:烧录起始地址build/arcs.bin:编译生成的固件路径-C arcs:芯片类型
注意事项:
确保开发板已正确连接到电脑
如果无法识别串口设备,请检查 USB 连接线是否正常,或尝试其他 USB 端口
4.7. 预期输出
4.7.1. 1. 启动日志
设备启动后可以看到类似如下日志:
DBG:hci_aud_access_init,1
DBG:a2dp_init, init_type:0
DBG:bt_stack_init,state:0
DBG:a2dp_init, init_type:1
DBG:bt_stack_init,state:1
DBG:bt reset cmp: 20:23:03:64:74:57
DBG:ble enable cmp, sta:0
DBG:bt classic enable cmp, status:0
DBG:a2dp en, role:0
DBG:hfp en, role:1,feats:0x22
INF:a2dp enable cmp!
DBG:hfp enable cmp,status:0x0
I/BT_AUDIO_SESSION Audio session manager initialized
I/app-bt Virtual BT interface initialized successfully
4.7.2. 2. 扫描设备
串口执行:
bt_inquiry
命令会立即返回,扫描结果异步打印:
letter:/$ bt_inquiry
Return: 1, 0x00000001
DBG:bt disc cre cmp,sta:0x00,0
DBG:gap start cmp,sta:0x00,type:4, actv:0,actv:0
I/app-bt Discovered device: 6A:05:BF:9F:D0:EC, RSSI=-74, Name=Saw的MIX 2
I/app-bt Discovered device: E0:5D:3B:CC:EE:E8, RSSI=-52, Name=soundcore Liberty 4
4.7.3. 3. 连接设备
如果设备名包含空格,命令里需要加引号,例如:
bt_connect "soundcore Liberty 4"
连接日志示例:
I/app-bt Connecting to device: soundcore Liberty 4
I/LISA_BT Trying to connect to device: soundcore Liberty 4
I/LISA_BT Device list count: 6
I/LISA_BT Device[5]: soundcore Liberty 4
I/LISA_BT addr: E0:5D:3B:CC:EE:E8
I/LISA_BT Device found! Connecting...
DBG:BT classic connected
DBG:hfp connect cmp,conidx:6, type:0, status:0x0
INF:a2dp connect cmp! conidx=6, status=0x0
INF:avrcp connect cmp!,conidx:0x6, status:0x0
4.7.4. 4. 启动音频发送
连接成功后,执行:
bt_audio_start
日志示例:
I/app-bt Mode: Encode PCM to SBC
I/BT_VINTF Profile opening: type=0, state=OPENING
I/BT_AUDIO_ADAPTER A2DP stream start requested
I/app-bt Virtual interface opened successfully
INF:a2dp start! codec:0, ch:2, sample_rate:44100
I/BT_AUDIO_SESSION Session created: direction=1, codec=2, passthrough=0
I/SBC_CODEC Encoder initialized: 44100Hz 2ch, codesize=512, frame_length=77
I/BT_VINTF Audio streaming started for profile=1, conidx=6
I/app-bt BT audio source started successfully
I/app-bt Audio source task started (PCM encode mode)
I/app-bt PCM data size: 3527680 bytes, frame size: 1764 bytes
4.8. 使用方法
4.8.1. 1. 启动设备
设备上电后会自动完成 Shell、蓝牙协议栈和虚拟蓝牙音频接口初始化。初始化成功后,日志中会出现 Virtual BT interface initialized successfully。
4.8.2. 2. 扫描设备
在串口控制台输入:
bt_inquiry
说明:
bt_inquiry的 shell 返回值不表示扫描结束,它只表示扫描命令已经成功下发。设备发现结果会在后续异步打印。
4.8.3. 3. 连接设备
可以按名称连接:
bt_connect My_Headset
如果设备名中包含空格,请使用引号:
bt_connect "soundcore Liberty 4"
也可以按扫描列表索引连接:
bt_connect_index 0
4.8.4. 4. 启动音频发送
连接成功后,执行:
bt_audio_start
当前代码默认使用编码模式发送 PCM,并将其编码为 SBC 后通过 A2DP 发出。
4.8.5. 5. 调整音量
bt_audio_volume 60
4.8.6. 6. 停止音频发送
bt_audio_stop
4.9. Shell 命令
bt_inquiry:扫描周围经典蓝牙设备。bt_connect <device_name>:按设备名连接远端设备。bt_connect_index <device_index>:按扫描结果索引连接远端设备。bt_audio_start:打开虚拟音频接口并启动音频发送任务。bt_audio_stop:停止音频发送任务并关闭虚拟接口。bt_audio_volume <0-100>:设置发送音量。AT:进入 AT 透传模式,或直接执行单行 AT 命令。
4.10. 配置选项
4.10.1. 关键配置
配置项 |
说明 |
默认值 |
|---|---|---|
|
启用 Source 模式 |
|
|
启用 A2DP Source |
|
|
启用 HFP AG |
|
|
启用 SBC 编解码器 |
|
4.10.2. 当前音频参数
当前 main.c 中使用的主要参数如下:
#define SAMPLE_RATE 44100
#define CHANNELS 2
#define BITS_PER_SAMPLE 16
#define USE_PCM_ENCODE_MODE 1
4.11. 代码架构
4.11.1. 数据流程
bt_inquiry / bt_connect
↓
建立经典蓝牙连接
↓
bt_audio_start
↓
打开虚拟蓝牙音频接口
↓
audio_source_task 持续读取本地音频资源
↓
vintf_playback_write
↓
BT Audio Session 编码为 SBC
↓
A2DP 发送到远端设备
4.11.2. 关键点
cmd_bt_inquiry():调用lisa_bluetooth_inquiry_start()扫描附近设备。cmd_bt_connect()/cmd_bt_connect_by_index():按名称或索引发起连接。cmd_bt_audio_start():设置编码模式并打开VINTF_PROFILE_PLAYBACK。audio_source_task():循环发送预置 PCM 数据。
4.12. 故障排除
4.12.1. 1. 扫描不到设备
确认目标耳机或音箱已进入可配对状态
检查串口日志是否持续输出发现结果
必要时重新执行
bt_inquiry
4.12.2. 2. 连接成功但没有声音
确认已经执行
bt_audio_start检查日志中是否出现
INF:a2dp start!和BT audio source started successfully确认远端设备支持 SBC/A2DP Sink
4.12.3. 3. 音频任务启动失败
检查是否有
Failed to create audio source task检查系统堆内存是否充足