I2S/PCM board-level 约束及同步(latencyskewbitsync)

目录

1.I2S/PCM 同步

2.I2S/PCM的板间latency


I2S/PCM是典型的低速串口,在两个方向上分别有两组信号,我们已soc为视角分为soc-adif和外设audio-codec。

那么adif输入:

sclk_i,  ws_i, sdi

当然并不是三个输入信号同时有效,只有adif RX slave时,三个输入都会有效

adif输出:

sclk_o,  ws_o, sdo

也只有adif TX master时,三个输出才会有效。

下面要解释两个问题

1.TX master和RX slave时说明 adif与codec怎么完成的bitsync;

2.TX slave和RX master时说明 怎么保证RX输出的ws/fs sclk到了TX端产生sdo之后,再到RX端用ws/fs sclk能够正确采样

其实第一个问题对应的时信号间的skew;第二个问题对应的时信号传输的latency。

首先我们给出一些参数的量级:

adif和codec的寄存器setup和hold时间都在 几个ns

adif和codec的工作时钟都是sclk的十几到上百倍

sclk(bitclk采样时钟)最大十几MHz,所以sclk的周期在100ns量级 【所有音频采样率及采样深度请见另一文章 TODO

1.I2S/PCM 同步

        I2S/PCM自带帧同步信号,对于I2S来说ws的下降沿就是帧起始;对于PCM来说fs的上升沿就是帧起始。

        那么如何保证bit同步呢?不同于高速串行接口有复杂的bit同步电路,I2S/PCM的bit同步很简单,主要由以下几个机制来完成:

  1. 对信号组设置skew约束,skew都约束在5ns以下【见过约束为1ns,3ns的。这个skew阈值和工艺以及IO电压有关】约束包括soc端和codec端。-----见图1
  2. 用高频adifclk采样信号,并对信号进行adifclk打拍---调整相位
  3. sclk的上升沿改变信号,下降沿采样数据,这样有足够的采样窗口----见图4

        设T(sclk) ,T(fs) 和 T(sdo)分别是TX master时 从adif TX到芯片IO的延迟时间,或者Rx slave时从芯片IO到adif RX的延迟时间。

其中对于I2S这种需要输出sclk+控制信号+data的接口,通常会有以下的延时要求

T(sclk) <= T(fs) <= T(sdo)------这种约束的前提就是setup、hold、Tco远小于sclk周期

当然如果采用sclk上升沿改变信号,下降沿采样信号的处理下,上面的约束可以不用设置。

下面就以数据从adif TX 到芯片IO这一段来分析时序:

NOTE:下图源端信号中 fs和sdo都是在上升沿改变,且与上升沿的delay很小,这个delay就是寄存器的内部延迟Tco,是符合实际情况的。

                                                                         图 1

        上图中看出T(sclk), T(fs)和T(sdi) 差别较大,在源端三个信号的关系是 用sclk上升沿采样fs和sdo数据,其中sdo第一个数据‘1’与fs有一拍间隔;而在IO处,用sclk采样fs和sdo时,会发现fs和sdo第一笔数据差了两拍,明显出现了错误,所以尽量约束信号在传输过程中的skew,理想情况下,三根信号skew为0,必然在收端是可以正确采样的。

                                                                 图 2

        图2显示了上升沿变换,上升沿采样的情况下 T(fs)< T(sclk) < T(sdo)的情况,虽然三则之间skew不大【只要T(sclk)>T(fs)+Tco】,就出现了fs和sdo第一笔数据差了2各sclk的情况。

        其他不满足T(sclk) <= T(fs) <= T(sdo)的情况,也很容易出现时序错误,根因在于Tco太小,T(fs)和T(sdo)延迟小了就会被提前采样。

                                                                        图 3

图3就给出了T(sclk) <= T(fs) <= T(sdo)情况下的时序图,明显看出各信号都在正确的沿被采样。

                                                            图 4

图4给出了上升沿源端改变信号,芯片IO处用下降沿采样的时序图,T(fs) > T(sdo),但任然能够正确的采样数据。而且可以看到相对于下降沿,采样窗口左右两边都大了很多。

在RX slv端,用sclk的下降沿采样sdata,但不需要用sclk下降沿采样fs,因为在RX端只关心FS的上升沿,所以在adifclk对fs打拍,在和fs取上升后沿即可。当然用sclk 负沿采样打拍之后信号fs_slk_neg和fs取上升沿也可以,注意不是取fs_sclk_neg的上升沿,这样含义就不对了。

