I2S是什么通信协议?它如何传输音频数据?它和I2C是什么关系?

news2025/1/23 15:55:54

首先我们先明确一点,I2S和I2C没有什么关系,如果非要扯点共同点的话那就是它们都是由飞利浦制定的。

I2C我们用的比较多,我们用的大多数的传感器模块用的通信协议就是I2C,SPI,UART这些。

而I2S应用领域比较单一,就是来传输音频数据的。

所以简单来说,I2C是传输数据的,I2S是传输音频数据的。

图片

我个人是认为在部分情况下也是可以使用I2C来传输音频数据的,只要我们把数据包装包装一下就行,但是人家别的模块传输音频的通信协议都是I2S,你用个I2C对接不上。

不过就算模块的协议也是我们自己写的I2C,我就是要用I2C来代替I2S传输数据,那其实也没必要,斧子也可以来切菜,但是我们切菜用的不是斧子而是菜刀。

所谓术业有专攻,I2S就是为了传输音频而生的,所以用它来传输音频数据是再合适不过了,包括我们正常买到的麦克风模块之类的用的也是I2S协议。

接下来我们就来聊聊I2S,看看它到底为什么适合传输音频数据。

图片

I2S需要三根线,时钟线,数据线,还要一根声道选择线。

我们平时打吃鸡可以听声辨位,最主要的原因就是有左右声道,我们左右耳机的声音其实是不一样的,而我们的大脑可以同时处理这两个声道的声音,从而根据声音来判断敌人的位置。

图片

什么?你说你不玩吃鸡?那你总可以在你爸妈敲开你房门的一瞬间把电脑切到桌面吧。

顺带一提,返回桌面的快键键是win+D,别问我为什么知道

