在低成本的嵌入式系统中实现高效解码的音频电路方案设计

2019年12月02日 作者:Teardown

音频接口日益成为嵌入式设计的期望特性。与此同时,嵌入式系统的用户对音频质量的要求越来越高。对开发人员来说,这带来了如下挑战:如何在基于微控制器的系统中运行 MP3 或其他音频文件。这些系统不仅受资源限制,而且缺少便于开发人员在 Linux 系统上使用的音频接口。因此,解码音频文件并高效地将内容转换为模拟声音,就变得更加困难。

开发人员还必须在硬件或软件解决方案之间谨慎选择,并决定使用哪些元器件,这是因为成本、空间和开发时间都是重要考虑因素。

本文介绍了 AKM Semiconductor、Adafruit、STMicroelectronics 和 Cirrus Logic Inc. 提供的几种硬件和软件解决方案,开发人员可以使用它们来高效地将音频文件添加到其嵌入式设备中。此外,本文还说明了一些“小技巧”,以帮助确保解决方案成功实施。

选择嵌入式音频格式

在深入探讨如何将音频功能集成到嵌入式设备之前,有必要仔细思考为何通常首选 MP3 音频格式。对于嵌入式系统,实际上有三种潜在音频格式可供开发人员使用:脉冲编码调制 (PCM)、WAV 和 MP3。

PCM 是一种未经压缩的无损音频格式,常由音频编解码器用来将音频流的数字表示转换为用户听到的模拟声音。这是一种广受支持的标准格式,可以追溯到 CD 年代。PCM 可以在嵌入式系统中使用,但问题是 PCM 文件通常比 WAV 或 MP3 文件大得多。在资源受限且锱铢必较的设备中,若要支持这种格式,产品可能需要更大的外部存储设备或具有更大存储器的微控制器。因此,除非产品容量低、只有一个音频文件或成本不受限制,否则通常会避免使用 PCM。

WAV 文件也是未经压缩且无损的,这方面与 PCM 非常相似。WAV 文件在嵌入式应用中往往比 PCM 文件更受欢迎,但它同样会占用大量空间。如果嵌入式系统已经有 SD 卡或其他大容量存储设备,那么 WAV 文件可能非常适合。

对于大多数系统,MP3 文件是首选音频格式。MP3 文件是有损的,因此在对音频进行编码时,可能会损失一些音频保真度。但是,MP3 远小于 PCM 或 WAV,因此将音频文件放到设备上的传输和存储时间更短,并且其对存储器的要求也更小。

一旦决定要使用 MP3,开发人员便可选择使用硬件或软件来实现。

基于硬件的 MP3 解码

最快速、最简单的解决方案通常是使用硬件 MP3 解码器,例如 Adafruit 的 681 VS1053B(图 1)。VS1053B 可以通过串行流直接接受 MP3、WAV、OGG 或 MIDI 文件格式并进行解码,开发人员几乎不需要花什么精力。对流进行解码后,VS1053B 利用 18 位数模转换器 (DAC) 将其转换为音频。

图 1:Adafruit 的 VS1053B 是基于硬件的 MP3 解码器芯片,可接收音频流并将其解码为代表性的模拟音频信号。此解决方案所需的软件最少,并且不需要开发人员了解如何解码或转换 MP3 文件。(图片来源:Adafruit)

VS1053B 真正有意思的地方是,与许多其他使用 I2C 的解码器相比,它还能通过简单的 UART 进行调试和控制。此外,它有八个通用输入/输出引脚,可用于读取位、设置开关或状态 LED 之类的应用功能。

对于希望尝试基于硬件的解决方案的开发人员,不必为 VS1053B 定制分线板。Adafruit 提供 381 VS1053B 编解码器 + MicroSD 分线板。除 VS1053B 外,该板还有一个 MicroSD 卡插槽,可用于存储音频文件以进行解码(图 2)。分线板可连接到微控制器,后者通过 SPI 或 SDIO 端口连接到 SD 卡以读出音频文件。音频文件流随后传送到 VS1053B 进行解码。然后,可以根据需要将 VL1053B 的输出导向耳机插孔或扬声器等。

图 2:Adafruit 的 1381 VS1053B 编解码器 + MicroSD 分线板包含必要的硬件,可轻松连接微控制器以播放音频。分线板上有一个板载 MicroSD 卡插槽,微控制器可以通过 SPI 读取卡内容,然后将文件传输到 VS1053B 进行解码。(图片来源:Adafruit)

基于软件的 MP3 解码

一种稍微复杂一点但从物料 (BOM) 角度看成本常常更低的解决方案,是在微控制器上解码 MP3 文件,然后将解码后的文件流式传输到音频编解码器以生成音频。为了实施基于软件的高效解决方案,开发人员需要实现若干关键组件,例如:

  • MP3 解码器库
  • 存储驱动程序
  • 文件系统堆栈
  • 直接存储器访问 (DMA) 驱动程序
  • I2S 驱动程序
  • I2C 驱动程序
  • 音频编解码器驱动程序

乍看之下,软件开发人员似乎有大量工作要做,需要集成许多具有挑战性的软件组件以将 MP3 解码并转换为音频。实现 MP3 解码解决方案的最佳办法是利用一个支持音频编码、解码和常规处理的微控制器平台。

尽管可以在互联网上找到许多开源解决方案,但 STM32 工具链是开发人员可以利用的专业可靠、久经考验的解决方案。STM32 微控制器系列有一个称为 STM32CubeMx 的开发工具,其与 STM32CubeIDE 集成在一起,后者包含音频示例和开发库。这些示例和工具是 STM32CubeMX 附加插件(称为 X-CUBE-AUDIO)的一部分。该插件为 Arm Cortex-M4 类微控制器中的所有 STM32 处理器提供了用于 MP3 解码的音频库。

1 2

相关文章

tracer