I2S Audio Noise problem with iMX6

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

I2S Audio Noise problem with iMX6

Jump to solution
3,142 Views
murakami
Contributor I

Hi, all.

I developed iMX6Solo board with Wolfson WM8983 audio codec.(connected to SSI I/F).

On a few of the boards, the noise is on the audio output.

I checked it and found the following:

- Sometimes, The TXD data from iMX are not correct.

  For example, even if I play stereo audio that have only Left channel data,

  the data is on Right timing (TXFS=High). Or the Left data isn't correct.

- I can resolve the noise, if I change the TXC clock from the codec.

    TXC frequency = TXFS * 2 * 128 ...  noise

    TXC frequency = TXFS * 2 * 16 ... no noise

- If I change the TXC/TXFS pin's hysteresis or Pull-up/down setting,

  the noise is changed or disappeared.

 

I think the problem is something to do with the sync of TCX/TXFS and TXD(transmit controller of iMX).

If I use the audio data with WL=16bit / 2ch, I must set TXC frequency to TXFS*2*16?

I've thought it's OK to set it over TXFS*2*16 for the oversampling.

Would you give me some advice for me about this problem?

[My Environment Detail]

iMX6 Solo : I2S Slave Mode

Wolfson WM8983 : I2S Master Mode (connected to SSI I/F)

OS = Windows Embedded Compact7

TXFS Clock = 44.1KHz

TXC Clock = 11.29MHz

Word Length = 16bit / 2ch

The SSI's registers were set according to RM "61.8.1.4 I2S Mode"

SSI Register Values (only related to transfer)

  SSI2_SCR =   0x00000153

  SSI2_STCR =  0x0000038D

  SSI2_STCCR = 0x0000E100

I'm sorry I'm not good at English.

Thanks,

Labels (2)
Tags (2)
0 Kudos
1 Solution
1,946 Views
igorpadykov
NXP Employee
NXP Employee

Hi Murakami

formulas and data in "Table 61-7" are valid for

any generated clock external or internal.

Best regards

igor

View solution in original post

13 Replies
1,946 Views
igorpadykov
NXP Employee
NXP Employee

Hi Satoshi

TXC freq =  TXFS * (channels) * (word length) settings

should not depend on signal direction.

In this particular case it may influence on overall system noise, thus

creating additional audio noise.

Best regards

igor

-----------------------------------------------------------------------------------------------------------------------

Note: If this post answers your question, please click the Correct Answer button. Thank you!

-----------------------------------------------------------------------------------------------------------------------

0 Kudos
1,946 Views
murakami
Contributor I

Hi igor

Thank you for your replay.

Let me confirm.

You mean I must set "TXC freq = TXFS * (channels) * (word length)"?

For exapmle, if I want to use audio 44.1Hz/16bit/2ch, I should set the following?

  TXFS freq = 44.1KHz

  TXC freq =   44.1KHz * 2 * 16 = 1.41MHz

Best regards

Murakami

0 Kudos
1,946 Views
igorpadykov
NXP Employee
NXP Employee

Hi Murakami

for calculation ssi clocks please refer to

sect.61.8.4.2 DIV2, PSR and PM Bit Description

i.MX6DQ Reference Manual

http://cache.freescale.com/files/32bit/doc/ref_manual/IMX6DQRM.pdf

Best regards

igor

0 Kudos
1,946 Views
murakami
Contributor I

Hi igor.

According to "Figure 61-22" and "Figure 61-23" of RM,

DIV2,PSR and PM is valid output only when TXDIR is 1.

This means the SSI is used as I2S slave (TXDIR=0), these setting have  no effect. I think.

So I didn't set these setting.

Both TXC(=STCK) and TXFS(= STFS) are external clock, and Tx controller work with them.

So I suppose that there are any restricts among exteral input TXC,TXFS and Tx controller (and ssi_clk).

For example, we should "TXC freq = TXFS * (channels) * (word length)".