我都是光明正大在父母面前看片的(bushi

当声道选择线为低电平的时候,表示当前正在传输左声道的音频数据,高电平就是右声道的音频数据(在I2S标准模式下)。

下面这个是官方手册的框图,可以看出在接线上I2S有三种接法,一个是发送端->接收端,一个是接收端->发送端,还有一个是在发送端和接收端之间加个控制器,由控制器当中转站。

图片

数据线上的数据永远是发送端发给接收端,但是时钟线的流向可不一定,即可以由发送端来控制,也可以由接收端来控制,WS声道选择线也是一样的。

既然谈到了时钟线,那么I2S的传输速率是多少呢?

图片

在官方手册里举例是2.5MHz,也就是说它至少是可以支持2.5MHz的速率,这可比I2C快多了,甚至在框图里我们可以看到I2S并不像I2C一样要有应答位,这又能进一步提升传输的效率(因为原本用来应答的bit被拿来传输数据了)。

一般我们声音采集的频率是44.1k,I2S可以采集双声道,所以乘2,采样的精度一般是16或者24位,这样一算就是44.1k*2*24=2.1158MHz。

所以I2S的传输速率是根据我们自己的需求而调整的,就算你速率是2.5MHz,但是我每秒采集的音频数据就那么多,你再快也没用。

图片

这也是I2C难以替代I2S的原因之一,速率不够,基本上我们用的I2C是100k和400k,虽然I2C超高速模式也能上MHz级别,但用的还是比较少的。

我们知道,SPI根据时钟相位的不同可以有四种工作模式,而I2S也是有着多种不同的工作模式。

I2S有三种,一种是飞利浦的标准I2S模式,另外两种分别是左对齐模式和右对齐模式。

所有模式都是MSB高位先行,并且发送的是二进制补码。

先看看标准的I2S模式。

图片

时钟线SCK下降沿的时候,发送端控制数据线SD切换数据bit,当SCK上升沿的时候,接收端可以从SD读取数据。

我们刚刚说了WS是声道选择线,而WS同时也是帧同步线,它一个周期就表示一帧,而一帧的数据里包含左声道和右声道的数据,所以WS的频率就等于音频的采样率。

当WS下降沿的时候表示一帧新的数据开始传输,在标准I2S模式下,WS跳变后的第一个bit无效,从第二个bit开始读取。

而下面的左对齐模式则不需要跳过第一个bit。

图片

左对齐模式的WS声道选择线和标准I2S模式是反过来的,WS高电平的时候表示左声道,而低电平的时候表示右声道。

并且数据是左对齐的。

这个可以参考ADC来理解,我们的ADC也是有左对齐和右对齐的,假设我们的数据是12位的,而传输数据是按照16bit传输的,这时候12bit填不满16bit,我们就需要选择是将数据左对齐还是右对齐了。

图片

右对齐模式的WS逻辑和左对齐模式一样。不一样的地方是它是将数据右对齐来传输的。

所以简单总结一下标准模式和左右对齐模式的不同之处就是标准模式会把WS跳变后的第一个bit忽略,而左右对齐模式不会;并且WS对于左右声道的逻辑是反过来的。

左右对齐模式的不同之处就是数据的对齐方式。

标准模式要忽略一个bit的原因是为了数据的稳定,数据的稳定、时钟同步、从设备的处理时间和信号完整性。

至于左右对齐模式不需要忽略一个时钟周期的原因我不太清楚,AI的回答是下面这样的。

图片

这AI也不太行啊(谁家的AI我就不说了)。

图片

知道了I2S的时序之后,我们应该如何使用I2S来通信呢?

一般我们拿主控芯片去接收麦克风模块的声音,所以我们是接收端,而麦克风模块是发送端。

根据官方文档里的框图,由我们接收端来控制时钟线和声道选择线(帧同步线)

图片

所以我们只需要去控制SCK和WS就可以来进行通信了。

以标准模式为例,我们只需要让WS进行一个下降沿的跳变,就表示了一帧数据开始发送,我们同时再控制SCK和读取SD就可以获取到数据了。

因为是一对一的,所以不需要像I2C那样有从机地址,并且为了数据的连续性,也不需要ack应答。

当然了,一般情况下我们不会使用GPIO引脚来模拟I2S(引脚电平翻转的频率跟不上),我们都是直接使用硬件I2S的,因此对于底层的细节我们不需要很在意。

以上就是今天的全部内容了,因为要用到麦克风模块了,所以临时突击了一下I2S,查了一天的资料,累死我了,I2S的资料真难找,网上一堆废话和互相搬运来搬运去的

要是本文有什么说的不对的地方欢迎大家指出,毕竟我对I2S也不是特别的了解。

好不容易找来的资料也不浪费,私信回复“I2S”免费下载I2S的官方手册,不过是英文的,想要研究研究的小伙伴可以下载下来看看。

图片

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

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

相关文章

大模型:LangChain技术讲解

一、什么是LangChain 1、介绍 LangChain是一个用于开发由大型语言模型提供支持的Python框架。它提供了一系列工具和组件,帮助我们将语言模型集成到自己的应用程序中。 有了它之后,我们可以更轻松地实现对话系统、文本生成、文本分类、问答系统等功能。…

【2024 博客之星评选】请继续保持Passion

我尝试复盘自己2024年走的路,希望能给诸君一些借鉴。 文章目录 回头望感想与收获成长与教训今年计划感恩一些体己话 回头望 回望我的2024年,年初拿高绩效,但感觉逐渐被公司一点点剥离出中心;年中一直在学习防患于未然&#xff1b…

Node.js接收文件分片数据并进行合并处理

前言:上一篇文章讲了如何进行文件的分片:Vue3使用多线程处理文件分片任务,那么本篇文章主要看一下后端怎么接收前端上传来的分片并进行合并处理。 目录: 一、文件结构二、主要依赖1. express2. multer3. fs (文件系统模块)4. pat…

【2025小年源码免费送】

💖学习知识需费心, 📕整理归纳更费神。 🎉源码免费人人喜, 🔥码农福利等你领! 💖山高路远坑又深, 📕大军纵横任驰奔, 🎉谁敢横刀立马行…

【JavaSE】(8) String 类

一、String 类常用方法 1、构造方法 常用的这4种构造方法:直接法,或者传参字符串字面量、字符数组、字节数组。 在 JDK1.8 中,String 类的字符串实际存储在 char 数组中: String 类也重写了 toString 方法,所以可以直…

css普通用法

Css普通用法 这是一个链接 W3C,用这个语法可以访问W3C,自己可以去看更加详细的内容。 基本语法 名字{ 类型:参数 类型:参数 }a{ color:blue }引入方法 直接在html之中进行带入到html代码之中,文件不需要重新写一个&#xff0c…

大数据Hadoop中MapReduce的介绍包括编程模型、工作原理(MapReduce、MapTask、ReduceTask、Shuffle工作原理)

MapReduce概述 MapReduce是Hadoop的核心项目之一,它是一个分布式计算框架, 可用于大数据并行处理的计算模型、框架和平台,主要解决海量数据的计算,是大数据中较为熟知的分布式计算框架。 MapReduce作为分布式计算框架&#xff0…

【学习笔记】计算机网络(一)

第1章 概述 文章目录 第1章 概述1.1 计算机网络在信息时代中的作用1.2 互联网概述1.2.1 网络的网络1.2.2互联网基础结构发展的三个阶段1.2.3 互联网的标准化工作 1.3 互联网的组成1.3.1 互联网的边缘部分1.3.2 互联网的核心部分 1.4 计算机网络在我国的发展1.5 计算机网络的类别…

[OpenGL]实现屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO)

