問題描述:
I2C 控制器規(guī)范 v2.1 規(guī)定了濾除快速工作模式下 SDA 和 SCL 線路上最大間距為 50ns 的毛刺。
Zynq-7000 AP SoCs PS7 中的 I2C 控制器沒有實(shí)現(xiàn)這些毛刺的濾波電路。
SDA 或 SCL 線路上的毛刺會導(dǎo)致信號線路的瞬間錯誤觸發(fā)。
SDA 上的毛刺會導(dǎo)致錯誤 START 條件或錯誤 STOP 條件的識別,從而破壞總線協(xié)議。
SCL 上的毛刺會導(dǎo)致錯誤的數(shù)據(jù)傳輸,也會破壞總線協(xié)議。
兩種情況下,數(shù)據(jù)傳輸都會受到破壞,并且總線可以掛起。
為了避免這種情況,用戶需要實(shí)現(xiàn)一個電路從 SDA 和 SCL 線路中濾除毛刺。
解決方案
在將信號送到控制器之前,用戶需要在外部利用電路濾除 SCL 和 SDA 上的毛刺。
解決方法:
用戶可在 Zynq 的可編程邏輯部分或外部可編程器件(例如 CPLD)中采取如下解決辦法。
毛刺濾波器電路由 SDA 和 SCL 信號的亞穩(wěn)態(tài)觸發(fā)器和去除抖動器邏輯組成。
邏輯電路在更快的時鐘域上工作,能夠采樣在 SDA 和 SCL 信號上出現(xiàn)的毛刺。
SDA 和 SCL 信號穿過一個三級同步器以消除亞穩(wěn)態(tài)。
邏輯電路需要更快速的時鐘來濾除毛刺,且時鐘頻率至少應(yīng)為 40 MHz。
不過,由于亞穩(wěn)態(tài)觸發(fā)器的存在,使用該更快頻率的時鐘源無需大量濾除毛刺。
推薦的時鐘頻率為 100 MHz。
毛刺濾除過程:
1. 檢測 SDA 或 SCL 信號上的轉(zhuǎn)變。用戶需要為 SDA 和 SCL 實(shí)現(xiàn)獨(dú)立的毛刺濾波電路。
2. 當(dāng)檢測到時鐘邊沿時,加載計(jì)數(shù)器,計(jì)數(shù)值應(yīng)為需要去除抖動的時鐘周期的數(shù)量(應(yīng)可去除SDA 和 SCL 信號的 50ns 抖動)。將計(jì)數(shù)器遞減。
3. 當(dāng)計(jì)數(shù)器遞減到 0 時,在輸出線路斷言之前的總線狀態(tài)。如果信號值又發(fā)生變化,復(fù)位計(jì)數(shù)器,且不改變信號值。這樣能消除任何毛刺。
4. 在計(jì)數(shù)器遞減到 0 時,如果信號沒有變化,那么在輸出信號上分配新的 SCL 和 SDA 值。
注意: SCL 和 SDA 信號都需要去除 50ns 的抖動,以便讓 SCL 和 SDA 的時序關(guān)系保持不變。
-
電路
+關(guān)注
關(guān)注
171文章
5747瀏覽量
171204 -
SDA
+關(guān)注
關(guān)注
0文章
123瀏覽量
27956 -
SCL
+關(guān)注
關(guān)注
1文章
239瀏覽量
16991
發(fā)布評論請先 登錄
相關(guān)推薦
評論