stm32收到的数据不完整_STM32 USB 设备音频数据流

音频数据流的应用

音频数据流是没有任何压缩的音频数据,我们可以直接通过I2S传输到数字功放,也可以对这些数字音频进行处理,比如EQ音量控制、音质补偿等等。

典型应用举例

e09d9484de98353c36814a10eabe89b7.png

首先是PC,然后PC通过USB数据线连接到MCU,MCU再通过I2S输出到功放,最后连接到喇叭或耳机。

当然,还有GUI的部分显示可以控制,同时还可以通过麦克风把音频传输到PC进行刻录或保存。

同步问题

76aff7e3c4b865a56fcbdbfee7943403.png

USB外设时钟、I2C外设时钟和外部功放时钟是同步的,因为它们共用一个时钟域,但不能同步PC的时钟域。

这些不同的时钟域将会造成音频的不同步,出现断音或丢失部分音频。

主要问题

1. USB的参考时钟(SOF)并不跟系统时钟同步,主要表现在三个方面:

  • 由于温度、电压的不同,引起时钟信号的变化,会产生一些Jitter;
  • 时钟本身的精准度会产生一些Drift;
  • 两个时钟连接在一起的相位可能相反或相同;

2. 我们在传输的过程中会预先开辟一些buffer去存储部分音频数据,buffer的读取、处理时间会有一点延迟,也会造成音频的不同步。

那这些时钟的不同步具体会造成什么样的问题呢?

1. 如果PC的时钟相对MCU慢,那么USB收到音频数据就会慢于I2S所消耗的音频数据,就会造成I2S去取数据音频的时候,buffer的数据还没有准备好而出现下溢。

4bb3a6805c79590dd9245c95ccec85b2.png

2. 如果PC的时钟相对MCU快,那么USB收到音频数据就会快于I2C所消耗的音频数据,就会造成当USB接收到音频数据的时候buffer的数据还没有被取走而出现复写的情况。

42d3c1927c7553b5bdb43165ef5c185e.png

主要改善

1. 非USB改善:

  • 精准的时钟:可以用高精度的时钟给I2S提供更加准确的采样时钟。
  • 深的存储BUFFER:增加存储的BUFFER,比如我们有足够的RAM,可以先存储大量的数

据。

  • DMA:用DMA方式可以去减少复制和处理的时间。
  • 减少USB的复制时间:通过优化USB的库可以减少部分USB从USB RAM复制到用户RAM

的时间。

  • 基于SOF信号,同步所有的消耗音频数据:这将造成丢失部分音频数据或出现断音的情

况。

2. USB同步机制:

USB数据速率控制机制(同步/异步/高级)

同步机制比较

def37586ccd21cf02e0cb60057b4ac5d.png

STM32同步实现

7c32458d998a7a34e49c1613f2ee4481.png

STM32 USB设备的音频数据流的例程是一个完整的软件库。

提供:

  • USB音频数据流的应用:USB耳机、喇叭
  • 多种同步方式:

外部时钟同步:运用一个外部可以动态配置的PLL,根据在STM32时钟域和USB主机

时钟域的不同,它允许动态并精准地调节产生I2S的时钟频率

PIPE反馈:USB通过一个特殊的端点去告诉主机现在需要的数据个数,它有在USB 2.0

规范里面定义,但是并没有在音频规范里面定义。

增加/减少采样个数:这样会播放流畅,但会丢失一批音频数据或者出现断音的情况。

SRC同步:SRC是一个把采样率是X的buffer转变成采样率是Y的buffer的一个模块,

它不会丢失数据而仅仅是改变数据,这种转换是基于查补和过滤的方式。

STM32异步机制

650ec21f19a273871e19fa3ff927563f.png

应得MCU负荷

541760adb2d7593351d66e4e72f0822f.png

应用占有的资源

5d1d96be48bcfee2add270775e68dad3.png

af45a8bbb91e58ea614dc95b6da8e5ed.png

点击链接观看更多相关课程

电堂科技​c.51diantang.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值