STM32 USB 设备音频数据流

2023-02-27  

音频数据流的应用

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

典型应用举例

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

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

同步问题

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

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

主要问题

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

  • 由于温度、电压的不同,引起时钟信号的变化,会产生一些Jitter;

  • 时钟本身的精准度会产生一些Drift;

  • 两个时钟连接在一起的相位可能相反或相同;

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

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

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

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



主要改善

1. 非USB改善:

  • 精准的时钟:可以用高精度的时钟给I2S提供更加准确的采样时钟。

  • 深的存储BUFFER:增加存储的BUFFER,比如我们有足够的RAM,可以先存储大量的数

据。

  • DMA:用DMA方式可以去减少复制和处理的时间。

  • 减少USB的复制时间:通过优化USB的库可以减少部分USB从USB RAM复制到用户RAM

的时间。

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

况。

2. USB同步机制:

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

同步机制比较


STM32同步实现


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

提供:

  • USB音频数据流的应用:USB耳机、喇叭

  • 多种同步方式:

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

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

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

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

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

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

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

STM32异步机制


应得MCU负荷


应用占有的资源


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。