3. Bluetooth Audio Sink Sample
源码位置: samples/bluetooth/classic/a2dp_sink 查看源码
3.1. 功能说明
本示例演示了如何使用 ARCS SDK 的蓝牙音频框架在 Sink 模式下工作,从远程设备(如手机)接收 A2DP 音频并通过 lisa_audio 播放。
示例实现了以下功能:
初始化 Lisa Shell、Lisa Bluetooth、BT Audio Framework 和 BT Sink
通过 Shell 命令
bt_scan <0|1|2|3>控制经典蓝牙扫描模式手机连接后自动完成经典蓝牙链路、HFP、AVRCP、A2DP 建链
收到 A2DP Start 后自动创建播放会话并开始 SBC 解码播放
通过
AT透传命令直接下发底层 AT 指令
3.2. 硬件连接
ARCS 开发板(支持蓝牙经典功能)
音频播放设备(如喇叭、耳机、功放)
手机或其他蓝牙音频源设备
3.3. 软件依赖
FreeRTOS
Lisa Bluetooth 组件
Lisa Bluetooth Audio Framework
Lisa Shell
Lisa Audio Device
3.4. 示例内容
初始化 Shell 与文件系统
初始化蓝牙协议栈和 BT Audio Framework
初始化 BT Sink 音频适配层
通过
bt_scan打开 inquiry/page scan等待手机连接并自动完成 HFP、AVRCP、A2DP 建链
手机侧开始播放音乐后,设备自动创建音频播放会话并输出 PCM
3.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
确保已安装对应的工具链。
3.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 端口
3.7. 预期输出
3.7.1. 1. 启动日志
设备启动后可以看到类似如下日志:
I/BT_AUDIO_SESSION Audio session manager initialized
I/BT_SINK bt_sink initialized successfully with interface: lisa_audio
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:1
DBG:hfp en, role:0,feats:0x31
INF:a2dp enable cmp!
DBG:hfp enable cmp,status:0x0
3.7.2. 2. 打开扫描并连接手机
串口执行:
bt_scan 3
随后可以看到协议栈打开经典蓝牙扫描并接受手机连接:
DBG:classic scan en:3
DBG:BT classic connected
DBG:classic scan en:0
DBG:hfp connect cmp,conidx:6, type:1, status:0x0
INF:avrcp connect cmp!,conidx:0x6, status:0x0
INF:a2dp connect cmp! conidx=6, status=0x0
3.7.3. 3. 手机播放音乐
当手机侧开始播放音乐后,A2DP Start 会触发播放会话创建和音频输出:
INF:a2dp start! codec:0, ch:2, sample_rate:44100
I/BT_AUDIO_ADAPTER AUD_OS_START_EVT: type=16, ch=2, sample=44100
I/BT_SINK BT audio stream starting: type=16, ch=2, sample=44100
I/BT_AUDIO_SESSION Session created: direction=0, codec=2, passthrough=0
I/BT_AUDIO_SESSION Codec initialized: type=2, name=SBC, duration=2902 us, frame_size=77 bytes
I/LISA_AUDIO_INTERFACE Opening playback: 44100 Hz, 2 ch, 16 bits
I/BT_SINK Playback session and interface opened successfully
I/BT_AUDIO_SESSION PCM prefilled, start playback
3.7.4. 4. 停止播放
手机暂停或停止播放后,会话关闭:
INF:a2dp stop!, conidx:6, sta:0x0
I/BT_AUDIO_ADAPTER AUD_OS_STOP_EVT: conidx=6, status=0x0
I/BT_SINK BT audio stream stopping: conidx=6, status=0x0
I/BT_AUDIO_SESSION Session destroyed
3.8. 使用方法
3.8.1. 1. 启动设备
设备上电后会自动完成 Shell、蓝牙协议栈、BT Audio Framework 和 BT Sink 初始化。
3.8.2. 2. 打开经典蓝牙扫描
在串口控制台输入:
bt_scan 3
参数说明:
0:关闭扫描1:打开 inquiry scan2:打开 page scan3:同时打开 inquiry scan 和 page scan
通常建议使用 bt_scan 3,这样手机既能搜索到设备,也能主动连接设备。
3.8.3. 3. 手机连接设备
在手机蓝牙设置中搜索并连接目标设备。连接建立后,示例会自动完成 HFP、AVRCP 和 A2DP 相关链路。
3.8.4. 4. 手机开始播放音乐
连接成功后,不需要额外执行 bt_audio_start 之类命令。手机侧开始播放音乐时,设备会自动收到 A2DP Start 事件并开始解码播放。
3.8.5. 5. 关闭扫描
如需关闭扫描,可执行:
bt_scan 0
3.9. 配置选项
3.9.1. prj.conf 关键配置
配置项 |
说明 |
默认值 |
|---|---|---|
|
启用 Sink 模式 |
|
|
启用 A2DP Sink |
|
|
启用 HFP HF |
|
|
启用 SBC 编解码器 |
|
|
启用音频设备输出 |
|
3.10. 代码架构
3.10.1. 数据流程
Shell 命令 bt_scan 3
↓
经典蓝牙扫描打开
↓
手机建立 BR/EDR 连接
↓
HFP / AVRCP / A2DP 建链
↓
A2DP Start 指示
↓
BT Audio Session 创建
↓
SBC 解码为 PCM
↓
lisa_audio 播放输出
3.10.2. 关键点
main():完成 Shell、蓝牙、BT Audio Framework 和 BT Sink 初始化。cmd_bt_scan():解析0..3参数并调用lisa_bt_scan()。SHELL_EXPORT_PASSTROUGH(AT, ...):提供 AT 透传入口,便于直接调试底层蓝牙 AT 指令。
3.11. Shell 命令
bt_scan <0|1|2|3>:设置经典蓝牙扫描模式。AT:进入 AT 透传模式,或直接执行单行 AT 指令。
3.12. 故障排除
3.12.1. 1. 手机搜索不到设备
确认已经执行
bt_scan 3检查日志中是否出现
DBG:classic scan en:3确认手机蓝牙已打开,且开发板没有被其他设备占用
3.12.2. 2. 已连接但没有声音
确认手机侧已经开始实际播放音乐
检查日志中是否出现
INF:a2dp start!和Playback session and interface opened successfully确认音频播放外设连接正常
3.12.3. 3. 日志出现 Unsupported sample rate: 44100
从当前日志看,手机以 44100 Hz 发流,而本地播放设备最终按 48000 Hz 配置输出。该警告不一定导致播放失败,但如果后续出现音质或速率异常,需要继续检查底层音频设备配置。