一、简介 本文介绍了 屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO) 的基本概念,实现流程和简单的代码实现。实现 SSAO 时使用到了 OpenGL 中的延迟着色 (Deferred shading)技术。 按照本文代码实现后,可以实现以下…

KubeSphere 开源社区 2024 年度回顾与致谢

随着 2024 年圆满落幕,我们回顾 KubeSphere 社区这一年走过的每一步,感慨万千。2024 年,KubeSphere 继续领跑云原生技术的创新与发展,推动开源文化的传播,致力于为全球开发者和企业用户提供更强大的平台和解决方案。感…

ToDesk云电脑、顺网云、网易云、易腾云、极云普惠云横测对比:探寻电竞最佳拍档

一、云电脑:电竞新宠崛起 在电竞游戏不断发展的今天,硬件性能成为了决定游戏体验的关键因素。为了追求极致的游戏画面与流畅度,玩家们往往需要投入大量资金购置高性能电脑。然而,云电脑技术的出现,为玩家们提供了一种…

GitCode 助力 AutoTable:共创 MyBatis 生态的自动表格管理新篇章

项目仓库https://gitcode.com/dromara/auto-table 解放双手,专注业务:MyBatis 生态的“自动表格”创新 AutoTable 是一款致力于为 MyBatis 生态赋予“自动表格”功能的创新插件。其核心理念是通过 Java 实体类自动生成和维护数据库的表结构&#xff0c…

【useLayoutEffect Hook】在浏览器完成布局和绘制之前执行副作用

目录 前言语法useLayoutEffect 对比 useEffect:示例 前言 useLayoutEffect 是 React 中的一个 Hook, 类似于 useEffect,但有一个关键的区别:它会在所有的 DOM 变更之后同步调用 effect。这意味着它可以读取 DOM 布局并同步重新渲…

vue3-sfc-loader 加载远程.vue文件(sfc)案例

注意事项 style标签如果增加了lang比如:lang“scss”,需要提供scss-loader的处理器,这个暂时没研究,我的处理方式是将动态模版的css放在了全局打包暂时还没有测试,后面测试了会同步更新 安装vue3-sfc-loader npm inst…

AIGC的企业级解决方案架构及成本效益分析

AIGC的企业级解决方案架构及成本效益分析 一,企业级解决方案架构 AIGC(人工智能生成内容)的企业级解决方案架构是一个多层次、多维度的复杂系统,旨在帮助企业实现智能化转型和业务创新。以下是总结的企业级AIGC解决方案架构的主要组成部分: 1. 技术架构 企业级AIGC解决方…

NSIS系统制作Windows下的简易的安装程序

一. 前言 NSIS(Nullsoft Scriptable Install System)是一个专业的开源系统,用于创建 Windows 安装程序。拥有小巧而灵活的特点,受到很多用户的赞赏。 NSIS 基于脚本语言,允许您创建逻辑来处理比较复杂的安装任务。 官…

leetcode-不同路径问题

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 看见题目…

前端开发中的模拟后端与MVVM架构实践[特殊字符][特殊字符][特殊字符]

平时,后端可能不能及时给接口给前端进行数据调用和读取。这时候,前端想到进行模拟后端接口。本文将介绍如何通过vite-plugin-mock插件模拟后端接口,并探讨MVVM架构在前端开发中的应用。此外,我们还将讨论Vue2与Vue3的区别&#xf…

【Tool】沉浸式翻译 DeepLX

效果对比 对比一下四个常用的翻译工具的效果 不难看出只有Deepl算是在讲人话 如何配置 DeepLX 安装沉浸式翻译插件 获取APIKEY 从这获取: https://linux.do/t/topic/111737 配置 参考官方教程: https://linux.do/t/topic/111911

登录认证(3):会话跟踪技术:Session

Session概览 上文提到了,为了在同一个会话中共享数据(比如用户的登录状态),我们需要使用会话跟踪技术,Cookie是客户端的会话跟踪技术,是存储在本地浏览器中的。而本文介绍另外一种会话跟踪技术Session&…