cnlohr/esp8266ws2812i2s

I2S output does not look right

mroavi opened this issue · 6 comments

Hi Charles. I compiled the project with no changes and flashed it to my board. I used the 'top' application to send packets to the module but none of the LEDs flashed. I used a logic analyzer to see the signal coming out of the U0RXD_U/I2S0_DATA pin. This is before sending running 'top':
1

Zoomed in pulse:
2

After running the 'top':
3

Any idea what the problem is?

I noticed that you commented out the line that maps the I2SO_BCK to GPIO15:
// PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_I2SO_BCK);

In order to check if the clock was working fine I included it back. This is how the clock looks like:
image
which actually looks fine to me.

The funny thing is that after doing this change (mapping the clock to GPIO15), the signal coming out U0RXD_U/I2S0_DATA also changed:
image

Zoom in:
image

Unfortunately, the LEDs are still not flashing.

Any thoughts?

That signal looks pretty awful. Sadly, this is a situation where you might need a scope, but only after checking for things like ground loops, etc. This is some pretty intense ringing on the line!

I think I know what is going on, but I"m not 100% sure. I'm using an Adafruit HUZZAH ESP8266 breakout board. I just read from their webpage that there is a level shifter connected to the RX pin. Could this be why the I2S does not work properly?

Woah, that could totally mess it up. I wish more people used resistors on their output pins... It is possible the level shifter could be driving the esp, very hard and would totally prevent all outbound communications.

I replaced the Adafruit HUZZAH ESP8266 breakout board with a D1 Mini and it worked great. I definitely think that it is the level shifter what is interfering with the proper operation of the I2S. Thanks for your help!

Yeah, level shifters are almost always bad news bears. People need to use resistor dividers much more often, especially if it's not 100% clear if something's an input or an output.