2.I2S/PCM的板间latency

        在TX slave 和Rx master的工作模式下,TX接收Rx输出的ws/fs和sclk信号并进行同步,这个同步的过程需要TX 两个adifclk时间,再加上沿检测只有变化后沿【即翻转后一个脉冲宽度的信号】又晚了一个adifclk,然后用ws/fs、sclk的变化后沿输出sdo,sdo经过板间延迟T(sdo),到达RX,而此时要用RX的ws/fs和sclk来正确采样sdo,这就要求3adifclk+T(sdo)不要超过一个sclk的周期.

        对于RX mst的sclk和ws/fs delay为0,sdi的延迟经历了以下路径:

Rx ws/fs_o -----> Tx ws/fs_i -----> Tx ws/fs_sync ------> Tx sdo -----> Rx sdi ------> Rx sdi_sync

如下图所示是上升沿变化上升沿采样,可以看出要保证sdi_sync与fs_o的时序关系,就要求上面的延迟不超过一个sclk的周期;如果是上沿变化下沿采样,就要求上面的延迟不超过sclk的半周期。

        另外从下图可以看出在TX slv 端不能用同沿采样FS 这样得到的FS上升沿必然比RX mst的fs上升沿至少晚一拍,用此产生sdo到了RX晚的更多。最好是直接在adifclk打拍fs_sync和fs一起得到fs的上升沿。

        在实际的项目中由于sclk在100ns量级,adifclk在10ns~0.xns的量级,T(sdo)也在几十ns【不确定】的范围,所以是很容易达到的,有些项目就没有对latency设置约束【不确定,有风险】。

        如果sdo在RX master端和ws/fs间隔太远超过1个sclk,有没有设计上的手段来检测并消除同步误差?

        有些代码实现通过检测sdata的bit数左右声道不一致,或整帧的bit数和配置值不一样来上报错误,但是在这里能检测到错误吗?

        而且这里只有sdi的输入延迟了,只能对Rx mst的ms/fs做相应的延迟,才能保证ws/fs与sdi的时序关系【I2S sdi第一个有效数据比ws下降沿晚一拍sclk,PCM sdi第一个有效数据比fs上升沿晚一拍sclk】,但是发现有的adif RX master只做了sdi的delay,这样能有用吗?

        另外现在的codec、adif都支持配置第一个sdata与ws 下降沿或fs上升沿的data_offset。是不是像上面的情况,一旦发现音频播放有问题,就可以让Rx mst设置的data_offset比Tx slv的data_offset大来调整?

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react 11之 router6路由 (两种路由模式、两种路由跳转、两种传参与接收参数、嵌套路由,layout组件、路由懒加载)

目录 react路由1&#xff1a;安装和两种模式react路由2&#xff1a;两种路由跳转 &#xff08; 命令式与编程式&#xff09;2-1 路由跳转-命令式2-2 路由跳转-编程式 - 函数组件2-2-1 app.jsx2-2-2 page / Home.jsx2-2-3 page / About.jsx2-2-4 效果 react路由3&#xff1a;函数…

模板方法模式(十六)

相信自己&#xff0c;请一定要相信自己 上一章简单介绍了代理模式(十五), 如果没有看过, 请观看上一章 一. 模板模式 引用 菜鸟教程里面的 模板模式介绍: https://www.runoob.com/design-pattern/template-pattern.html 在模板模式&#xff08;Template Pattern&#xff09;…

【HTML】HTML面试知识梳理

目录 DOCTYPE&#xff08;文章类型&#xff09;head标签浏览器乱码的原因及解决常用的meta标签与SEOscript标签中defer和async的区别src&href区别HTML5有哪些更新语义化标签媒体标签表单进度条、度量器DOM查询Web存储Canvas和SVG拖放 &#xff08;HTML5 drag API&#xff0…

高阶数据结构跳表

"想象为翼&#xff0c;起飞~" 跳表简介&#xff1f; skiplist本质上是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是 一样的&#xff0c;可以作为key或者key/value的查找模型。 跳表由来 skiplist是由美国计算…

12、Pinia 快速入门

1、什么是Pinia Pinia 是 Vue 的最新 状态管理工具 &#xff0c;是 Vuex 的 替代品 2、手动添加Pinia到Vue项目 在实际开发项目的时候,关于Pinia的配置,可以在项目创建时自动添加 现在我们初次学习&#xff0c;从零开始&#xff1a; 1.使用 Vite 创建一个空的 Vue3 项目 n…

流媒体服务器SRS的搭建及QT下RTMP推流客户端的编写

一、前言 目前市面上有很多开源的流媒体服务器解决方案&#xff0c;常见的有SRS、EasyDarwin、ZLMediaKit和Monibuca。这几种的对比如下&#xff1a; &#xff08;本图来源&#xff1a;https://www.ngui.cc/zz/1781086.html?actiononClick&#xff09; 二、SRS的介绍 SRS&am…

python操作elasticsearch

python操作elasticsearch_一个高效工作的家伙的博客-CSDN博客 待更新

