STM32F105系列I2S SLAVE RX 收数错位问题

[复制链接]
 楼主| leino11121 发表于 2009-12-30 08:57 | 显示全部楼层 |阅读模式
MCU输出主时钟给音频ADC芯片,让ADC芯片工作在master 模式,产生standerd philips I2S格式(64FS,FS=48K),但从MCU端看,接收到的数据有错位情况。

举例:MCU I2S配置如下,I2S时钟误差为0,
I2S_InitStructure.I2S_Standard = I2S_Standard_Phillips;
I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_32b;
I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable;
I2S_InitStructure.I2S_AudioFreq = I2S_AudioFreq_48k;
I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low;
I2S_InitStructure.I2S_Mode = I2S_Mode_SlaveRx;
I2S_Init(SPI2, &I2S_InitStructure);
如果ADC连续发0x1234 5678,MCU接收到的数据有可能是这样的0x2345 6781 或者0x3456 0x7812,感觉是MCU I2S无视WS信号,只是用位时钟驱动移位寄存器,而造成错位。
香水城 发表于 2009-12-30 11:24 | 显示全部楼层
WS信号引脚的配置正确吗?
 楼主| leino11121 发表于 2009-12-30 11:56 | 显示全部楼层
三个引脚都配置成为GPIO_Mode_AF_PP,而且从MCU_WS也可以检测到48K方波
 楼主| leino11121 发表于 2009-12-30 12:13 | 显示全部楼层
WS信号引脚的配置正确吗?
香水城 发表于 2009-12-30 11:24

三个引脚都配置成为GPIO_Mode_AF_PP,而且从MCU_WS也可以检测到48K方波
香水城 发表于 2009-12-30 12:21 | 显示全部楼层
请试试看把WS信号对应的引脚配置为浮空输入。
 楼主| leino11121 发表于 2009-12-30 13:17 | 显示全部楼层
请试试看把WS信号对应的引脚配置为浮空输入。
香水城 发表于 2009-12-30 12:21

刚刚试了一下,没有作用。
 楼主| leino11121 发表于 2009-12-31 09:26 | 显示全部楼层
没人理,大家没有遇到过相同的问题吗?
 楼主| leino11121 发表于 2010-1-3 13:31 | 显示全部楼层
香版主,可否帮我解决一下?
香水城 发表于 2010-1-3 13:49 | 显示全部楼层
对不起,我没有做过这样的接口,暂时帮不上你。

但是我发现你的配置好像有些问题:“MCU输出主时钟给音频ADC芯片,让ADC芯片工作在master 模式,产生standerd philips I2S格式(64FS,FS=48K)”。既然你的音频ADC芯片工作在主模式,那么应该是这个ADC芯片提供时钟,而不是MCU提供时钟才对呀,你再好好看看。
 楼主| leino11121 发表于 2010-1-3 15:31 | 显示全部楼层
对不起,我没有做过这样的接口,暂时帮不上你。

但是我发现你的配置好像有些问题:“MCU输出主时钟给音频ADC芯片,让ADC芯片工作在master 模式,产生standerd philips I2S格式(64FS,FS=48K)”。既然你的音频ADC芯 ...
香水城 发表于 2010-1-3 13:49

好的,我已经跟st的技术支持联系了。

解释一下:
adc芯片的主时钟是256fs(12.288KHz)。这个时钟是ADC的工作时钟,如果需要ADC工作,这个时钟是必须的。至于ADC做主模式还是做从模式,是针对I2S来说的,I2S接口的ws 和ck信号是谁提供的,谁就是I2S总线的主。
sinc_mark 发表于 2014-7-21 10:52 | 显示全部楼层
leino11121 发表于 2010-1-3 15:31
好的,我已经跟st的技术支持联系了。

解释一下:

LZ的问题解决了吗?后来是怎么解决的?我现在也在用I2S DMA采集,现在收到的数据不是错位,而是单步在配置DMA接收长度的地方才能看到有数据,不知道为何?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

47

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部