加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 应用 > 正文

STM32 I2S的音频应用开发介绍

发布时间:2022-11-06 17:31:04 所属栏目:应用 来源:网络
导读: 在音频开发中,I2S(Inter-IC Sound)接口被广泛采用。大部分 STM32 集成了 I2S 接口。本文主要为了让STM32使用者了解I2S音频接口,及快速实现I2S接口的音频应用开发。首先,对STM32的I2S接

在音频开发中,I2S(Inter-IC Sound)接口被广泛采用。大部分 STM32 集成了 I2S 接口。本文主要为了让STM32使用者了解I2S音频接口,及快速实现I2S接口的音频应用开发。首先,对STM32的I2S接口进行简单介绍,然后描述了几种常见I2S音频应用架构及每种架构音频部分的电路图,最后围绕每种架构给出实现例,以便读者进行参考理解。其中,实现例会围绕STM32CubeMX展开,以便开发者能够参考并快速、简便地实现软件开发。除此之外,在Cube软件包中有I2S外设应用例程,提供了更完善的实现参考。

一、STM32 I2S接口简介

I2S(Inter-IC Sound)是飞利浦公司针对数字音频设备之间的音频数据传输,制定的一种总线标准。

STM32 I2S接口信号线构成如下表:

信号线名

功能

描述

主模式

从模式

MCK

主时钟(系统时钟)

I2S工作于主模式时,可用于为外部设备提供系统时钟。工作于从模式时,不可用。

可选(建议釆用)

不可用

CK

串行时钟

位时钟,对于数字音频的每一位数据。

必须

必须

WS

字段选择

用于切换左右通道,或者作为帧时钟

必须

必须

SD

串行数据

发送或者接收数据

必须

必须

SD_Ext

串行数据

接收或者发送数据 (仅全双工I2S外设支持)

可选(全双工时必须)

可选(全双工时必须)

其中音频应用,SD和SD_Ext信号线可分别配置为发送或者接收。在Cube驱动库中已对其进行封装,例如当配置SD信号线为发送端时,SD_Ext自动被配置为接收端;配置SD为接收端时,SD_Ext自动被配置为发送端。

全双工I2S是由两个I2S外设组成,如下图所示。

1.jpg

对于构成全双工I2S的每个I2S外设,都具有单独的寄存器组,如下表所示(以STM32F413xG/H为例)。在Cube驱动库中,全双工下的两个I2S外设操作已经被封装,用户只需像配置一个全双工SPI一样,对一个全双工I2S的API进行调 用即可。后续会以实例形式进行描述。

STM32 I2S支持四种接口标准和数据格式,如下:

接口标准:I2S标准(Philips标准)、左对齐标准、右对齐标准、PCM标准

数据格式:16位数据@16位帧、16位数据@32位帧、24位数据@32位帧、32位数据@32位帧

可看出,STM32 I2S支持音频分辨率可为16,24和32位。I2S时钟配置及数据格式选择决定了音频采样率,时钟产生架构如下图所示。不同系列STM32 I2S接口能够支持的最大音频采样率有差异:

2.jpg

图中MCK、CK分别对应I2S总线上的主时钟和总线时钟。其中I2SxCLK获取路径如下图所示(对应于右侧的I2S clocks)。红色线路或者绿色线路可选,本文中以红色线路为例,利用PLL时钟源获取I2SxCLK时钟。 注:下图是STM32F429时钟配置图的部分。不同型号STM32的时钟树存在差异,具体以实际采用型号的时钟树为准。

3.jpg

在遵循I2S标准的实现方案中,采样率公式如下 (注:Fs为采样率,得益于Cube驱动库中的良好API实现,可以直接设置采样率,使用者不需要按照下述公式进行I2SDIV和IDD的计算及配置。):

4.jpg

上述采样率公式不能直接用于PDM输出的MEMS麦克风,通过后一节中介绍可知,PDM麦克风访问只是利用了I2S的数据和时钟线,并且在采集到麦克风位流数据后,需要经过降频操作(PDM转PCM,ST提供了PDM转PCM库支持,更多介绍可参考AN3998),从而获得PCM数据。所以,在这种情况下,主时钟配置为失能,数据位宽需要与帧位宽相同。

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!