码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • I2S/PCM接口及音频codec


    目录

    1.I2S接口及时序

    1.1 I2S接口信号

    1.2 I2S接口时序

    1.3 MCLK的作用

    2. PCM(TDM)接口 

    2.1 PCM(TDM)接口信号

    2.2 PCM接口时序

    3.audio codec


     可参考本人转载的一篇文章:

    数字音频接口(I2S,PCM/TDM,PDM)_cy413026的博客-CSDN博客数字音频接口。https://blog.csdn.net/cy413026/article/details/132590286?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132590286%22%2C%22source%22%3A%22cy413026%22%7D

    1.I2S接口及时序

    1.1 I2S接口信号

    I2S主要有三根信号:分别是SCK(sclk/bclk), WS[word select](lrclk), SD(serial data).

    有时候为了使音频 CODEC 芯片与主控制器之间能够更好的同步,会引入另外一个叫做 MCLK 的信号,也叫做主时钟或系统时钟,一般是采样率的 256 倍或 384 倍。

    I2S 可以设置为全双工/半双工,也支持主从模式。

    全双工:sdi,sdo两根SD线(指的是pad上的两个IO pin)

    半双工:一根SD线(指的是pad上一个双向IO pin)

    【说明:这些低速串口在soc上基本都是用GPIO实现,PAD上的IO pin的方向是可配置为input,output或动态可配的inout】

    所以半双工的情况下 在数字逻辑里面会多一根sd_oen的 SD IO的方向控制信号

    真实的与GPIO的连接情况如下:

    I2S和I2C分别如何连接pad_cy413026的博客-CSDN博客典型的pad及其接口如下图所示:一般情况下IE信号直接tie 1.因为大部分都不会做输入控制。https://blog.csdn.net/cy413026/article/details/128413260?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22128413260%22%2C%22source%22%3A%22cy413026%22%7D

    主模式是指输出sck和ws的设备,对应接受sck和ws的为从模块。

    audio的master/slave都可以是接受音频数据(RX)也可以是发送音频数据(TX).

    同样设备既要做master又要做slave时可以有两组独立的sck和ws,也可以分时复用,通过sck_oen,ws_oen来选择SCK,WS IO PIN当前的方向。

    位时钟(BCLK):又名SCK,对应每一位(bit)数据,都有一个脉冲。

    BCLK = 2 * 采样频率 * 量化位数。

    问:为什么BCLK是采样频率和量化位数乘积的2倍?

    答:量化位数是相对于单声道来说的,SCK是同时用于左、右声道数据交替传输的时钟。例如先传输16个bit的左通道数据,再传输16个bit的右通道数据,一直这样按顺序交替传输音频。

    采样频率:等于LRCK。一般音频使用16K。还有多种采样频率,看需求。

    LRCK:用于切换左右声道的数据。一般,1表示左声道,0表示右声道。

    MCLK:主时钟(也名过采样率),一般是采样频率[不是bclk而是LRCK]的128、或256、或384或512倍。

    量化位数:常见的位数有16bit,24bit,32bit,20bit。


    1.2 I2S接口时序

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

     SD数据变化在sck的下降沿。

    至于左对齐 右对齐的概念可参考:

    Audio-音频传输接口(I2S、PCM、PDM)_一只青木呀的博客-CSDN博客_i2s音频接口1、音频接口使用场景I2S和PCM(TDM)接口传输的数据是PCM编码格式的音频数据。PDM接口传输的数据是PDM编码格式的音频数据。2、I2S接口I2S(Inter-IC Sound)总线有时候也写作 IIS,I2S 是飞利浦公司提出的一种用于数字音频设备之间进行音频数据传输的总线。和 I2C、SPI 这些常见的通信协议一样,I2S 总线用于主控制器和音频 CODEC 芯片之间传输音频数据。因此,要想使用 I2S 协议,主控制器和音频 CODEC 都得支持 I2S 协议。I2S 接口需要 3https://blog.csdn.net/weixin_45309916/article/details/124984584

    1.3 MCLK的作用

    MCLK是Master clock的缩写,在DAC内部的delta-sigma调制器以及数字滤波器都需要用到这个时钟,大部分的DAC可以使用内部的振荡器产生这个时钟,在某些要求较高的场合,例如HIFI音响系统等,需要使用一个额外的高质量的时钟用以获得最好的性能。这时候就需要用到MCLK信号了。切记,MCLK并不是必须的。可有可无,看设计要求。MCLK一般是Fs*256或者Fs*384。
     

    2. PCM(TDM)接口 

    2.1 PCM(TDM)接口信号

    无论I2S还是PCM音频接口,传输的都是pcm编码之后的数据pcm编码即脉冲编码调制。

    该接口由时钟脉 冲(BCLK)、帧同步信号(FS)及接收数据(DR)和发送数据(DX)组成。在FS信号的上升沿,数据传输从MSB(Most Significant Bit)字开始,FS频率等于采样率。FS信号之后开始数据字的传输,单个的数据位按顺序进行传输,1个时钟周期传输1个数据字。发送MSB时,信号的等 级首先降到最低,以避免在不同终端的接口使用不同的数据方案时造成MSB的丢失。

    PCM接口包括四根信号:

    PCM_CLK (BCLK):数据时钟信号
    PCM_SYNC (FS):帧同步时钟信号
    PCM_IN(DR) :接收数据信号
    PCM_OUT (DX):发送数据信号

    PCM/TDM接口时序虽然和I2S有写差别,但完全是可以信号线复用的,无论是数字信号还是pad上的IO PIN。

    2.2 PCM接口时序

    以下内容摘自

    Audio-音频传输接口(I2S、PCM、PDM)_一只青木呀的博客-CSDN博客_i2s音频接口1、音频接口使用场景I2S和PCM(TDM)接口传输的数据是PCM编码格式的音频数据。PDM接口传输的数据是PDM编码格式的音频数据。2、I2S接口I2S(Inter-IC Sound)总线有时候也写作 IIS,I2S 是飞利浦公司提出的一种用于数字音频设备之间进行音频数据传输的总线。和 I2C、SPI 这些常见的通信协议一样,I2S 总线用于主控制器和音频 CODEC 芯片之间传输音频数据。因此,要想使用 I2S 协议,主控制器和音频 CODEC 都得支持 I2S 协议。I2S 接口需要 3https://blog.csdn.net/weixin_45309916/article/details/124984584

    根据 SD相对帧同步时钟FSYNC的位置,TDM分两种基本模式:
    Mode A:数据在FSYNC有效后,BCLK的第2个上升沿有效。
    在这里插入图片描述

    Mode B:数据在FSYNC有效后,BCLK的第1个上升沿有效。
    在这里插入图片描述

    3.audio codec

    audio的codec主要分为:

    codec_DA: pcm解码--->DA转换

    codec_AD:AD转换---->pcm编码

    可参考:

    WM CJC8988多功能Codec芯片性能及应用介绍_isweekDN的博客-CSDN博客_codec芯片  Codec指的是数字通信中具有编码、译码功能的器件,能有效减少数字存储占用的空间,在计算机系统中,使用硬件完成CODEC可以节省CPU的资源,提高系统的运行效率;主要作用是对视频信号进行压缩和解压缩。  Codec芯主要负责数字->模拟信号转换(DAC)和模拟->数字信号的转换(ADC);不管是音频加速器,还是I/O控制器,输入输出都是纯数字信号,要使用声卡上的Line Out插孔输出信号的话,信号就必须经过声卡上的CODEC的转换处理。可以说,声卡模拟输入输出的品质和CODEC的转换品质有着重大的关系https://blog.csdn.net/isweekDN/article/details/125522405


     

  • 相关阅读:
    【JavaSE】Collections集合工具类专题
    vue3+vite自动引入组合Api插件unplugin-auto-import
    win11 卸载SQL Server
    【C++进阶之路】特殊类的设计
    Qt+QtWebApp开发笔记(三):http服务器动态html连接跳转基础交互
    Java+JSP+MySQL基于SSM的学生宿舍管理系统的设计与实现-计算机毕业设计
    Go语言的诞生背景
    Spring底层核心原理解析
    使用JDK1.8的流特性快速操作map实例
    听GPT 讲Istio源代码--pilot(4)
  • 原文地址:https://blog.csdn.net/cy413026/article/details/127807774
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号