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.

[参考译文] PCM5122:I2S 主模式问题

Guru**** 2927270 points

Other Parts Discussed in Thread: PCM5122

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1630003/pcm5122-i2s-master-mode-issue

器件型号: PCM5122

您好、  

 

我有一个振荡器连接到 36.864MHz 的 SCK 引脚、我想在 I2S 主模式下使用芯片。 它连接到我的 STMcontroller、它以 48kHz 的采样频率流式传输。

我在下面创建了用于流式传输的 init 函数、我设置了一个 DMA 流。

测量时、我在 I2S 线路上测量以下内容:

SCK:36.864MHZ(来自示波器)
BCK: 1.152MHz(我不相信是正确的)
SD:(有数据)
Ws:9kHz(我不认为正确)

我读取了只读寄存器、但我认为唯一可以得出的结论是我的时钟设置中的某个地方犯了个错误: 
寄存器 0x04 - PLL:解锁、启用= 1
寄存器 0x5A — 溢出标志:L1OV=0 R1OV=0 L2OV=0 R2OV=0 SFOV=0
寄存器 0x5B — 检测到 FS:错误、SCK 比率:0
寄存器 0x5D — 检测到的 BCK 比率:每帧 128 BCKS
寄存器 0x5E — 时钟状态:CDSST=0 PLL-L=0 LRCK/bck=1 SCKval=1 FS = 1 BCKval=1 FSval=0
寄存器 0x5F — 时钟错误标志:LTSH=0 CKMF=0 CSRF=0 CERF=1
寄存器 0x6C — 模拟静音:左=0 右=0
寄存器 0x78 — 自动静音:左=0 右=0

这也是我的初始化函数的代码、我通过 I2C 控制芯片

HAL_StatusTypeDef PCM5122_Init (void) 



HAL_StatusTypeDef 状态;



//第 0 页

状态= PCM5122_WriteRegister (0x00、0x00);

如果 (status != HAL_OK) 返回状态;

//软复位开启

状态= PCM5122_WriteRegister (0x02、0x10);

如果 (status != HAL_OK) 返回状态;

HAL_DELAY (10);




第 253 页

状态= PCM5122_WriteRegister (0x00,253);

如果 (status != HAL_OK) 返回状态;

//时钟弯曲

状态= PCM5122_WriteRegister (0x3F、0x11);

如果 (status != HAL_OK) 返回状态;

状态= PCM5122_WriteRegister (0x40、0xFF);

如果 (status != HAL_OK) 返回状态;




//第 0 页

状态= PCM5122_WriteRegister (0x00、0x00);

如果 (status != HAL_OK) 返回状态;




//主模式

状态= PCM5122_WriteRegister (0x09、0b00010001);

如果 (status != HAL_OK) 返回状态;




//禁用自动时钟

状态= PCM5122_WriteRegister (0x25、0b00000010);

如果 (status != HAL_OK) 返回状态;




//重置 BCK/LRCK 分频器

状态= PCM5122_WriteRegister (0x0C、0b00000000);

如果 (status != HAL_OK) 返回状态;

状态= PCM5122_WriteRegister (0x0C、0b00000011);

如果 (status != HAL_OK) 返回状态;




//时钟源= SCK

状态= PCM5122_WriteRegister (0x0E、0b00110000);

如果 (status != HAL_OK) 返回状态;




// DAC 时钟分频器((36.864MHz→48kHz 正确)

状态= PCM5122_WriteRegister (0x1C、(48-1));// 48-1

如果 (status != HAL_OK) 返回状态;




// I2S 格式

状态= PCM5122_WriteRegister (0x28、0b00000011);

如果 (status != HAL_OK) 返回状态;




//禁用自动静音

状态= PCM5122_WriteRegister (0x41、0x00);

如果 (status != HAL_OK) 返回状态;




//为音频内核配置 PLL (48kHz 目标、36.864MHz SCK)

状态= PCM5122_WriteRegister (0x14、(3 –1));// PLL P

如果 (status != HAL_OK) 返回状态;

状态= PCM5122_WriteRegister (0x15、1);// PLL J

如果 (status != HAL_OK) 返回状态;

状态= PCM5122_WriteRegister (0x17、8);// PLL D

如果 (status != HAL_OK) 返回状态;

状态= PCM5122_WriteRegister (0x18、(8-1));// PLL R(后分频器)

如果 (status != HAL_OK) 返回状态;




//启用 PLL

状态= PCM5122_WriteRegister (0x04、0b00000001);

如果 (status != HAL_OK) 返回状态;

HAL_delay (10);//等待 PLL 锁定




//取消 DAC 静音

状态= PCM5122_WriteRegister (0x03、0x00);

如果 (status != HAL_OK) 返回状态;

//软复位关闭

状态= PCM5122_WriteRegister (0x02、0x00);

如果 (status != HAL_OK) 返回状态;




HAL_DELAY (10);




