Description
Ref: #981
The issue above seems to be same issue but has been closed, claiming (if I read it correctly) some fault on the board being used. However I know my board works and yet this example still does not work.
Environment
- Development Kit:
- IDF version: a192988
- Development Env: Make
- Operating System: Ubuntu
- Power Supply: external 5V
Problem Description
I have compiled and installed the examples/peripherals/i2s
example but it does not work. I added a log to trace the number of bytes written by i2s_write() and this is always zero.
From reading the code and adding logging in various places, it would appear that the interrupt handler has to signal an underun, or at least some sort of TX event, before the curr_ptr is given a buffer to write to. As far as I can see the interrupt NEVER triggers.
This is NOT a hardware issue as my very old "hand rolled DMA code" from about 5 years ago correctly runs DMAso tehre is some sort of bug in the current SDK.
On thing that does look odd is that when the TX interrupt is enabled, we tweak the rx_link (sic) and when the RX interrupt is en/disabled, we tweak the tx_link! However this is not the cause of the issue as I tried switching these and this had not affect.
Expected Behavior
i2s_write() writes the expected number of bytes and the DMA causes the appropriate lines to switch appropriately.
Actual Behavior
i2s_write() always returns "0 bytes written" and there apears to be no "action" on the SLC lines.
Steps to repropduce
- Add a trace log after the is2_write() in i2s_example_main.c to trace the number of bytes written.
- Build and install the application
- Watch the debug output.
Code to reproduce this issue
just the is2_example_main.c application.```
Debug log goes here.
Please copy the plain text here for us to search the error log. Or attach the complete logs but leave the main part here if the log is too long.