Electrical – Digital Microphone : I2S data output

digital-logici2smicrophone

I have been playing around with some digital microphones, which have an I2S interface. I managed to get it working (Arduino board with small I2S mems board). At least, I think I did.

When reading the I2S specification, or the microphone datasheet, I can not seem to find the answer to the following simple questions;
1. What do the digital values represent?
2. How do you convert the digital values to dbFS (and then later an dbSPL)?

The SPH0645LM4H-B (Knowles) microphone seems to output all negative values (?). I read somewhere you have to "subtract the midpoint" to eliminate the large DC offset etc. (See here: Convert Digital and Analog values to dB SPL ) On the other hand, a support engineer at Invensense explained to me that the ICS-43434 outputs positive and negative values which "represent the amplitude of the signal relative to +/-full scale".

I expected I2S to be a standard; isn't that the case … ?

Best Answer

I would bet that your I2S receiver is incorrectly configured, I2S has a rather weird one clock offset compared to the other common formats, and if you get this wrong you will always see a 1 in the MSB of the recovered sample which causes everything to appear negative if interpreted as a signed value.

Check your programming of the port against the timing diagrams for I2S, my bet is you are set up for right justified not I2S.

Getting the sign extension right for this can also be 'interesting'.

The units are either pressure or velocity (depending on which type of microphone element) relative to some slowly filtered baseline pressure. Scale depends on sensitivity.

Related Topic