WM8978 —— 带扬声器驱动程序的立体声编解码器(7)

news2024/11/15 22:51:42

接前一篇文章:WM8978 —— 带扬声器驱动程序的立体声编解码器(6)

十、音频接口

WM8978具有一个标准的音频接口,支持立体声数据在芯片之间的传输。该接口是一个3线标准音频接口,支持多种音频数据格式,包括I2S、DSP/PCM模式(其中发送LRC同步加2个数据打包字的突发模式)、MSB-First、left justified和MSB-First、right justified,并且可以工作在主模式和/或从模式下。

1. 相关引脚

WM8978中与音频接口相关的引脚分为两类:一类是控制接口(CONTROL INTERFACE),另一类是数据接口(I2S / PCM AUDIO INTERFACE)。

(1)控制接口(CONTROL INTERFACE)

为了实现对所有功能的完全软件控制,WM8978提供了2线或3线控制接口的选择。它是完全兼容的,是各种工业标准微处理器、控制器和DSP的理想合作伙伴。

通过MODE引脚在模式之间进行选择。在2线模式中,设备的地址固定为0011010。

控制接口相关电路结构如下(下图红色框中部分):

相关引脚如下:

(2)数据接口(I2S / PCM AUDIO INTERFACE)

WM8978有一个标准的音频接口,支持立体声数据在芯片之间的传输。该接口是一个3线标准音频接口,支持多种音频数据格式,包括I2S、DSP/PCM模式(传输LRC同步加2个数据压缩字的突发模式)、左对齐的MSB First和右对齐的MSBFirst,并且可以工作在主模式或从模式下。

数据接口相关电路结构如下(下图红色框中部分):

十一、I2S相关知识补强

以下内容参考:

一文搞懂I2S通信总线_i2s读出来的数据全是一样的-CSDN博客

stm32 VM8978 音乐播放_wm8978-CSDN博客

【I2S】数字音频接口—I2S总线协议基本概念 - 知乎

1. I2S概述

I2C和I2S都是由Philips公司(2006年迁移到NXP)发布的串行总线,I2S可以认为是I2C的一个变种。

IIC的英文全称为Inter-Integrated Circuit,中文译为内置集成电路(总线),也可写作I2C。而IIS的英文全称为Inter-IC Sound,中文译为集成电路内置音频总线,也可写作I2S。

I2S是一种广泛应用于数字音频设备之间的数字音频传输的串行总线接口标准。它最初由飞利浦(Philips)公司开发,用于解决在集成电路之间传输音频数据的问题。I2S采用了独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。

I2S总线的特点如下:

  • 支持全双工和半双工模式
  • 支持主、从模式设置
  • 8位可编程线性预分离器,可实现精确的音频采样频率(8~192KHz)
  • 支持16位/24位/32位数据格式
  • 数据包帧固定为16位(仅16位数据帧)或32位(可容纳16/24/32位数据帧)
  • 可编程时钟极性
  • 支持MSB对齐(左对齐)、LSB对齐(右对齐)飞利浦标准和PCM标准等I2S标准
  • 支持DMA数据传输(16位宽)
  • 数据方向固定为MSB在前
  • 支持主时钟输出(固定为256*fs,fs即音频采样率)

以下是正点原子对于I2S的介绍:

I2S也叫IIS,即Inter IC Sound总线,又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。该总线专责于音频设备之间的数据传输,广泛应用于各种多媒体系统。它采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。

2. I2S应用场景

I2S协议定义了音频数据的传输格式、时序和控制信号。在工作中音频采集和输出,AD和主芯片之间的通信均是通过I2S进行通信的,其应用场景如下:

I2S的应用示意图
  • I2S RX方向

麦克风在机械振动下将声音信号转变为电压信号,电压信号经过放大等处理,给到ADC采样,将模拟信号转化为数字信号;音频在ADC与DSP之间的传输协议就是使用的I2S协议。如上图中左半部分所示。

  • I2S TX方向

数字信号经过编码、存储、压缩等技术后,发送给解码器-DAC(DSP、专用解码器),将数字信号还原为模拟信号,最后给到喇叭完成声音/音频的播放。音频在DAC与DSP之间的传输就是使用I2S协议。如上图中右半部分所示。

3. I2S协议中常见的参数

  • 位宽(Word Length)

位宽指定每个采样数据的位数,通常为16位或32位。较大的位宽可以提供更高的分辨率和动态范围。

  • 时钟极性(Clock Polarity)

时钟极性确定了数据位传输的时钟沿。根据具体的I2S设备和系统设置,可以定义在时钟上升沿或下降沿开始数据传输。

  • 帧同步极性(Frame Sync Polarity)

