Associate III
August 12, 2013
Question
I2S standards - strange values
- August 12, 2013
- 6 replies
- 2958 views
Posted on August 12, 2013 at 20:14
Hi
I am using the I2S bus to transfer audio samples from an audio codec module to the microprocessor. There are several standards for I2S like Phillips, MSB, LSB or PCM. With the Phillips standard, everything works fine (see first attachment with audio sample values for background noise). When I switch to MSB (left-justified) by setting the value in the I2S init struct and changing the configuration of the audio codec, I get strange values (see 2nd attachment). I figured out that the value 127 for the upper byte should be 255 and 128 should be 0. What's wrong? Here my I2S config:RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
I2S_StructInit(&I2S_InitStructure);
I2S_InitStructure.I2S_Mode = I2S_Mode_SlaveRx;
I2S_InitStructure.I2S_Standard = I2S_Standard_MSB;
I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_8k;
I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b;
I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable;
I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low;
SPI_I2S_DeInit(SPI2);
I2S_Init(SPI2, &I2S_InitStructure);
I2S_Cmd(SPI2, ENABLE);