电路从SDA和SCL线路中滤除毛刺的解决方法及过程

电子说

1.3w人已加入

描述

问题描述:

I2C 控制器规范 v2.1 规定了滤除快速工作模式下 SDA 和 SCL 线路上最大间距为 50ns 的毛刺。

Zynq-7000 AP SoCs PS7 中的 I2C 控制器没有实现这些毛刺的滤波电路。

SDA 或 SCL 线路上的毛刺会导致信号线路的瞬间错误触发。

SDA 上的毛刺会导致错误 START 条件或错误 STOP 条件的识别,从而破坏总线协议。

SCL 上的毛刺会导致错误的数据传输,也会破坏总线协议。

两种情况下,数据传输都会受到破坏,并且总线可以挂起。

为了避免这种情况,用户需要实现一个电路从 SDA 和 SCL 线路中滤除毛刺。

解决方案

在将信号送到控制器之前,用户需要在外部利用电路滤除 SCL 和 SDA 上的毛刺。

解决方法:

用户可在 Zynq 的可编程逻辑部分或外部可编程器件(例如 CPLD)中采取如下解决办法。

毛刺滤波器电路由 SDA 和 SCL 信号的亚稳态触发器和去除抖动器逻辑组成。

逻辑电路在更快的时钟域上工作,能够采样在 SDA 和 SCL 信号上出现的毛刺。

SDA 和 SCL 信号穿过一个三级同步器以消除亚稳态。

逻辑电路需要更快速的时钟来滤除毛刺,且时钟频率至少应为 40 MHz。

不过,由于亚稳态触发器的存在,使用该更快频率的时钟源无需大量滤除毛刺。

推荐的时钟频率为 100 MHz。

毛刺滤除过程:

1. 检测 SDA 或 SCL 信号上的转变。用户需要为 SDA 和 SCL 实现独立的毛刺滤波电路。

2. 当检测到时钟边沿时,加载计数器,计数值应为需要去除抖动的时钟周期的数量(应可去除SDA 和 SCL 信号的 50ns 抖动)。将计数器递减。

3. 当计数器递减到 0 时,在输出线路断言之前的总线状态。如果信号值又发生变化,复位计数器,且不改变信号值。这样能消除任何毛刺。

4. 在计数器递减到 0 时,如果信号没有变化,那么在输出信号上分配新的 SCL 和 SDA 值。

注意: SCL 和 SDA 信号都需要去除 50ns 的抖动,以便让 SCL 和 SDA 的时序关系保持不变。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分