I2S Input voltage levels for Verdin iMX8MP

Continuing off of this: I2S output without Codec

I was able to have I2S input without codec by adding this line to the device tree:

<MX8MP_IOMUXC_SAI1_RXD0__AUDIOMIX_SAI1_RX_DATA00 0x1d6>, /* SODIMM 36 */

I have a device that outputs audio stream via I2S, so there’s no codec, hence the dummy codec in the link above. This device outputs 3V3, and our Verdin iMX8MP uses 1V8, so we had to use the level shifter to step the 3V3 lines down to 1V8 into our Verdin module.

I am using Verdin Development Board.

When I play audio from the verdin module into the device, it is working as expected. However, when I record audio from the device (as in, the device is playing audio), the file comes up silence.

I put in the oscilloscope on the pin 36 (RX line), and saw that there is activity, however it is too small to be triggered as HIGH, so the recording is always silence. See picture, where the voltage at the RX line range between 0V and 0.85V (and never touching the 1.8V).

If we remove the RX line, the line jumps to above 1.8V (so the oscilloscope is reading what is coming from the device via level shifter).

I’ve applied a random 1.8V input into the RX line and it shows that it recorded that in the .wav file. So we know the capture is working. I just don’t know why the input signal is too low, perhaps the device tree is not configured correctly?

Any ideas?

I’ve also seen this: I2S Voltage levels for Verdin iMX8MP however the issue is not the scope as I can confirm this from the recordings.

Hi, I’m the Toradex AI Assistant. The Toradex Support team will follow up with you shortly!

Did you like my answer?

:+1: :-1:


Hello,

For the Verdin iMX8M Plus, the I2S RX data input (SODIMM_36) is mapped to SAI1_RXD0 and configured as SAI1_RX_DATA00. The pad settings you’re using (0x1d6) align with the reference implementation. Based on your oscilloscope measurements and the successful test with a 1.8V input signal, it seems the issue may be related to the level shifter implementation rather than the device tree configuration.

When you disconnect the RX line, you observe the correct 1.8V level from your level shifter, but when connected, the signal is attenuated to 0.85V. Here are some key points to verify:

  1. Ensure the pinmux configuration matches the reference:

    <MX8MP_IOMUXC_SAI1_RXD0__AUDIOMIX_SAI1_RX_DATA00 0x1d6> /* SODIMM 36 */
    
  2. Verify that the level shifter is properly configured for bidirectional operation. Since the I2S interface can be configured for either master or slave operation, ensure your level shifter is suitable for your use case.

  3. Check that your level shifter’s implementation matches the expected I2S signal characteristics for your configuration.

If all these aspects are correct, the issue likely lies with the level shifter circuit implementation rather than the Verdin module configuration.

Best regards,
Toradex AI Assistant.

Sorry, wanted to ask this question too: as we know without connecting the RX line, the signal is running at 1V8. So why is connecting the RX line pulling the voltage down such that the high doesn’t trigger as 1 in the input, thus producing complete silence in the eyes of imx8mp?

We solved it.

On the development board, the verdin module was physically connected to the codec.

Once we figured out that the jumpers meant physically disconnected the codec, we moved the wiring over to the X2 track while the X4 track remains disconnected.

So disabling the codec in the device tree wasn’t sufficient, we also had to physically break the connection to the codec, thus removing the voltage leak and keeping the signal at 1.8V.