帧同步极性确定了帧同步信号的有效电平。帧同步信号指示音频数据的帧起始和结束位置。

  • 传输格式(Data Format)

传输格式定义了音频数据的编码方式,传输格式还可以指定数据的顺序,如左声道先传输还是右声道先传输。

4. I2S基本信号

I2S接口通常由三类信号线组成,分别是:

  • 时钟线(Continues Serial Clock,SCK)

SCK(也叫SCLK)线提供了同步音频数据传输的时钟信号。确定了数据传输的速度和时序。该时钟也称为Bit Clock(BCLK)。SCK也称为位时钟BCLK,其与数字音频数据一一对应。

SCK的频率=2x采样频率x位宽

在WM8978中,对应的引脚为:

  • 左/右声道时钟线(Left-Right Clock,LRCK)

也称为帧时钟(也叫WS)、帧同步信号,用于切换左右声道数据,1为右声道数据,0左声道数据。LRCK线指示了当前传输的是左声道的音频数据还是右声道的音频数据。

LRCK的频率=采样频率

在WM8978中,对应的引脚为:

  • 数据线(Serial Data,SD)

SD线也称为SDATA,用于传输实际的音频数据(以二进制补码形式)。TX方向为:Serial Data Out(SDOUT);RX方向为:Serial Data In(SDIN)。数据的位宽可以根据具体应用而变化,通常为16位或32位。

另一种讲法:

  • SDATA(SD)

就是用二进制补码表示的音频数据。最高位拥有固定的位置,而最低位的位置则是依赖于数据的有效位数。

在WM8978中,对应的引脚为:

除了以上三类信号线外,I2S总线还有一根系统时钟线。

  • 主时钟(Master Clock,MCLK)

MCLK也叫系统时钟(Sys Clock),一般为了使系统间能够更好地同步时增加MCLK信号,MCLK的频率 = 128或者256或者512 * 采样频率;

在WM8978中,对应的引脚为:

5. I2S协议接口时序

6. I2S工作模式

I2S工作模式可以是主模式(Master Mode)或从模式(Slave Mode)。两者唯一的区别是:Master Mode提供时钟信号(SCK)和帧同步信号(LRCK)。如下图所示,一共存在三种工作模式,分别是:

  • 发射器(transmitter)为Master,接收器(receiver)为Slave

此时由发射器提供SCK和LRCK。

  • 接收器(receiver)为Master,发射器(transmitter)为Slave

此时由接收器提供SCK和LRCK。

  • 发射器(transmitter)和接收器(receiver)均为Slave

7. I2S数据传输模式

I2S接口标准中,存在三种数据传输模式,分别是:飞利浦标准模式(I2S mode),左对齐(Left Justified)和右对齐(Right Justified)三种传输模式。

也即,在统一的I2S硬件接口下,出现了多种不同的I2S数据格式,可分为:I2S Philips标准、左对齐(MSB)标准和右对齐(LSB,也叫日本格式、普通格式)标准。

(1)飞利浦标准(I2S)模式

I2S Philips标准时序如下图所示:

其主要特点如下:

  • LRCK(左右声道选择信号)

LRCK信号用于指示当前数据帧是左声道数据还是右声道数据。飞利浦格式中,当LRCK为低时,表示当前传输的数据是左声道数据;当LRCK为高时,表示当前传输的数据为右声道数据。

  • SCK(位时钟)

数据传输的时钟信号。在SCK下降沿发送数据,在SCK上升沿采样数据。

  • Data Delay(数据延迟)

发送的有效数据相对于LRCK的跳变沿(从0到1或从1到0)延迟一个时钟周期。

  • MSB(最高位优先)

数据发送从MSB开始,数据MSB与LRCK delay 1个SCK的边沿对齐。

以上特点综述如下:

使用LRCLK信号表示当前正在发送数据所属的声道,LRCLK为“1”表示正在传输的是右声道的数据,为“0”则表示正在传输的是左声道的数据。LRCLK信号从当前声道数据的第一个位(MSB)之前的一个时钟开始有效。

LRCLK信号在BCLK(即SCK)的下降沿变化,发送方在时钟信号BCLK的下降沿改变数据,接收方在时钟信号BCLK的上升沿读取数据。正如上文所说,LRCLK频率等于采样频率Fs,一个LRCLK周期(1/Fs)包括发送左声道和右声道数据。

对于这种标准I2S格式的信号,无论有多少位有效数据,数据的最高位总是出现在LRCLK变化(也就是一帧开始)后的第2个BCLK脉冲处。这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。

(2)左对齐(Left Justified)模式

左对齐(MSB)标准时序如下图所示:

其主要特点如下:

  • LRCK(左右声道选择信号)