Best regards

igor

0 Kudos
1,945 Views
igorpadykov
NXP Employee
NXP Employee

formula given in that section is valid for both external and

internal clocks.

~igor

0 Kudos
1,946 Views
murakami
Contributor I

Hi igor.

Do you mean that "DIV2,PSR and PM setting is valid for external clock(1)"?

or "Table 61-7" is valid for extenal clock(2)"?

If you mean (1),

The externl clock is created by audio codec and input to SSI, so DIV2,PSR and PM setting's

formula is meaningless for external clock, I think.

If you mean (2),

according  Table 61-7, you say that we have to set 1411.2kHz for STCK for the following

condition, right?

  Bits/Word = 16

  Words/Frame = 2

  Ideal Frame Rate = 44.1kHz

 

Best regards

Murakami

0 Kudos
1,947 Views
igorpadykov
NXP Employee
NXP Employee

Hi Murakami

formulas and data in "Table 61-7" are valid for

any generated clock external or internal.

Best regards

igor

1,946 Views
satoshishimoda
Senior Contributor I

Hi Igor,

Murakami-san seems to be confused by the formulas and Table 61-7 since these indicate the information how to create bit clock and frame sync clock in i.MX6 with the dividers (DIV2, PSR, PM, WL, and DC) originally.

So please reply with simple answer "yes" or "no" to his simple question, "should we set TXC freq to 'TXFS * (channels) * (word length)'? ".

Best Regards,

Satoshi Shimoda

0 Kudos
1,946 Views
igorpadykov
NXP Employee
NXP Employee

Hi Satoshi

yes

Best regards

igor

0 Kudos
1,946 Views
murakami
Contributor I

Hi Igor, and Shimoda-san

Thank you for your reply.

I use "TXFS * (channels) * (word length) settings" for resolution of noise problem.

Best regards

Murakami

0 Kudos
1,946 Views
igorpadykov
NXP Employee
NXP Employee

Hi Hideyuki

if issue appears only on few boards and with changing hysteresis/ pull-up/down

settings the noise is changing/disappear, then issue may be caused by signal

integrity and it makes sense to observe it with oscilloscope and tweak drive

strength settings using register IOMUXC_SW_PAD_CTL_PAD_x_y.

Note, bad soldering also may cause noise.

Best regards

igor

-----------------------------------------------------------------------------------------------------------------------

Note: If this post answers your question, please click the Correct Answer button. Thank you!

-----------------------------------------------------------------------------------------------------------------------

0 Kudos
1,946 Views
satoshishimoda
Senior Contributor I

Dear Igor,

> If I use the audio data with WL=16bit / 2ch, I must set TXC frequency to TXFS*2*16?

I have a same question about TXC frequency setting as the above one.

Is it no problem if I set TXC freq > TXFS * (channels) * (word length)  when both signals are input?

Or should I set TXC freq =  TXFS * (channels) * (word length) ?

Best Regards,

Satoshi Shimoda

0 Kudos
1,946 Views
murakami
Contributor I

Hi, igorpadykov

Thank you for your reply.

I checked TXC, TXFS, TXD with oscilloscope.But I can't find the problem of signal, and

thier timing  meet the spec of DOC#IMX6SDCLEC "4.11.19.3 SSI Transmitter Timing with External Clock".

About tweaking signals, the TXC and TXFS are both input pin, so

I think only HYS and PUS of IOMUX_SW_PAD_CTL_PAD_x_y affect to the signal.

The resutl of the change them is the following:

  Changing PUS ... the noise is changed, but is appeared.

  Disable HYS of TXC only ... the noise is disappeared.

  Disable HYS of TXFS only ... the noise is disappeared.

  Disable HYS of both TXC and TXFS ... the noise is changed, but is appeared.

I don't think that these signals are so sensitive that the hysteresis cause or don't cause the problem.

If so senstive, I should tweak pin setting for each board..

Thanks,

H.Murakami

0 Kudos