1、I2C上电过程故障,复位后即正常,有可能是什么原因? 问:如题:I2C1总线上挂有一片24C02(Addr:0xA0)和另一个I2C总线器件(Addr:0xAC),上电后配置完毕I2C1(库操作,100K)后既执行24C02的读写,完毕后,执行另一I2C器件的读写。 现象1:每次断电、再重新上电后,程序一直停在24C02的写过程中,另一片I2C芯片也不响应; 现象2:如果是直接按复位键,则程序可以顺利执行,并且两片I2C器件均可正常访问和读取。 请问:有可能是什么原因造成这样的问题,SCK速度100K,示波器显示SCK为50%占空比。 答:这个问题是,由于上次写E2的时候导致I2C总线错误,而E2这个时候并不能正确的接收数据。解决方法,断电的时候或者操作完毕以后将I2C总线停止,或者断电的时候将E2断电。 答:你的電路啟動的RESET的時間可能不夠。因為你提到按下RESET按鍵之後就都可以正常動作。哪表示你的POWER ON Reset 有問題。 2、STM32的I2S问题 问: 最近有个项目,想用STM32录播音频,不知道STM32的I2S接口能不能和CODEC的I2S接口,同时录音、播放,就是通过CODEC的AD进来的数据同时发送到CODEC的DA输出。有没有相关的参考设计? 答: 这个是可以的!我用了wm8974!用两个i2s口实现!stm32f4是全双工的!只用一个就行了! 3、STM32的I2S问题 问:最近有个项目,想用STM32录播音频,不知道STM32的I2S接口能不能和CODEC的I2S接口,同时录音、播放, 就是通过CODEC的AD进来的数据同时发送到CODEC的DA输出。有没有相关的参考设计?答: 这个是可以的!我用了wm8974!用两个i2s口实现!stm32f4是全双工的!只用一个就行了!很好用有问题可以liufeng5@sohu.com咨询 4、I2C上电过程故障,复位后即正常,有可能是什么原因? 问:I2C1总线上挂有一片24C02(Addr:0xA0)和另一个I2C总线器件(Addr:0xAC),上电后配置完毕I2C1(库操作,100K)后既执行24C02的读写,完毕后,执行另一I2C器件的读写。 现象1:每次断电、再重新上电后,程序一直停在24C02的写过程中,另一片I2C芯片也不响应; 现象2:如果是直接按复位键,则程序可以顺利执行,并且两片I2C器件均可正常访问和读取。 请问:有可能是什么原因造成这样的问题,SCK速度100K,示波器显示SCK为50%占空比。 答:这个问题是,由于上次写E2的时候导致I2C总线错误,而E2这个时候并不能正确的接收数据。解决方法,断电的时候或者操作完毕以后将I2C总线停止,或者断电的时候将E2断电。 5、STM32的I2C奇怪现象 问:如果先把I2C的相关I/O口配置成通用输入接口,然后在配置成I2C的接口,测试I2C功能正常;但是如果把I/O口先配置成通用输出接口,再配置成I2C接口,测试I2C功能就不正确。 答:I2C的IO口必须要配置成对应的功能,也就是输入,这个时候才能工作。这个是I2C模块必须要配置的,就像串口的IO口,也要配置成对应的传输方向。 6、STMF103 I2S 时钟调整方案 问:通常音频的采样速率均为44.1K/S,若有72M的时钟,同时需要MCLK输出,这样根据手册FS只能为46.875这样速率精确度太差,误差达到6.29%,是否可以考虑将时钟将为56M,这样可以将FS调整到43.75,误差为0.8% 答:不知道你用的是16位的还是32位的,根据表的值,你选择16位的,44117.65这个值的误差比较小0.04%。 如果选择22.050K/S,22058.822,16位和32位的误差是0.04%。 7、I2S使用的注意事项 问:I2S使用时需要注意什么?I2S2_WS,I2S2_CK,I2S2_SD,I2S2_MCK如何设置MCK是不是只支持256FS, 对于无法进行编程的I2S解码器,如何设置中断。 最佳答案: 1、小容量和中容量的STM32不支持I2S音频协议。 2、I2S与SPI共用3个引脚: ● SD:串行数据(映射至MOSI引脚),用来发送和接收2路时分复用通道的数据; ● WS:字选(映射至NSS引脚),主模式下作为数据控制信号输出,从模式下作为输入; ● CK:串行时钟(映射至SCK引脚),主模式下作为时钟信号输出,从模式下作为输入。 MCK:主时钟(独立映射),在I2S配置为主模式,寄存器SPI_I2SPR的MCKOE位为’1’时,作为输出额外的时钟信号引脚使用。输出时钟信号的频率预先设置为256 × Fs,其中Fs是音频信号的采样频率。 3、I2S接口与SPI接口使用大致相同的引脚、标志和中断。 |