[STM32F1] STM32的USB音频 单片机I2S时钟比USB输入时钟快2%,有没有办法解决?

[复制链接]
3562|6
 楼主| 我是前行的狮子 发表于 2015-5-16 17:46 | 显示全部楼层 |阅读模式
单片机用的是STM32F103 就是F3 discovery, 72M时钟
USB这边只管接收 96K 16bit 双声道数据,因为电脑这边始终比较准,数据都是按时传来


I2S用的96K 16bit 2声道,但是事实上因为分频不够准 大概是97K的频率来发,结果导致大概20ms就有0.37ms的断档时间。。。
除了外接时钟源之外有啥办法解决吗?
香水城 发表于 2015-5-26 17:47 | 显示全部楼层
有两个大的方向:

第一:在MCU和PC之间的USB通信,增加一个control pipe来告知主机加快或者减慢数据的下传;但是取决于PC驱动是否支持

第二:软件算法:
ST提供的两个库,一个是比较简单的,根据输入(USB)输出(I2S)的快慢,定期增加或者去掉若干采样;还有一个比较复杂的库,SRC算法,可以非常好效果,但是对Flash、ram的占用率会比前面简单库占用的多,并且也会占用CPU额外的workload。这两种算法官网上没有发布,需要找ST的市场或者销售人员。
john_lee 发表于 2015-5-26 18:05 | 显示全部楼层
easy,设置数据缓冲,根据缓冲的数据存量来动态微调I2S的时钟,以改变I2S的吞吐率。
musich 发表于 2015-5-28 02:04 | 显示全部楼层
香水城 发表于 2015-5-26 17:47
有两个大的方向:

第一:在MCU和PC之间的USB通信,增加一个control pipe来告知主机加快或者减慢数据的下传 ...

定期增加或者去掉若干采样, 声音就变调了.
戈卫东 发表于 2015-5-28 06:27 | 显示全部楼层
时钟无法严格同步,声音失真无法避免。
rgwan 发表于 2017-1-26 10:29 来自手机 | 显示全部楼层
用UAC2协议。UAC1无法避免。
yuanbuqi 发表于 2017-6-8 11:25 | 显示全部楼层
楼主您好,我也遇到同样的问题,请问找到解决办法了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

16

帖子

0

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