您好!
我设计了一个音频系统、该系统使用 C2000微控制器和 I2S 总线在模块之间传输音频流。 现在我需要添加具有 I2S 接口的蓝牙模块、并且为此我选择了 BT 控制器 CC2564B (CC2564MODA)。
因为我已经在使用 C2000微控制器、所以我不能使用 TI 双模 Bluetooth Stack Bluetopia、因为没有适用于 C2000微控制器的库二进制构建。 因此、对于蓝牙堆栈、我决定使用来自 BlueKitchen github.com/.../btstack 的开源 btstack。 他们有 CC2564B BT 控制器的 A2DP 受电方演示示示例。 我必须对源代码进行一些修改、以便为 C2000微控制器进行编译。 目前、此演示按预期运行。 我可以找到带智能手机的 BT 控制器、将手机与 BT A2DP 灌电流演示配对。 在音乐播放期间、BT 控制器按预期通过 HCI 接口将 ACL 包传回主机微控制器。
由于我要使用 BT 控制器 I2S/PCM 接口、我修改了 btstack 代码、以便其发送所需的特定于供应商的 HCI 命令以激活辅助 A2DP 受电方(A3DP、SBC 解码器、PCM 接口)。
btstack 初始化阶段使用的是 TI 提供的 CC256xB BT 服务包 CC256XB_BT_SP_v1.8 (initscripts-TIInit_6.7.16_bt_spec_4.1.bts + initscripts-TIInit_6.7.16_avpr_add-on.bts)初始脚本、这些脚本将 AVPR 激活为接收器。
那么:
1) 1)在初始化阶段结束时、btstack 会发出一个带有参数的命令 HCI_VS_Write_SCO_Configuration (0xFE10):
连接类型= 0 (编解码器)–我假设没有音频数据包通过 HCI 发送?
TX 缓冲区大小= 0 (保持当前数据包大小)
TX 缓冲区最大延迟= 0 (保持电流最大延迟)
接受 CRC 错误的数据包= 1 (接受 CRC 错误的数据包)
2) HCI_VS_LE_Enable (0xFD5B) 0–禁用、0 -不加载代码。
3)当智能手机配对后建立连接并接收 SBC 配置时
A2DP 接收器:接收到的 SBC 编解码器配置
- num_channels : 2
- SAMPLING_FREQUENCY: 44100
- CHANNEL_MODE : 3
- block_length:16
-子频带: 8
-分配方法: 0
- bitpool_value [2,53]
然后发送以下 VS HCI 命令:
HCI_VS_A3DP_FD9C (Sink_Codec_Configuration)
PCM 通道数= 2
SBC 输入采样频率= 2
SBC 通道模式= 3
SBC 块数= 16
SBC 子频带数量= 8
SBC 分配方法= 0
HCI_VS_Write_CODEC_Config (0xFD06)
时钟速率= 2824
时钟方向= 0
帧同步频率= 44100
帧同步占空比= 0
帧同步边沿= 1
帧同步极性= 0
通道1数据输出大小= 16
通道1数据输出偏移= 1
通道1数据输出边沿= 1
通道1数据大小= 16
偏移量= 1中的通道1数据
边沿中的通道1数据= 0
Fsynch 乘法器= 0
通道2数据输出大小= 16
通道2数据输出偏移= 17
通道2数据输出边沿= 1
通道2数据大小= 16
通道2数据输入偏移17
边沿中的通道2数据= 0
HCI_VS_Write_CODEC_FD07 (Config_Enhanced)
时钟关闭= 0
时钟开始= 0
时钟停止= 0
按顺序的通道1数据= 0
通道1数据输出顺序= 1
通道1数据输出模式= 1
通道1数据输出复制= 0
通道1 TX_DUP_VALUE = 0
通道1数据 quant = 0
按顺序的通道2数据= 0
通道2数据输出顺序= 1
通道2数据输出模式= 1
通道2数据输出复制= 0
通道2 TX_DUP_VALUE = 0
通道2数据 quant = 0
4) 4)当接收到 AVDTP_STREAM_Endpoint Opened 事件时、发送命令:
HCI_VS_A3DP_FD9A Sink_Open_Stream (0xFD9A)
连接手柄= 1
L2CAP CID = 0x44
btstack L2CAP 模块提供的值:L2CAP_EVENT_CHANNEL_OPEN 状态0x0地址10:2F:6B:BD:43:D4句柄0x1 PSM 0x19 LOCAL_CID 0x45 REMOTE_CID 0x44 LOCAL_MTU 120、REMOTE_672 MTU、FLUSH_TIMEOUT 0
5) 5)当音频播放开始时、发送 VS HCI 命令:
HCI_VS_A3DP_FD9D (Sink_Start_Stream)
随后、btstack 开始通过 HCI 接收来自 BT 控制器的 ACL 数据包、同时 PCM 接口无活动、且未切换时钟或帧同步信号。 辅助 A2DP 受电方和内部 SBC+PCM 似乎不工作、无论 HCI_VS_Write_SCO_Configuration 配置如何、音频数据都将路由到 HCI? 或者发送的 VS HCI 命令中是否有一些参数不正确?
发送的所有 VS 命令在 btstack 日志输出中指示为"命令成功"。
线程"CC2564B A3DP 设置"中也描述了类似问题–但未描述明确的解决方案。
我附上了使用 TIInit_6.7.16.ili 文件通过 TI Israel Logger 5.0记录的 BT 控制器 TX_Debug 日志文件。
在该日志文件中、以下几行有一些有趣的事件:
801
802 A3DP 灌电流初始化
925
975
1414配对完成
1531 L2CAP
1723 ACL:调度时间不足:时钟67159
3001 HCPP_A3DP_SNK_CODEC_CONFIGURATION (组3f 操作码0x19c)
3027 HCPP_WRITE_CODEC_CONFIG_ISLAND3 (组3f 操作码0x106)
3030 HCPP_WRITE_CODEC_CONFIG_ENHANDER_ISLAND3 (组3f 操作码0x107)
3239 HCPP_A3DP_SNK_OPEN_STREAM (组3f 操作码0x19a)
6767发送 LMP_accepted (3)、TRANS_ID:master (0)
6832 SBR 子速率即时过期起始监听子速率
6956 SBR 在 sniff 子速率中接收到数据。侦听0个时隙
6989 HCI_Process_HCI_commands:HCP_A3DP_SNK_START_STREAM (组3f 操作码0x19d)
6964 CDC 补偿学习对 CLOCK_DOMAIN_1无效
8450 HCI_Process_HCI_commands:HCP_A3DP_SNK_STOP_STREAM (组3f 操作码0x19e)
可能是线路(6964 CDC 补偿学习对于 CLOCK_DOMAIN_1无效)指示存在一些问题吗?
我还随附了指令所有事件和 HCI 数据转储的 btstack 文本日志文件。 它包含主机微控制器初始化 CC2564B、智能手机连接并与 BT ADP 接收器配对、音频播放开始和停止以及智能手机断开连接的那一刻起的日志。