返回 HAL_OK;

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

    您好 William、

    对于预期的 FS 和 SCK、 表 131 中建议的 PLL 值为 P = 3、J = 8、D = 0 和 R = 1。

    这由以下寄存器进行设置:

    0x14 = 0x02

    0x15 = 0x08

    0x17 = 0x00

    0x18 = 0x00

    请尝试使用这些值。

    此致、

    Garret

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

    您好 William、

    好了、时钟现在至少有效。 时钟检测寄存器与您在 LRCK 和 BCK 引脚上测量的值是否匹配?

    如所示、您是否定义了 8kHz LRCK 和 512kHz BCK?

    SCK 比率= 9 表明为 36.864MHz SCK 正确设置了 PLL、但其他比率意味着 SCK 检测到为 6.144MHz。 是否可以发送 SCK 的示波器屏幕截图?

    此致、

    Garret

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

    您好、

    这是奇怪的部分。

    BCK: 3.072MHz

    LRCLK:48kHz

    SCK:36.864MHz(来自振荡器)

    SD:数据

    此致、

    William

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

    您好 William、

    如果您正在定义正确的时钟范围、则我认为该配置是可以的。

    此致、

    Garret

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

    右、
    谢谢!

    在结束之前、我只想问一个小问题。

    发送到芯片的数据 Im 可能是错误的、还是 DAC 输出上的错误也会导致这样的结果?

    此致、

    William

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

    您好 William、

    否、数据不应对时钟检测架构产生影响。

    此致、

    Garret

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

    感谢你的评分

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

    您好、  


    我仍然有问题。


    寄存器 0x04 - PLL:锁定、启用= 1
    寄存器 0x5A — 溢出标志:L1OV=0 R1OV=0 L2OV=0 R2OV=0 SFOV=0
    寄存器 0x5B — 检测到 FS:32-48kHz、SCK 比率:9
    寄存器 0x5D — 检测到的 BCK 比率:每帧 64 BCKS
    寄存器 0x5E — 时钟状态:CDSST=0 PLL-L=0 LRCK/bck=0 SCKr=0 FS = 0 SCKval=0 BCKval=0 FSval=0
    寄存器 0x5F — 时钟错误标志:LTSH=0 CKMF=0 CSRF=0 CERF=0
    寄存器 0x6C — 模拟静音:左=0 右=0
    寄存器 0x78 — 自动静音:左=0 右=0

    现在一切都在检测。
    但我仍然处于静音状态。 但我不会将芯片静音。

    我很困惑。

    此致、  

    William

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

    更新、  

    我在 init 函数之前和之后进行了重置。

    并注释掉了第 253 页上的柔性寄存器。

    现在、我的信号被凌乱、但我的 DAC 不再处于静音状态。

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

    您好 William、

    您能否发送一个输出信号示波器? 它是如何弄错的?

    此致、

    Garret

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

    您好、

    它具有我感谢的正确频率、我可以看到它在 KHz 范围内发生跳跃。
    (我期望满量程输出中有一个 1KHz 正弦波。)



    我认为它与 DAC 分频器有关。



    我也重新启用了时钟柔性寄存器、但这没有效果。

    此致、

    William

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

    您好 William、

    可以发送完整的寄存器转储吗? 输入数据文件吗?

    此致、

    Garret

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

    是的、

    e2e.ti.com/.../Full-Register-Dump.txt

    e2e.ti.com/.../snapshot-samples.txt

    谢谢你。

    此致、  

    William

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

    您好 William、

    您是否可以尝试将寄存器 14 设置为 0x00? 否则、您可以启用自动计时模式、以缓解手动设置方面的任何问题。 使用标准音频时钟频率时、不应需要手动 PLL 配置。

    此致、

    Garret

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

    您好 William、

    似乎您离开了 BCLK 和 LRCK 分频器、但仍必须进行配置。

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

    您好 William、

    我们的团队今天在度假。 我将在下周回顾并跟进。

    此致、

    Garret

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

    您好、  

    没问题,复活节快乐!

    ____


    我做了一个快速的功能来检查一些东西,以及它现在的工作。

    I 衡量
    MCK:24、567MHz
    BCK: 3.072MHz
    SD:数据
    Ws:48kHz

    但 DAC 的输出端什么都没有、这是因为输出端静音、还表明 PLL 未锁定、但我看到时钟没有那么奇怪?



    HAL_StatusTypeDef PCM5122_Init (void)

    HAL_StatusTypeDef 状态

    //手动时钟模式

    PCM5122_WriteRegister (0x250x02)

    //禁用 PLL

    PCM5122_WriteRegister (0x040x00)

    //重置计数器

    PCM5122_WriteRegister (0x0C0x00)

    HAL_DELAY (1)

    //正确分禾器

    PCM5122_WriteRegister (0x207)// BCK = 3.072MHz

    PCM5122_WriteRegister (0x2163)// LRCK = 48kHz

    //启用计数器

    PCM5122_WriteRegister (0x0C0x03)

    // I2S

    PCM5122_WriteRegister (0x280x03)

    //主模式

    PCM5122_WriteRegister (0x090x11)

    HAL_DELAY (50)

    返回 HAL_OK

    }





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

    您好、

    我将在接下来的三天里上路。 我将尝试跟上我的电子邮件和状态,但我将再次收到星期一在最晚.

    我对任何延误深表歉意。

    此致、
    William

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

    您好 William、

    PLL 未被锁定应该不用担心、因为它未被启用。 有很多方法可以在硬件和软件中将该器件静音。 检查 XSMT 引脚和任何其他静音寄存器。

    此致、

    Garret

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

    啊!

    XSMT 我确实被遗忘了拉高;
    我也添加了这些线。

    PCM5122_WriteRegister (0x030x00)//软件取消静音

    PCM5122_WriteRegister (0x410x00)//禁用自动静音

    我将了解静音选项。

    另外还决定更改项目一位、而对于 V2、此芯片将不在其上。

    感谢您的帮助!

    此致、  

    William