LRCK信号用于指示当前数据帧是左声道数据还是右声道数据。左对齐格式中,当LRCK为高时,表示当前传输的数据为左声道数据;当LRCK为低时,表示当前传输的数据为右声道数据。

正好与飞利浦标准模式相反。

  • SCK(位时钟)

数据传输的时钟信号。在SCK下降沿发送数据,在SCK上升沿接收数据。

  • 无Data Delay(无数据延迟)

发送的有效数据相当于LRCK跳变沿(从0到1或从1到0)不延迟。

  • MSB(最高位优先)

数据发送从MSB开始;数据MSB与LRCK跳变沿对齐。

左对齐(MSB)标准较少使用,在LRCLK发生翻转的同时开始传输数据,注意LRCLK为1时,传输的是左声道数据,LRCLK为0时,传输的是右声道数据,这刚好与I2S Philips标准相反。

(3)右对齐(Right Justified)模式

右对齐(LSB)标准时序如下图所示:

其主要特点如下:

  • LRCK(左右声道选择信号)

LRCK信号用于指示当前数据帧是左声道数据还是右声道数据。右对齐格式中,当LRCK为高时,表示当前传输的数据为左声道数据;当LRCK为低时,表示当前传输的数据为右声道数据。

正好与飞利浦标准模式相反。

  • SCK(位时钟)

数据传输的时钟信号。在SCK下降沿发送数据,在SCK上升沿接收数据。

  • 无Data Delay(无数据延迟)

发送的有效数据相当于LRCK跳变沿(从0到1或从1到0)不延迟。

  • MSB(最高位优先)

数据发送从MSB开始;数据LSB与LRCK跳变沿对齐。

右对齐(Right Justified)模式下,声音数据LSB传输完成的同时,LRCLK完成第二次翻转(刚好是LSB和LRCLK是右对齐的,所以称为右对齐标准)。注意LRCLK为1时,传输的是左声道数据,LRCLK为0时,传输的是右声道数据,这刚好与I2S Philips标准相反。

更多内容请看下回。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1544916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 简单模拟实现 STL 中的 list 与 queue

目录 一,list 1, list 的节点与迭代器 2,list 的数据结构、一些简单的功能、构造函数 3,list 的对元素操作 4,C 11 的一些功能 5,完整代码: 二,queue 一,list std…

Visual Studio 小更新:改善变量的可见性

在 Visual Studio 2022 17.10 预览版 2 中,我们改善了一些小功能,例如:在调试版本中,变量窗口现已可以显示调用堆栈中任意帧的局部变量。 如需体验此功能,请直接安装最新预览版本,就可以知道是怎么一回事儿…

CSS及javascript

一、CSS简介 css是一门语言&#xff0c;用于控制网页的表现。 cascading style sheet:层叠样式表 二、css的导入方式 css代码与html代码的结合方式 &#xff08;1&#xff09;css导入html有三种方式&#xff1a; 1.内联样式&#xff1a;<div style"color:red&quo…

mac 系统如何生成秘钥

1.打开终端&#xff0c;输入 cd ~/.ssh 进入.ssh目录&#xff0c;输入 ls 检查是否已经存在SSH密钥。如果看到类似 id_rsa.pub 的文件&#xff0c;说明已经有一对公钥和私钥&#xff0c;不用新建&#xff0c;直接查看就可以&#xff0c;如果没有需要生成新的密钥。 2.在终端输…

Unity 视频组件 VideoPlayer

组件添加&#xff1a; 在自己定义的组件下&#xff08;例如&#xff1a;Panel&#xff09; 点击 Inspector 面板中的 AddComponent &#xff0c;输入“VideoPlayer”。 资源 这里 视频资源有两种形式&#xff0c;第一种是 VideoClip &#xff0c;需要将视频文件拖拽到该属性字段…

【C语言】【Leetcode】88. 合并两个有序数组

文章目录 一、题目二、思路再思考 一、题目 链接: link 二、思路 这题属于简单题&#xff0c;比较粗暴的做法就是直接比较两个数组&#xff0c;先把第二个数组加到第一个的后面&#xff0c;如何冒泡排序&#xff0c;这种方法简单粗暴但有效&#xff0c;可是不适用于这题&…

政安晨:【Keras机器学习实践要点】(二)—— 给首次接触Keras 3 的朋友

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 介绍 Keras 3是一个深度学习框架&#xff0…

牛客网BC-33 统计成绩(数组排序思想)

题目如下 --------------------------------------------------------------------------------------------------------------------------------- 思路&#xff1a;以数组形式输入&#xff0c;并将数组顺序&#xff08;或者逆序&#xff09;排序&#xff0c;最后输出最大值最…

Mysql数据库:日志管理、备份与恢复

目录 前言 一、MySQL日志管理 1、存放日志和数据文件的目录 2、日志的分类 2.1 错误日志 2.2 通用查询日志 2.3 二进制日志 2.4 慢查询日志 2.5 中继日志 3、日志综合配置 4、查询日志是否开启 二、数据备份概述 1、数据备份的重要性 2、备份类型 2.1 从物理与…

2.6 IDE(集成开发环境)是什么

IDE&#xff08;集成开发环境&#xff09;是什么 IDE 是 Integrated Development Environment 的缩写&#xff0c;中文称为集成开发环境&#xff0c;用来表示辅助程序员开发的应用软件&#xff0c;是它们的一个总称。 通过前面章节的学习我们知道&#xff0c;运行 C 语言&…

蓝桥杯单片机快速开发笔记——利用定时器计数器设置定时器

一、基本原理 参考本栏http://t.csdnimg.cn/iPHN0 二、具体步骤 三、主要事项 如果使用中断功能记得打开总中断EA 四、示例代码 void Timer0_Isr(void) interrupt 1 { }void Timer0_Init(void) //10毫秒12.000MHz {AUXR & 0x7F; //定时器时钟12T模式TMOD & 0xF0;…

微服务day06 -- Elasticsearch的数据搜索功能。分别使用DSL和RestClient实现搜索

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c;一…

iMazing2024功能强大的iPhone和iPad管理工具

iMazing是一款功能强大的iPhone和iPad管理工具&#xff0c;确实可以作为iTunes的替代品进行数据备份。以下是一些关于iMazing的主要特点和功能&#xff1a; 设备备份&#xff1a;iMazing可以备份iOS设备上的所有数据&#xff0c;包括照片、视频、音乐、应用程序等。与iTunes相比…

docker部署gitlab 报错的问题!!!

1、什么是gitlab&#xff1f; Gitlab是一个用于仓库管理系统的开源项目&#xff0c;使用git作为代码管理工具&#xff0c;并在此基础上搭建起来的web服务。Gitlab有乌克兰程序员DmitriyZaporozhets和ValerySizov开发&#xff0c;它由Ruby写成。后来&#xff0c;一些部分用Go语…

leetcode 225.用队列实现栈 JAVA

题目 思路 1.一种是用双端队列&#xff08;Deque&#xff09;&#xff0c;直接就可以调用很多现成的方法&#xff0c;非常方便。 2.另一种是用普通的队列&#xff08;Queue&#xff09;,要实现栈的先入后出&#xff0c;可以将最后一个元素的前面所有元素出队&#xff0c;然后…

tcp和udp分别是什么?udp和tcp的区别

TCP和UDP是计算机网络中常见的两种传输层协议&#xff0c;它们在实际应用中具有不同的特点和用途。本文将对TCP和UDP进行介绍&#xff0c;并分析它们之间的区别。 TCP和UDP分别是什么&#xff1f; TCP&#xff08;Transmission Control Protocol&#xff09; TCP是一种面向连…

基于TensorFlow的花卉识别(算能杯)%%%

Anaconda Prompt 激活 TensorFlow CPU版本 conda activate tensorflow_cpu //配合PyCharm环境 直接使用TensorFlow1.数据分析 此次设计的主题为花卉识别&#xff0c;数据为TensorFlow的官方数据集flower_photos&#xff0c;包括5种花卉&#xff08;雏菊、蒲公英、玫瑰、向日葵…

论文汇总:A Closer Look at Few-shot Classification Again

文章汇总 文章是在总体上再一次地观察如何小样本领域存在的问题&#xff0c;并且发现了较为有趣的规律 1.测试误差随训练类别的数量而下降&#xff0c;而不是随每个类别的训练样本数量而下降。 2.训练算法(me&#xff1a;预训练模型)和自适应算法(me&#xff1a;预训练之后的…

适用于 Mac 电脑的 10 个最佳数据恢复工具

对于任何依对于依赖计算机获取重要文件&#xff08;无论是个人照片还是重要商业文档&#xff09;的人来说&#xff0c;数据丢失可能是一场噩梦。值得庆幸的是&#xff0c;有多种专门为 Mac 用户提供的数据恢复工具&#xff0c;可以帮助检索丢失或意外删除的文件。在本文中&…

SpringBoot 文件上传(三)

之前讲解了如何接收文件以及如何保存到服务端的本地磁盘中&#xff1a; SpringBoot 文件上传&#xff08;一)-CSDN博客 SpringBoot 文件上传&#xff08;二&#xff09;-CSDN博客 这节讲解如何利用阿里云提供的OSS&#xff08;Object Storage Service)对象存储服务保存文件。…