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外设组成,如下图所示。 对于构成全双工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接口能够支持的最大音频采样率有差异: 图中MCK、CK分别对应I2S总线上的主时钟和总线时钟。其中I2SxCLK获取路径如下图所示(对应于右侧的I2S clocks)。红色线路或者绿色线路可选,本文中以红色线路为例,利用PLL时钟源获取I2SxCLK时钟。 注:下图是STM32F429时钟配置图的部分。不同型号STM32的时钟树存在差异,具体以实际采用型号的时钟树为准。 在遵循I2S标准的实现方案中,采样率公式如下 (注:Fs为采样率,得益于Cube驱动库中的良好API实现,可以直接设置采样率,使用者不需要按照下述公式进行I2SDIV和IDD的计算及配置。): 上述采样率公式不能直接用于PDM输出的MEMS麦克风,通过后一节中介绍可知,PDM麦克风访问只是利用了I2S的数据和时钟线,并且在采集到麦克风位流数据后,需要经过降频操作(PDM转PCM,ST提供了PDM转PCM库支持,更多介绍可参考AN3998),从而获得PCM数据。所以,在这种情况下,主时钟配置为失能,数据位宽需要与帧位宽相同。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |