問題描述:
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 的時序關系保持不變。
-
電路
+關注
關注
172文章
5938瀏覽量
172502 -
SDA
+關注
關注
0文章
124瀏覽量
28171 -
SCL
+關注
關注
1文章
239瀏覽量
17111
發布評論請先 登錄
相關推薦
評論