STM32F407作为I2S从机,位时钟和同步时钟有外部codec提供,使用DMA传输数据。
播放wav文件时的,操作顺序如下:
1.打开文件,解析文件头信息;
2.配置MCU端I2S;
3.设置并启动DMA,循环模式;
4.设置外部codec
芯片,产生位时钟和同步时钟;
注:2,4步需要根据文件进行设置。
5.在DMA传输过半中断和传输完成中断中,读取wav文件的音频数据,填充DMA缓冲区;
6.播放结束后,关闭DMA和I2S;
7.关闭codec芯片。
播放下一曲文件时,重复以上7个步骤。
遇到的问题是:播放第一个wav文件,完全正常;播放第二个或后面的文件时,出现沙沙声或者声音变大了,
用示波器观察到数据错位了。经多次观察,错位的位数不固定。
请问有高手遇到过类似的问题吗?
STM32作为I2S从机时,由于位时钟和同步时钟都是由外部COCEC芯片提供,所以可能会出现数据不对齐的情况。这时候SPI状态寄存器SR的bit8会被硬件置1,也就是说STM32是知道出现格式错误的,只是没有自动完成重新对齐。
LRCK是用于左右声道的同步的。比如:按照飞利浦标准I2S格式,LRCK下降沿后延迟1个BCLK,开始传输左声道数据;LRCK上升沿后延迟1个BCLK,开始传输右声道数据。这是不应该出现数据错位的。所以,这可以算是STM32的I2S的一个BUG吧。
一周热门 更多>