2024-12-29 01:36 PM
Hi,
I'm getting a problem in my project, where I tried to create a loopback between I2S3 and I2S4 on STM32F411 Disco.
It seems that only the least significant bit of 16-bit packets is somehow shifted to the next packet. The rest of the transmission is intact.
For example - I send {0x0001 0x0000 0x0000 0x0000} and I get {0x0000 0x0000 0x0001 0x0000}, but if I send {0xFFFE 0x0000 0x0000 0x0000}, I will receive {0x0000 0x0000 0x0000 0xFFFE}.
Packets order reversal is expected, but during analysis pay attention what happens with the least significant bit. Another example: transmitting {0x8001 0x0000 0x0000 0x0000} will end up with receiving {0x0000 0x0000 0x0001 0x8000} (I'd expect {0x0000 0x0000 0x000 0x8001}).
What is also interesting, readouts from logic analyzer seem to be correct.
I am not using HAL, I am configuring registers manually. I2S4 is configured as master receiver and uses DMA. I2S3 is configured as slave transmitter and I tried "feeding" it both with polling and interrupts. I always fill transmitter's buffer before initializing receiver with the first packet.
Since I've written my own abstraction layer, attaching code here may be difficult. Therefore I am uploading the link to repo: https://github.com/baator025/I2S_loopback . The most recent branch is rtos_integration.
I'd really appreciate help, because I've run out of ideas long ago.
Thanks,
Bartosz
Solved! Go to Solution.
2025-01-07 02:40 PM
Ok, so it seems I have to do some homework about debugging and how static libraries work. Tried to add compiler flags here and there as you suggested, but it didn't help.
I also think that I may be missing some parts in project configuration. I checked in Cube IDE if library crashes as well and it seems to be working. However, I noticed that in makefile, there are some flags that I did not use, f.eg. -mcpu. I'll try to investigate this as well.