This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2564MODA:使用 CC2564B 辅助 A2DP 受电方时出现问题

Guru**** 1490575 points
Other Parts Discussed in Thread: CC2564MODA
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1290729/cc2564moda-problem-using-cc2564b-assisted-a2dp-sink

器件型号:CC2564MODA

您好!
我设计了一个音频系统、该系统使用 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 接收器配对、音频播放开始和停止以及智能手机断开连接的那一刻起的日志。

e2e.ti.com/.../8551.test_5F00_08.txt

e2e.ti.com/.../8551.test_5F00_08.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Marko、

    我已将这个主题分配给了我们的一位软件工程师来提供帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Marko:

    感谢您的联系。 我将查看这些日志。 一旦我有机会通过他们,我就会跟进。

    此致!

    罗格利奥

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rogelio 您好、感谢您的努力、请抽出时间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    附加问题:当我想在 CC2564B 上使用辅助 A2DP 受电方时、我还应该明确发送 ConnectionType=0的 VC 命令 HCI_VS_Write_SCO_Configuration Sink_Codec_Configuration (0xFE10)或者发送 HCI_VS_A3DP_HCI (0xFD9C)将自动执行–在音乐播放期间会将 SCO/ACL 数据包路由到解码器? 很奇怪、发送 ConnectionType=0或1的 HCI_VS_Write_SCO_Configuration (0xFE10)不会产生任何差异、在音乐播放期间、所有接收到的 SCO/ACL 数据包都会发送到 HCI。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在互联网上、我找到了 TI 维基页面上的打印输出"CC256x 高级语音和音频功能-德州仪器 Wiki "、这里有 A3DP 信号序列的软件流程图。 在这里、BT 控制器 A3DP 初始化的完成顺序与我的实施中不同。 因此我使用了相同的顺序- HCI_VS_A3DP_AVD9A Sink_Open_Stream (0xFD9A)=> HCI_VS_Write_CODEC_Config Sink_Codec_Configuration (0xFD06)=> HCI_VS_A3DP_AVDTP_STREAM_ENDOWN_OPEN (0xFD9C) btstack 之后。 很遗憾 CC256x 的 TI wiki 页面消失了。但 PCM 输出仍然不起作用、在音乐播放期间通过 HCI 发送 ACL 包。 虽然这次有所不同、因为 BT 控制器 TX_Debug 报告了加载的解码器配置:


    Sink:流的采样频率= 2
    A3DP 受电方:通道模式= 3、分配方法= 0。
    A3DP 受电方:块数量= 16、子频带数量= 8。
    A3DP 受电方:通道数= 2

    然后我将参数 L2CAP CID 值(位于 vs 命令 HCI_VS_A3DP_PCM (0xFD9A)中)更改为 btstack l2cap_media_CID 0x44报告的值;现在在音乐播放期间、没有通过 HCI 发送 ACL 包;使用示波器时、我可以看到 Sink_Open_Stream 信号以正确的同步和数据时钟频率进行切换 这表示 BT 辅助 A2DP 受电方似乎可以正常工作。 TX_Debug 还指示 A3DP 受电方操作:

    34810 18:09:35.359 +1:17:47.844 A3DP: init. 以太网以太网卡
    34811 18:09:35.359 +1:17:47.844 AVPR init completed、version 2.17
    34816 18:09:35.390 +1:17:47.875 A3DP 受电方:初始化 S i N K O N E A I R! 以太网以太网卡
    34817 18:09:35.390+1:17:47.875 AVPR 初始化已完成、版本2.17
    ...
    35335 18:10:00.046 +1:18:12.531 AVPR 收到来自 ARM [0x0017]、编号23的消息
    35352 18:10:00.062 +1:18:12.547 AVPR 收到来自 ARM [0x0017]、编号23的消息
    ... btstack: avdtp_stream_endpoint_opened
    36053 18:10:03.296 +1:18:15.781 HCI_Process_HCI_commands:HCIP_A3DP_SNK_OPEN_STREAM (组3f 操作码0x19a)
    36054 18:10:03.296 +1:18:15.781 hcic_get_num_of_host_commands。 总可用性= 3、报告给主机= 1
    36055 18:10:03.296 +1:18:15.781 HCI 发送事件:hci_command_complete_evt
    36056 18:10:03.328 +1:18:15.813 HCI_Process_HCI_commands:HIPP_WRITE_CODEC_CONFIG_ISLAND3 (组3f 操作码0x106)
    36057 18:10:03.328 +1:18:15.813 HCIC_GET_num_of_host_commands。 总可用性= 3、报告给主机= 1
    36058 18:10:03.328 +1:18:15.813 HCI 发送事件:HCI_COMMAND_COMPLETE_EVT
    36059 18:10:03.343 +1:18:15.828 HCI_Process_HCI_commands:HCIP_A3DP_SNK_CODEC_CONFIGURATION (组3f 操作码0x19c)
    36060 18:10:03.343 +1:18:15.828 HCIC_GET_num_of_host_commands。 总可用性= 3、报告给主机= 1
    36061 18:10:03.343 +1:18:15.828 HCI 发送事件:HCI_COMMAND_COMPLETE_EVT
    36062 18:10:03.343 +1:18:15.828 AVPR 收到来自 ARM A3DP_SNK_CODEC_CONFIGURATION_COMMAND 的消息、编号19
    36063 18:10:03.343 +1:18:15.828 A3DP 灌电流:流的采样频率= 2
    36064 18:10:03.343 +1:18:15.828 A3DP 受电方:通道模式= 3、分配方法= 0。
    36065 18:10:03.343 + 1:18:15.828 A3DP 灌电流:块数= 16、子频带数= 8。
    36066 18:10:03.343 + 1:18:15.828 A3DP 受电方:通道数= 2
    ... btstack: AVDTP_SI_START
    39254 18:10:25.843 +1:18:38.328 HCI_Process_HCI_commands:HCIP_A3DP_SNK_START_STREAM (组3f 操作码0x19d)
    39255 18:10:25.843 +1:18:38.328 HCIC_GET_num_of_host_commands。 总可用性= 3、报告给主机= 1
    39256 18:10:25.843 +1:18:38.328 HCI 发送事件:HCI_COMMAND_COMPLETE_EVT
    39257 18:10:25.843 +1:18:38.328 AVPR 收到来自 ARM [0x0017]、编号23的消息
    39258 18:10:25.921 +1:18:38.406 A3DP 受电方:开始向 AVPR 发送流式传输
    39259 18:10:25.921 +1:18:38.406 A3DP SNK:ARM7状态机移至 STATE_RANGS 状态
    39260 18:10:25.921 +1:18:38.406 A3DP_SNK:FREE_IPC_SPACE = 1772
    39261 18:10:25.921 +1:18:38.406 AVPR 从 ARM A3DP_SNK_START_STREAM_COMMAND、编号20接收到一条消息
    39262 18:10:25.921 +1:18:38.406 AVDTP 头:version =2、padding =0
    39263 18:10:25.921 +1:18:38.406 AVDTP 标头:csrcCount =0、标记=0
    39264 18:10:25.921 +1:18:38.406 AVDTP 标头:payloadType =96、sequencenumber =0
    39265 18:10:25.921 +1:18:38.406 AVDTP 标头:时间戳= 0x0、SSRC = 0x34
    39266 18:10:25.921 +1:18:38.406 AVDTP 插头:大小=12
    39267 18:10:25.921 +1:18:38.406 A3DP 灌电流:流的采样频率= 2
    39268 18:10:25.921 +1:18:38.406 A3DP 灌电流:通道模式= 3、分配方法= 0。
    39269 18:10:25.921 +1:18:38.406 A3DP 灌电流:块数= 16、子带数= 8。
    39270 18:10:25.921 +1:18:38.406 A3DP 受电方:通道数= 2
    ... btstack: AVDTP_SI_SUSPEND
    53003 18:11:37.828 +1:19:50.313 HCI_Process_HCI_commands:HCIP_A3DP_SNK_STOP_STREAM (组3f 操作码0x19e)
    53004 18:11:37.828 +1:19:50.313 HCIC_GET_num_of_host_commands。 总可用性= 3、报告给主机= 1
    53005 18:11:37.828 +1:19:50.313 HCI 发送事件:HCI_COMMAND_COMPLETE_EVT
    53006 18:11:37.828 +1:19:50.313 AVPR 接收到来自 ARM A3DP_SNK_STOP_STREAM_COMMAND 的消息、编号21
    53007 18:11:38.062 +1:19:50.547用于 LC 句柄的 ACL_DATA_STATUS 0:Rx bps -56,Tx bps -48,远程否定应答比率-0

    在音乐流式传输过程中、我看到日志输出:
    41001 18:10:34.921 +1:18:47.406 ACL:调度时间不足:时钟68388
    41435 18:10:37.484 +1:18:49.969 ACL:没有足够的时间安排:时钟70436

    我应该担心吗?或者这可能表示什么问题?

    现在我已经解决了问题、我们可以关闭该线程。