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.

[参考译文] CC2564CSTBTBLESW:如何将 A3DP 设置为 I2S 时钟主器件

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/907755/cc2564cstbtblesw-how-to-set-up-a3dp-as-i2s-clock-master

器件型号:CC2564CSTBTBLESW
主题中讨论的其他器件: CC256XCQFN-EMCC2564CCC256XSTBTBLESW

我们已下载 CC2564CSTBTBLESW v4.2.1.1并将其与 CC256XCQFN-EM、CC256XEM-STADAPT 和 STM32F4Discovery 配合使用。

A3DP_SNK 演示最初是为了将 CC2564C 设置为 I2S 时钟从模式、但我们想将其评估为时钟主模式。 因此、CC256XCQFN-EM 配置电阻器 R11、R18和 R19为出厂默认值(即 I2S 时钟主器件角色)。 对代码进行了调整、使 STM32不会驱动 I2S 线路、VS_PCM_Codec_Config ()的调用被 VS_PCM_Codec_Config_Slave_I2S ()取代。

该演示在 I2S 之外的所有方面都无可挑剔。 当 A2DP 流开始时、CC2564C 会在 I2S 上输出该波形:

因此、基本而言、FSYNC (WS)和 CLK (SCK)信号始终相同、SDOUT 始终为0。 根据 VS HCI 命令文档、我实验了不同的帧同步占空比

  1. 占空比0和16产生上述波形、FSYNC-CLK 都产生16个具有时钟速率的时钟脉冲、持续一半的帧同步频率周期、然后两者都为低电平。
  2. 占空比1-32产生类似的波形、即与占空比值匹配的时钟脉冲数。 在值32或更高时、FYSNC 和 CLK 看起来都是相同的连续时钟信号、具有配置的时钟速率

那么、我的问题是、如何配置 CC2564C 以在 A3DP 模式下输出正确的 I2S 格式信号作为时钟主器件?

提前感谢 Benedek

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

    您是否按如下方式配置了寄存器?

    谢谢

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

    是的、正如我提到过的、电阻器是这样配置的。 我在调试接头(来自芯片的1.8V 电压)上以及电平转换器之后测量了信号、它们是相同的。 正如我提到过的、I2S 时钟会对 HCI_VS_Write_CODEC 配置命令中的更改做出反应、但我无法以产生有效 I2S 时钟波形的方式对其进行配置。

    (sisign:也许对于下一个设计迭代、不必更改3个电阻即可更改方向、只需添加一条可由主机 MCU 切换的线路/通过跳线切换以选择 I2S 主模式或从模式。)

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

    很抱歉耽误你的时间。 我将再次查看此主题。 除了针对主模式完成的硬件模块外、我希望您检查一些其他配置、例如 CC2546C 是 PCM 时钟主器件。

    a)在您的应用中、您使用 所需的 FSYNC 时钟调用 VS_PCM_Codec_Config ()对吧?

    b) CAN、您可以获取 FW 日志以确保到达控制器的 PCM 配置符合预期。

    https://processors.wiki.ti.com/index.php/CC256x_Logger_User_Guide

    谢谢

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

    这是发出编解码器配置命令(取自另一个 MCU 版本的 Bluetopia 栈)的代码段。 频率和数字通道来自 etAUD_Stream_Format_Change_Indication 的 StreamFormat:

                const uint8_t SampleSize = 16;
                word_t Channel1Offset;
                word_t Channel2Offset;
                UNION{
                    VS_Write_Codec_Config_Params_t WriteCodecConfigParams;
                    VS_Write_Codec_Config_Enhanced_Params_t WriteCodecConfigEnhancedParams;
                }u;

                Channel1Offset =(numChannels ==1)? (SampleSize +1):1;
                Channel2Offset = Channel1Offset + SampleSize;

                BTPS_MemInitialize (&U.WriteCodecConfigParams、0、sizeof (U.WriteCodecConfigParams));
                U.WriteCodecConfigParams.PCMClockRate_KHz =(频率* numChannels * SampleSize)/ 1000;
                U.WriteCodecConfigParams.FrameSyncFrequency_Hz =频率;
                U.WriteCodecConfigParams.FrameSyncDutyCycle = 0;
                U.WriteCodecConfigParams.CH1DataOutSize = SampleSize;
                U.WriteCodecConfigParams.CH1DataOutOffset = Channel1Offset;
                U.WriteCodecConfigParams.CH1DataInSize = SampleSize;
                U.WriteCodecConfigParams.CH1DataInOffset = Channel1Offset;
                U.WriteCodecConfigParams.CH1InEdge = 1;
                U.WriteCodecConfigParams.FsynchMultiplier = 0;
                U.WriteCodecConfigParams.CH2DataOutSize = SampleSize;
                U.WriteCodecConfigParams.CH2DataOutOffset = Channel2Offset;
                U.WriteCodecConfigParams.CH2DataInSize = SampleSize;
                U.WriteCodecConfigParams.CH2DataInOffset = Channel2Offset;
                U.WriteCodecConfigParams.CH2InEdge = 1;
                VS_Write_Codec_Config (BluetoothStackID、&U.WriteCodecConfigParams);

                /*设置编解码器配置增强参数。                         *
                BTPS_MemInitialize (&U.WriteCodecConfigEnhancedParams、0、sizeof (U.WriteCodecConfigEnhancedParams));
                U.WriteCodecConfigEnhancedParams.CH1DataOutMode = 0x01;
                U.WriteCodecConfigEnhancedParams.CH2DataOutMode = 0x01;
                VS_Write_Codec_Config_Enhanced (BluetoothStackID、&U.WriteCodecConfigEnhancedParams);

    下面也是 TB 调试记录器记录:

    e2e.ti.com/.../STM32-A3DP.zip

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

    您好!

    可以、请尝试将"FsynsynctiMultiplier"设置为32?

    U.WriteCodecConfigParams.Fsynctx 多路复用器=(Byte_t) 32;

    谢谢

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

    我现在尝试在设置中使用相同的代码、但使用另一个 CC256XCQFN-EM、相同的代码实际上适用于此模块! 现在、我想知道两个模块如何使用相同的主机软件生成不同的结果:

    当我开始使用模块1时、我不知道有单独的 CC2564CSTBTBLESW、因此我开始使用 CC256XSTBTBLESW。 堆栈没有正确启动、因此我确实确定了在末尾使用正确的堆栈 (另一个学习曲线是添加了__support_AVPR__和__support_CC256XC_PATCH__。) 但到那时、多个不兼容的补丁已上传到芯片。 这些补丁在芯片内部是如何使用的? 它们是否会导致固件发生永久更改、而这些更改不会在下电上电或通过新的补丁上载而被清除?

    (模块1现在用于 此设置 顺便说一下、这是否是我在那里遇到问题的根本原因?)

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

    是的、 https://www.ti.com/tool/CC2564CSTBTBLESW 

    是最新版本。 如果它正在处理此版本、我们可以关闭 TT。