arduino / ArduinoCore-arc32

GNU Lesser General Public License v2.1
329 stars 284 forks source link

I2S interface sample size configuration issue #570

Open kitsunami opened 7 years ago

kitsunami commented 7 years ago

The only sample size it is supporting is 32 bit right now.

Master/Slave Transmit/Receive Comments
Master Transmit Curie drives the I2S in 32 bit sample size only.
    Have not found a Slave device that could not take 32 bit sample size.
Master Receive Could not find a transmitter that operates in Slave mode to test this combination.
Slave Transmit Could not find a receiver that operates in Master mode.
Slave Receive Curie works with variable sample size input.
    Curie put the captured sample in 32 bit format with upper unused bits set to 0's.
kitsunami commented 7 years ago

Streaming audio sample via DMA to the I2S Controller ran into underrun condition which resulted in glitching the I2S Serial Clock. The I2S output was connected to an amplifier to drive a pair of speakers. Due to the glitching of the I2S clock, the audio output was distorted.

kitsunami commented 7 years ago

Indeed, the emptying of the I2S FIFO causes the I2S h/w interface to go into error mode and resetting the h/w module is required thereafter. As a consequent, the physical I2S connection is disrupted and the target device(s) has to re-sync on the following transaction. This process causes the losing of data samples. The DMA streaming implementation eliminated the disruption of the I2S connection.