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

详解I2S协议

1、整体概括

  最近调试了一款音频采集芯片wm8731,包含两路音频输入(ADC)和一路音频输出(DAC),音频芯片与主控芯片通过I2S接口传输ADC采集的数据和DAC驱动数据。

  本文简要讲解一下I2S协议,该协议包含ADCRC(ADC采集数据的左右声道指示信号)、DACRC(DAC采集数据的左右声道指示信号)、BCLK(位数据对齐时钟)、ADCDAT(ADC输出数据)、DACDAT(DAC采集数据)共五个信号。

  WM8731通过ADCRC、BCLK、ADCDAT三个信号传输ADC采集的数据,DACRC、BCLK、DACDAT三个信号传输驱动DAC的数据,ADC和DAC的数据通道共用BCLK信号。ADCDAT和DACDAT均在BCALK的下降沿变化,在BCLK上升沿保持不变。

  WM8371的I2S接口包含主机和从机两种模式,两种模式的区别在于时钟(BCLK)和声道指示信号(ADCLRC、DACLRC)由主控芯片还是WM8371提供。

  图1是WM8371的主机模式,时钟和声道指示信号均由WM8371提供。

在这里插入图片描述

图1 主机模式

  下图是WM8731的从机模式,时钟和声道指示信号均由WM8371提供,通过配置内部寄存器实现模式选择,使用FPGA作为主控时,两种模式均可使用,后续详解。

在这里插入图片描述

图2 从机模式

2、I2S协议的四种模式

  I2S总线根据ADCDAT和DACDAT的数据变化,分为左对齐,右对齐,I2S及DSP共四种模式,其实就是四种数据传输时序,推荐使用左对齐模式或者I2S模式。

2.1、左对齐模式

  对应时序如下所示,ADCDAT在ADCLRC高电平时传输左声道的数据,ADCDAT在ADCLRC低电平时传输右声道数据,ADCDAT先传输高位数据。ADCLRC的频率等于配置的ADC采样频率fs。

  ADCDAT在BCLK的前n个时钟的下降沿传输数据,n表示ADC采集数据的位宽。

在这里插入图片描述

图3 左对齐模式

  注意BCLK的频率必须大于等于ADC采样率乘以ADC数据位宽乘以2。当WM8371作为主机时,BCLK由WM8371提供,用户不能设置其频率。当WM8371作为从机时,BCLK由用户提供,必须满足频率关系。

  注意BCLK的下降沿与ADCLRC/DACLRC的跳变沿对齐,而DACDAT/ADCDAT的第一个数据(MSB)在BCLK下降沿开始传输,即DACDAT/ADCDAT与ADCLRC/DACLRC左边对齐,因此被称为左对齐模式。

  在实测主机模式时发现BCLK的周期可能存在占空比不是百分之五十的情况,在设计时需要注意。

2.2、右对齐模式

  因为BCLK的频率满足大于等于ADCLRC/DACLRC频率乘以ADC/DAC数据位宽乘以2即可,导致BCLK在ADCLRC/DACLRC高电平或低电平时的时钟个数可能大于ADC/DAC数据位宽,就存在无效时钟。

  此时数据起始位与ADCLRC/DACLRC边沿对齐,则是左对齐模式,如果数据的结束位置与ADCLRC/DACLRC边沿对齐,则是右对齐模式,右对齐模式时序如下。

在这里插入图片描述

图4 右对齐模式

  DACDAT/ADCDAT依旧在BCLK下降沿先传输高位数据,LSB与ADCLRC/DACLRC边沿对齐。

  这种模式不好编写适配多种采样率的发送驱动,因为主机模式下不同采样率时ADCLRC/DACLRC电平对应的BCLK个数不同,通用的驱动会比较麻烦,因此一般不推荐使用这类驱动时序。该模式不支持32位ADC和DAC数据位宽。

2.3、I2S模式

  I2S模式时序如下所示,与左对齐模式类似,但ADCDAT/DACDAT在ADCLRC/DACLRC边沿后的第一个BCLK不传输数据,从BCLK的第二个下降沿传输最高位数据。

