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.

[参考译文] CC2640R2F:CC2640R2F I2S 采样放大器发生器功能

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1283868/cc2640r2f-cc2640r2f-i2s-samplestamp-generator-function

器件型号:CC2640R2F
主题中讨论的其他器件:TLV320AIC3254BOOSTXL-AUDIOCC2652R、CC3200AUDBOOST

您好、专家!

我一直使用 CC2640R2开发射频应用。 现在、TX 和 RX I2S 时钟存在差异的问题。 如何同步 TX 和 RX I2S 时钟?我发现用户 guider 具有有关  I2S 采样放大器发生器功能的描述、它看起来可以实现同步功能。 但我找不到任何描述如何实现它的示例代码或应用节点。 您可以帮助提供一些执行此操作的示例代码。 谢谢!  

此致。

亚历克斯

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

    尊敬的 Alex:

    感谢您与我们联系。

    I2S 采样放大器发生器可用于略微改变音频器件的音频时钟。 但是、要做到这一点、应从 PLL 获取音频时钟、以便可以将时钟更改0.01%以下。

    在这种情况下、接收器器件可以定期读取采样戳、以检查其采样速度是快于还是慢于发送器。 然后、接收器可以通过小步长来改变音频时钟。

    如果没有可用的 PLL、要实现的系统可能会稍微复杂一些。 如果是您的情况、我们可以看到、例如、如果您的系统具有可用作 PLL 的硬件音频编解码器...

    此致、

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

    你好 ,克莱门特,

    如何使用 具有 PLL 的 TLV320AIC3254来实现此功能。 我有两个带有 CC2640R2和 BOOSTXL-AUDIO (TLV320AIC3254)的 EVM 板。 使用此演示可以实现代码吗? 该时钟同步功能对于我的应用非常重要。 TI 专家能否就此提供帮助以展示代码示例?  非常感谢!

    亚历克斯   

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

    尊敬的 Alex:

    我以前使用这个精确的音频编解码器完成了类似的操作、但使用了不同的 SimpleLink 器件(我使用的是 CC2652R)。 我找不到我的代码(那是3年前的代码)、但我希望不管怎样都能让您感兴趣。

    解决方案摘要

    • 在 Rx 端进行频率校正-在 Tx 端无需修改
    • 音频时钟的频率由时间内的平均时钟频率给出。

    在我们的例子中、只使用两个频率、即"初始频率"和最接近的可达到的较高或较低频率。

    • 根据从无线电接收到两个音频帧之间消耗的样本数、调整音频时钟的频率、即将一个或另一个频率输入编解码器所花费的时间。
    • 使用 I2S 模块的采样时间戳生成器读取已消耗的采样数。 此时、读取在无线电 Rx 回调中触发。

    解决方案实现

    首先、TLV320AIC3254应配置为 I2S 主器件(CC2640R2F 为 I2S"从器件")。 这意味着 CC2640R2F 必须向 TLV320AIC3254输入高频 MCLK 时钟。 我建议使用 CC2640R2F 计时器生成该时钟。
    注1:SimpleLink 音频插件针对 CC26x2展示了该功能。 我建议您查看一下。 请参阅 https://dev.ti.com/tirex/explore/node?node=A__AFfZCYCdhZoqa2UTNzEQxg__com.ti.SIMPLELINK_AUDIO_PLUGIN__RW99gST__LATEST
    注释2:带有 TLV320AIC3254 (我认为 CC3200AUDBOOST)的电路板需要修改硬件(移除 CAPA 并添加跳线)才能实现此功能。 请参阅 https://dev.ti.com/tirex/content/simplelink_audio_plugin_3_30_00_06/docs/I2S.html#hardware-setup (位于"(可选) Quick_Start_Guide 从模式"下

    其次、配置 TLV320AIC3254的 PLL、以便要求 CC26x2/CC13x2器件提供可能的最低时钟频率。 这样、两个频率之间的阶跃就会尽可能小。
    在我的示例中、输入到 TLV320AIC3254的时钟为250kHz。 最接近的可达到较高频率为252.6kHz。 最接近的可达到下限频率为247.4kHz。
    注3:在此阶段、您的系统应具有与之前相同的性能(即时钟漂移问题仍然存在、但音频质量应相同)。

    第三步、实施帧计数逻辑。

    • 在接收到来自无线电的每个新音频帧时、我们确定(使用采样戳生成器)消耗的音频样本数
    • 使用的音频样本数与接收到的音频样本数进行比较
    • 如果接收到的音频样本数多于消耗的音频样本数、则我们增加 MCLK 频率。 相反、如果接收到的音频样本数少于消耗的音频样本数、则我们将降低 MCLK 频率。
    • 为了降低/提高 MCLK 频率、我们修改 numberOfCyclesModified 和 directionOfModification 的值

    第四、实现一种稍微修改 MCLK 频率的方法。 可以通过增加/减少定时器的预分频器值来修改 MCLK 频率。 平均频率是在10,000帧的样本(即60,000个样本、或44.1kHz 下为1.36秒)上完成。 MCLK 频率可以在每一帧开始时更改。 在实践中、我们将 MCLK 频率更改为每10,000帧最多2倍。 我们使用一个从10000到0的计数器–当计数器达到0时、该计数器会重新设置到10000。 在10,000数量的 OfCyclesModified 周期内、MCLK 频率为250kHz。 在 numberOfCyclesModified 剩余周期内、MCLK 频率为252.6kHz 或247.4kHz–基于 directionOfModification 的值

    我希望这将有所帮助、

    此致、

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

    你好,克莱门特,

    感谢你的帮助。 这对我来说是一个有用的解决方案。 现在我已经明白了。 对于代码实现、我可以在 SDK 中找到 I2S 驱动程序代码、但没有找到任何示例来说明如何使用此 I2SSampleStamp 模块、更不用说如何将其与射频 RX 或 TX 关联。 您能告诉我哪个 SDK 可以找到 I2SSampleStamp 的使用示例代码吗? 如果存在将 I2SSampleStamp 与 RF 结合使用的引导程序代码、我相信我可以根据您的解决方案实现这一功能。 您能提供吗? 谢谢!

    BTW、我的应用需要两个 TX 和一个 RX、因此我必须在 TX 端修改 PLL 频率。 根据您的解决方案、我认为我的用例稍微发生了变化。

    亚历克斯

    此致。

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

    尊敬的 Alex:

    没有我知道的适用于 I2SSampleStamp 函数的示例或 TI 驱动程序。

    我建议参考中的 driverlib 函数 I2SSampleStampGet ()。 \source\ti\devices\cc26x0r2\driverlib\I2S.c

    此致、