sgtl5000播放声音时i2s datain没有波形

cancel
Showing results for 
Search instead for 
Did you mean: 

sgtl5000播放声音时i2s datain没有波形

136 Views
Contributor I

Hi,在开发sgtl5000的过程中,linux上检测到了声卡,并用aplay ruguo32k.wav命令播放了文件,但是遇到如下的问题:

1.播放声音32000hz,16bit,算出来的i2s sclk应该是2*32000*16 = 1024000,但是量到的频率是3M多

2.i2s sclk有信号,但是播放声音时,i2s datain没波形,请看一下寄存器配置是否正确,谢谢!

sgtl5000的寄存器如下:

0xa0 0x11 0x00 0x71 0x00 0x01 0x01 0x30 0x01 0x10 0x00 0x10 0x00 0x00 0x02 0x00 0x3c 0x3c 0x3c 0x3c 0x01 0x5f 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x18 0x18 0x00 0x22 0x00 0x08 0x00 0x41 0x00 0x00 0x03 0x04 0x0f 0x0f 0x7a 0xfb 0x50 0x00 0x08 0x00 0x00 0x17 0x01 0xc0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

0 Kudos
3 Replies

31 Views
NXP TechSupport
NXP TechSupport

Hello Yun,

    为了解决这个问题,有写额外的事宜还需要提醒一下:

1. CPU I2S和CODEC I2S谁做Master的问题。

---CPU做Master

那么此时,你CPU端的I2S_BCLK和I2S_LRCLK将提供时钟和同步信号给codec。SGTL5000端将配置为Slave mode.

---SGTL5000做Master

那么,SGTL5000将提供I2S_BCLK和I2S_LRCLK提供时钟和同步信号给CPU端,那么您的CPU端I2S要配置为Slave mode.

所以,您要先检查自己的系统是谁做Master,谁做Slave. 那么,就知道BCLK信号是谁提供的。

2. 关于BLCK和LRCLK

如果是SGTL5000做Master,那么您要根据SGTL5000的MCLK输入的值(例如24MHZ、24.576M或者,22.5792M)通过PLL产生一个sysclk(这个sysclk应该是BCLK的整数倍),分频之后,输出给CPU的I2S,同时由BCLK决定的LRCLK也会输出给CPU做左右声道同步使用。

3. 关于您的具体问题

您使用的SGTL5000 的linux driver,在我们的linux BSP中早就有支持,因此对sgtl5000.c和sgtl5000.h driver您不需要修改。您要做的就是做一个soun card driver 也就是linux ALSA SoC driver中的Machine driver把CPU的数字音频接口DAI和SGTL5000 driver中提供的数字音频接口DAI连接起来,形成一个正确dai_link,那么就基本OK了。

所以,目前看问题出在您的Machie driver中。但是BLCK不正确,那么您按照开始我提到的Master Slave 问题查找一下。

Have a  nice day!

Weidong

0 Kudos

31 Views
Contributor I

Hi.

1.现在是sgtl5000做为slave,这个可以从寄存器0x0006的值为0x01 0x30可以看出来。

pastedImage_1.png

2.MCLK是外部的晶振提供的,频率为12.288M,这会不会有影响。

pastedImage_2.png

3.现在已经发现声卡了,看打印也知道dai_link正确形成了,machine driver是xilinx提供的源码。

另外,我想问的是量不到datain的波形,是不是静音了还是怎么回事,从寄存器能否看出来。

0 Kudos

31 Views
NXP TechSupport
NXP TechSupport

Hi,

   你现在CPU端I2S做Master,那么BCLK和LRCLK都由 CPU端提供,那么你现在的问题,不是SGTL5000引起的,因为CPU端出来的BLCK就是错的。

   所以,你需要和CPU端厂家的support联系一下,把这个问题反馈过去,因为从我的角度上看,也不知道他们CPU端的clock是怎么配置的。

   也不知道CPU端的platform driver的细节,所以无法给出你准确的判断。

Weidong

0 Kudos