ΣSigmaStudio Ask AI Русский Log in

Serial Port Format - Where's the LSB?

SigmaDSP & SigmaStudio PolEx Apr 6, 2020 00:00 4 replies Original on forum ↗
Subscribe
PolEx Question
Apr 6, 2020 00:00

I need help understanding the data format for I2S serial ports. I have configured an external device to send I2S data to the ADAU1452 in 24 bit format and it appears to be working. The issue I'm having is that the LSB of the data is always set to 0, even though I can see that bit toggling on a scope.

As a sanity check, I set up a simple program on the EVAL- ADAU1452 MINIZ board to input data from the Codec. I see the same thing: The LSB from the converter is always 0.

Is this normal, correct operation for the serial ports in 24bit format?

-Barockteer

Audio Signal Processors

adau1452

SigmaDSP Audio Processors

Ken.M Reply
Apr 6, 2020 00:00

Yes, This is a little counter intuitive, but it is correct. The reason is that the 24-bit incoming data is in 1.23 format, In other words, the MSB is the sign bit with a 23-bit number representing the fraction between -1 and 1 (-1 LSB). When the word is converted to the default 32-bit 8.24 format, the word is sign extended, and a the mantissa is filled with the remaining 23 significant bits. Stated another way, the missing 24th bit is to the left of the binary point.

Ken

PolEx Reply
Apr 6, 2020 00:00

Thanks very much for your answer! I spent a day chasing my tail on this, thinking I had mismatched clock polarities, framing errors, etc.

-Barockteer

Ken.M Reply
Apr 6, 2020 00:00

So have I. That's why I knew the answer. lol

DaveThib Reply
Apr 7, 2020 00:00

Hello PolEx,

Thanks Ken for the answer. I simply put it that we add seven bits on the MSB side of the incoming 24 bit data and we add one bit in the LSB side of the data.

Then on its way out the one LSB is truncated. The upper seven bits are saturated and the sign bit brought back down. That is a little bit more tricky.

I have also been scratching my head once wondering why I look at data in the core and it looks good and I get 0x7F FF FF on the I2S output? It was because the internal 32 bit level was greater than the 24 bit number can hold so it becomes saturated (clipped) at the max level which is 0x7F FF FF.

We also get caught with this stuff every once in a while. :)

Dave T