jstat(JVM Statistics Monitoring Tool):虚拟机统计信息监视工具

jstat&#xff08;JVM Statistics Monitoring Tool&#xff09;&#xff1a;虚拟机统计信息监视工具 用于监视虚拟机各种运行状态信息的命令行工具。 它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据&#xff0c;在没有GUI图形界面、只提…

[Linux]进程状态

[Linux]进程状态 文章目录 [Linux]进程状态进程状态的概念阻塞状态挂起状态Linux下的进程状态孤儿进程 进程状态的概念 了解进程状态前&#xff0c;首先要知道一个正在运行的进程不是无时无刻都在CPU上进行运算的&#xff0c;而是在操作系统的管理下&#xff0c;和其他正在运行…

Keepalived+Lvs(dr)调度器主备配置小实验

目录 前言 一、实验拓扑图 二、配置LVS&#xff08;dr&#xff09;模式 三、配置调配器热备 四、测试 总结 前言 Keepalived和LVS&#xff08;Linux Virtual Server&#xff09;是两个常用的开源软件&#xff0c;通常结合使用以提供高可用性和负载均衡的解决方案。 Keepalive…

如何获取Ck

1. 下载via浏览器 https://viayoo.com/zh-cn/ 2.打开via浏览器, 登录美团外卖 美团网账号登录-手机美团官网 3.点击左上角的盾牌 然后点击这里 最后去我的网站粘贴就行

Matplotlib学习笔记

Matplotlib数据可视化库 jupyter notebook优势 画图优势&#xff0c;画图与数据展示同时进行。数据展示优势&#xff0c;不需要二次运行&#xff0c;结果数据会保留。 Matplotlib画图工具 专用于开发2D图表以渐进、交互式方式实现数据可视化 常规绘图方法 子图与标注 想要…

linux中模拟RTOS中事件集

linux中通常如何处理事件集 在Linux中&#xff0c;没有直接对应于实时操作系统&#xff08;RTOS&#xff09;中事件集&#xff08;Event Set&#xff09;的概念。实时操作系统通常提供了一种机制&#xff0c;允许任务或线程根据事件的发生状态进行等待和唤醒。这通常通过信号量…

opencv 进阶13-Fisherfaces 人脸识别-函数cv2.face.FisherFaceRecognizer_create()

Fisherfaces 人脸识别 PCA 方法是 EigenFaces 方法的核心&#xff0c;它找到了最大化数据总方差特征的线性组合。不可否认&#xff0c;EigenFaces 是一种非常有效的方法&#xff0c;但是它的缺点在于在操作过程中会损失许多特征信息。 因此&#xff0c;在一些情况下&#xff0c…

CTFshow——web入门——反序列化web254-web278 详细Writeup

前言 在做题之前先简要总结一下知识点 private变量会被序列化为&#xff1a;\x00类名\x00变量名 protected变量会被序列化为: \x00\*\x00变量名 public变量会被序列化为&#xff1a;变量名__sleep() &#xff1a;//在对象被序列化之前运行__wakeup() //将在反序列化之后立即…

基于web的成语接龙游戏java jsp趣味学习mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于web的成语接龙游戏 系统有1权限&#xff1a;管理…

Wlan——锐捷智分网络解决方案及其配置

目录 智分解决方案 一代智分解决方案 二代智分解决方案 三代智分解决方案 智分解决方案 技术原理 隧道建立 智分方案的配置 配置基础信息 配置微AP的无线信号 调整微AP的射频参数 宿舍场景特点&#xff1a;房间小&#xff0c;单个房间用户少&#xff0c;房间密集&am…

jvm-类加载子系统

1.内存结构概述 类加载子系统负责从文件系统或网络中加载class文件&#xff0c;class文件在文件开头有特定的文件标识 ClassLoader只负责class文件的加载&#xff0c;至于它是否运行&#xff0c;则由Execution Engine决定 加载的类信息存放于一块称为方法区的内存空间&#xff…

论文解读:Image-Adaptive YOLO for Object Detection in Adverse Weather Conditions

发布时间&#xff1a;2022.4.4 (2021发布&#xff0c;进过多次修订) 论文地址&#xff1a;https://arxiv.org/pdf/2112.08088.pdf 项目地址&#xff1a;https://github.com/wenyyu/Image-Adaptive-YOLO 虽然基于深度学习的目标检测方法在传统数据集上取得了很好的结果&#xf…

ResNet18云空间部署

1-6步骤可以在云空间运行&#xff0c;也可以在本地运行&#xff1b;步骤7 在云空间运行。 1.编译ONNX模型 本章以 resnet18.onnx 为例, 介绍如何编译迁移一个onnx模型至BM1684X TPU平台运行。 该模型来自onnx的官网: models/vision/classification/resnet/model/resnet18-v1…