当前位置: 首页 > news >正文

【STM32开发之寄存器版】(十五)-数字音频接口I2S基础知识

一、前言

在STM32F103ZET6这种大容量芯片上,SPI接口可以配置为支持SPI协议或者支持I2S音频协议。SPI接口默认工作在SPI方式,可以通过软件把功能从SPI模式切换到I2S模式。本文将主要参考NXP UM11732 I2S总线协议 ,介绍有关数字音频接口I2S的基础知识。

二、I2S简介

I2S是一种3引脚的同步串行接口通讯协议。它支持四种音频标准,包括飞利浦I2S标准MSB和LSB对齐标准以及PCM标准。它在半双工通讯中,可以工作在主和从2种模式下。当它作为主设备时,通过接口向外部的从设备提供时钟信号。I2S协议主要用于音频处理器、音频解码器、蓝牙音频设备、多声道音频系统等领域。

三、基本串行总线需求

I2S总线只需处理音频数据,而其他控制信号则单独传输(如使用I2C传输)。为了尽量减少所需的引脚数量,I2S使用了三线串行方案,其中包括1条左右声道分时复用数据传输线路,1条字选择线路和1条同步时钟线路。由于发送器和接收器在数据传输时采用相同的时钟信号,因此作为控制器的发送器必须产生位时钟、字选择信号以及数据。在多发送器和接收器的电路中,需要使用一个系统控制器来控制各个集成电路之间的数字音频数据流。不同的电路拓扑如下图所示:

四、时序逻辑

I2S时序逻辑图如下所示:

字选择信号表示正在传输的信道(左右声道之一):

- WS = 0;通道 1(左);

- WS = 1;通道 2(右)。

WS信号可以在串行时钟的上升沿或下降沿发生变化。在接收端,该信号在时钟信号的上升沿锁存。在传输MSB之前,WS线会翻转电平,用于串行数据的同步。此外,它还能使接收端存储上一个字,清除并开始接受下一个字。

五、音频数据传输协议标准 

随着技术的发展,在统一的I2S硬件接口下,出现了多种不同的数据格式,可分为左对齐(MSB)标准、右对齐(LSB)标准、I2S Philips标准、PCM(脉冲编码调)音频传输协议。

STM32f1xx系列控制器I2S的数据寄存器只有16bit,并且左右声道数据一般是紧邻传输,为正确得到左右两个声道数据,需要软件控制数据对应通道数据写入或读取。另外,音频数据的量化位数可能不同,控制器支持16bit、24bit和32bit三种数据长度,因为数据寄存器是16bit的,所以对于24bit和32bit数据长度需要发送两个。为此,可以产生四种数据和帧格式组合:

  • 将16位数据封装在16位帧中

  • 将16位数据封装在32位帧中

  • 将24位数据封装在32位帧中

  • 将32位数据封装在32位帧中

当使用32位数据包中的16位数据时,前16位(MSB)为有效位,16位LSB被强制清零,无需任何软件操作或DMA请求(只需一个读/写操作)。如果程序使用DMA传输(一般都会用),则24位和32位数据帧需要对数据寄存器执行两次DMA操作。24位的数据帧,硬件会将8位非有效位扩展到带有0位的32位。对于所有数据格式和通信标准而言,始终会先发送最高有效位(MSB优先)。

5.1 I2S Philips标准

使用WS信号来指示当前正在发送的数据所属的通道,为0时表示左通道数据。 该信号从当前通道数据的第一个位(MSB)之前的一个时钟开始有效。发送方在时钟信号(CK)的下降沿改变数据, 接收方在上升沿读取数据。WS信号也在SCK的下降沿变化。下图为24bit数据封装在32bit帧传输波形。正如之前所说, WS线频率对于采样频率FS,一个WS线周期包括发送左声道和右声道数据, 在图中实际需要64个CK周期来完成一次传输。

5.2 左对齐标准

在WS发生翻转同时开始传输数据,下图为24bit数据封装在32bit帧传输波形。 该标准较少使用。注意此时WS为1时,传输的是左声道数据,这刚好与I2S Philips标准相反。

5.3 右对齐标准

与左对齐标准类似,下图为24bit数据封装在32bit帧传输波形。

5.4 PCM标准

PCM即脉冲编码调制,模拟语音信号经过采样量化以及一定数据排列就是PCM了。WS不再作为声道数据选择。它有两种模式,短帧模式和长帧模式,以WS信号高电平保持时间为判别依据,长帧模式保持13个CK周期,短帧模式只保持1个CK周期,可以通过相关寄存器位选择。如果有多通道数据是在一个WS周期内传输完成的,传完左声道数据就紧跟发送右声道数据。下图为单声道数据16bit扩展到32bit数据帧发送波形。

六、总结 

本文主要介绍了I2S协议及其4种标准。由于正点原子STM32F103ZET6精英板不包含音频CODEC芯片,故不再作此实验,后续有空可以换一款芯片(如ESP32)来做。


http://www.mrgr.cn/news/65352.html

相关文章:

  • clickhouse运维篇(三):生产环境一键生成配置并快速部署ck集群
  • Java环境下配置环境(jar包)并连接mysql数据库
  • 软件测试之道:软件测试概述
  • 采用SpeedL模式控制UR5e机器人
  • 【小白学机器学习29】 概率统计与图形 ( hist, bar, pie , box ,scatter ,line)
  • 软件项目管理 之 6抓6放
  • 查看 Nginx 安装目录与配置文件位置的方法
  • 打开cmd窗口并执行cmd命令的Windows脚本(.bat文件)
  • 杭州德沃医美美妆美业精油美容si设计手册展厅设计公司
  • 什么开放式耳机好用?开放式耳机品牌十大排名揭秘误区
  • 产品让在Cesium中绘制迁徙线,把我00后的小同事给蚌埠住了~
  • Swift 开发教程系列 - 第2章:Swift 基础语法
  • 基于STM32的智能手环设计
  • 学习记录:js算法(八十三):全排列
  • 表件数count使用总结
  • 新闻稿件管理:SpringBoot框架技术突破
  • Java复习32(PTA)
  • 【智能算法应用】鹈鹕优化算法求解二维路径规划问题
  • 布朗运动
  • 大数据挖掘有哪些技术要点?
  • Fork突然报错
  • 详解UDP协议
  • python-web开发神器:FastAPI详细使用(简单易用)
  • 一个小程序如何对接多个收款账户?
  • c++基础12比较/逻辑运算符
  • Python元组和列表在“用户信息管理”项目中的应用