關於FPGA實現I2C匯流排時提高可靠性的總結

2021-10-08 14:31:56 字數 717 閱讀 9296

取樣視窗的選擇:

不要在scl下降沿后立刻取樣sda訊號。 i2c匯流排經常用於可插卸外設。其導線長度可從幾厘公尺到幾公尺。長導線增加了匯流排的電容,導致訊號改變時間緩慢,scl下降後立刻取樣,sda的訊號可能在短導線時已經穩定,而長導線時sda還在衝放電的不穩定階段,導致取樣訊號錯誤。

取樣點應該選在sda穩定的中心點,這樣留給匯流排充電的時間比較充裕。

提高抗干擾能力:

實際工業高輻射環境下,不排除emc做的不好,iic匯流排收到其他訊號的影響,出現毛刺。如果毛刺出現在sda的取樣點,便會出現取樣錯誤。為了在毛刺干擾下仍然可以取樣成功,應該不只取樣乙個點,而是參考debouncing,取樣多個點,當多個點的值一致時,或者進行毛刺判斷,取樣資料才會被取用。

例如,取樣五個點,「11111」 才會被視為是sda線上的乙個高電位,「00000」反之。

毛刺判斷,取樣五個點,有四個一就可以視為高電位,例如「11101」 視為有干擾情況下的高電位。「00100」反之。

降低iic自身的電磁輻射:

非常陡的電平變化會引起強的電磁輻射(emi), 所以iic電平變化的原則是在滿足timing的前提下盡可能降低電平變化的速度,使電平變化曲線變緩。

達到這一目的有兩點需要注意。 第一是選擇合適的上拉電阻。第二是管腳約束,不要使用vivado預設的drive strength 和 slew rate值。從最低的值開始除錯,使用滿足timing的時最低的drive strenth 和 slew rate

i2c匯流排時序

一心想踏入linux device driver的世界,想著i2c匯流排相對於usb等其他匯流排較為簡單,就以i2c作為切入點,希望可以逐步理解ldd的設計思想,並能理解其裝置模型的概念。在此對近期於i2c匯流排及驅動原始碼的理解做備忘,以免徒勞。平台友善之臂s70 tiny6410 cpusams...

I2C匯流排死鎖

原文 現象 最近發現訪問i2c裝置時,主裝置復位可能會引起i2c死鎖,表現為scl為高,sda一直為低,後發現是從裝置拉死i2c匯流排,從裝置斷電之後,sda變高,上電後通訊正常。後來通過拉低scl訊號線,sda就會自動變成高電平,i2c匯流排恢復。原因 在正常情況下,i2c匯流排協議能夠保證匯流排...

I 2C匯流排簡介

總共有五種工作狀態 a 匯流排非忙狀態 該狀態時資料線 sda 和時鐘線 scl 都保持高電平。b 啟動狀態 當時鐘線 scl 為高電平狀態時,資料線 sda 由高電平變為低電平的下降沿被認為是 啟動 訊號。c 停止狀態 當時鐘線 scl 為高電平狀態時,資料線 sda 由低電平變為高電平的下降沿被...