3. Bluetooth Audio Sink Sample

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. 示例内容

  1. 初始化 Shell 与文件系统

  2. 初始化蓝牙协议栈和 BT Audio Framework

  3. 初始化 BT Sink 音频适配层

  4. 通过 bt_scan 打开 inquiry/page scan

  5. 等待手机连接并自动完成 HFP、AVRCP、A2DP 建链

  6. 手机侧开始播放音乐后,设备自动创建音频播放会话并输出 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 scan

  • 2:打开 page scan

  • 3:同时打开 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 关键配置

配置项

说明

默认值

CONFIG_BT_CLASSIC_ROLE_SINK

启用 Sink 模式

y

CONFIG_LISA_BLUETOOTH_CLASSIC_A2DP_SINK

启用 A2DP Sink

y

CONFIG_LISA_BLUETOOTH_CLASSIC_HFP_HF

启用 HFP HF

y

CONFIG_BT_AUDIO_CODEC_SBC

启用 SBC 编解码器

y

CONFIG_LISA_AUDIO_DEVICE

启用音频设备输出

y

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 配置输出。该警告不一定导致播放失败,但如果后续出现音质或速率异常,需要继续检查底层音频设备配置。