在这里插入图片描述

图5 I2S模式

  该模式使用起来也比较方便,推荐使用。

2.4、DSP模式

  DSP模式时序如下图所示,每次传输数据LRCLK只持续一个BCLK周期,其余时间保持电平。

  LRCLK的下降沿与BCLK的下降沿对齐,ADCDAT/DACDAT开始传输n位左声道数据,然后传输n位右声道数据,ADCDAT/DACDAT在剩余的BCLK周期无效。

在这里插入图片描述

图6 DSP模式

  四种模式下LRCLK和BCLK的频率都是遵守相同规则的,且ADCDAT/DACDAT均在BCLK的下降沿传输数据,在BCLK上升沿期间数据保持不变。

3、WM8371的时序参数

  WM8731的ADC和DAC的数据位宽始终为24位,但在I2S或左对齐模式下,数字音频数据可编程为16位、20位、24或32位。即寄存器编程音频数据位宽为16位时,ADCDAT会将ADC采集的高16位数据输出,低8位数据舍弃。如果寄存器编程音频数据位宽为32位时,ADCDAT会把ADC采集的24位数据作为高位,低八位补零,达到32位数据输出。

  主机模式下的时序参数如下所示,需要重点关注下图红框中的两个时序参数。

在这里插入图片描述

图7 主机模式时序参数

  两个时序参数如下表所示,DACDAT必须在BCLK上升沿前后至少10ns内保持稳定

在这里插入图片描述

图8 时序参数

  从机模式的时钟信号和声道指示信号都由主控芯片提供,相关的时序参数会多一些,如下图所示。

在这里插入图片描述

图9 从机模式时序参数

  BCLK的最小周期为50ns,即接口数据传输的最大频率为20MHz,另外DACLRC/ADCLRC和DACDAT在BCLK上升沿前后的10ns内必须保持不变,WM8731才能稳定采集对应信号的状态。

在这里插入图片描述

图10 时序参数

  本文主要讲解I2S时序,后文会详解WM8371芯片的寄存器配置及电路原理图设计。文中图片均来自WM8371芯片手册,可以在公众号后台回复“WM8371手册”(不包括引号)获取。


  如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!

  如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!


http://www.kler.cn/a/382383.html

相关文章:

  • 群控系统服务端开发模式-应用开发-上传工厂开发
  • 第9天:网络编程-补充材料——‘MainActivity.kt‘解读
  • 昆仑通态触摸屏学习路程
  • 达梦数据守护集群_动态增加实时备库
  • CesiumJS 案例 P15:检测标记、鼠标点击移动标记、鼠标拖动标记
  • [CKS] K8S Admission Set Up
  • Istio流量镜像测试
  • 前端跨域问题全解:JSONP、CORS 与代理服务器
  • 若依-侧边栏开关按钮禁用,侧边栏始终保持展开
  • 云计算虚拟机批量管理软件——未来之窗行业应用跨平台架构
  • 【c++丨STL】vector的使用
  • 2024年11月软考考前注意事项
  • 呼叫中心如何安排用户回访?
  • 【数据库】elasticsearch
  • 前端_安裝 json server
  • 记录新建wordpress站的实践踩坑:wordpress 上传源码新建站因权限问题导致无法访问、配置新站建站向导以及插件主题上传配置的解决办法
  • 【LeetCode】【算法】139. 单词拆分
  • 推荐一款非常好用的C/C++在线编译器
  • asp.net+uniapp养老助餐管理系统 微信小程序
  • JVM进阶调优系列(8)如何手把手,逐行教她看懂GC日志?| IT男的专属浪漫
  • webworker
  • 如何使用uniswap v2 获取两个代币的交易对池子
  • 实习冲刺Day15
  • golang学习3
  • leetcode206. Reverse Linked List
  • 理解 Transformer 中的编码器-解码器注意力层(Encoder-Decoder Attention Layer)