了解內部積體電路匯流排(一種基本的低成本互聯方案)的連線和格式。
內建積體電路 (i2c) 匯流排是一種單端、多主控雙線匯流排,適合在半雙工模式下進行高效的內部積體電路通訊。該匯流排使用漏極開路技術,因此通過電阻器連線到 vdd 時就需要兩根訊號線,分別為序列資料 (sda) 線和序列時鐘線 (scl),如圖 1 所示。
圖 1 i2c 匯流排
將線路拉低至接地認為是邏輯 0,而使線路浮置則為邏輯 1。通常將這用作通道接入方式。當 scl 為低電平時,必將發生邏輯狀態變化;當 ssl 為高電平時,若發生變化則認為是 start 和 stop 條件。儘管系統允許提供更高或更低的電壓,但典型的電源電壓為 3.3v 和 5v。
i2c 通訊採用 7 位位址空間(具有 16 個預留位址),因此在同一匯流排上,理論上最多可以和 112 個節點通訊。但實際上,節點數會受到匯流排上規定的總體總電容 (400 pf) 限制,從而將通訊距離限制為幾公尺。規定的訊號傳輸速率為 100 kbit/s(標準模式)、400 kbit/s(快速模式)、1 mbit/s(快速模式plus,fm+)和 3.4 mbit/s(高速模式)。
匯流排上的節點有主從之分。主節點負責發布時鐘和從節點位址,並且還開始和結束資料處理。從節點負責接收時鐘和位址,並響應來自主節點的請求。圖 2 顯示了主從節點之間典型的資料傳送示例。
圖 2 完整的資料傳輸時序圖
主節點通過建立乙個 start 條件發布乙個資料處理,緊接著發布希望與其進行通訊的從節點的 7 位位址。隨後傳送乙個訊號讀寫位,表示主節點是否願意寫入到從節點 (0) 或者自從節點讀取 (1)。接下來,主節點將釋放 sda 線,以允許從節點對資料接收作出應答。
在第 9 個 scl 時鐘脈衝的整個高電平期間,從節點通過將 sda 拉至低電平以回應乙個應答位 (ack),之後主節點一直處於傳輸或接收模式(根據傳送的讀寫位而定),而從節點則一直處於對應的互補模式(分別為接收或傳輸)。
傳送位址和 8 位資料位元組時首先傳送最高位 (msb)。當 scl 為高電平時,通過 sda 由高電平向低電平跳變來指示 start 位。而當 scl 為高電平時,則通過 sda 由低電平向高電平跳變來產生 stop 條件。
當主節點寫入到從節點時,它會在從節點傳送 ack 位時重**送乙個位元組。在這種情況下,主節點將處於主傳輸模式,而從節點則處於從接收模式。當主節點自從節點讀取時,它會重複接收自從節點的位元組,同時對每個位元組的接收作出應答 (ack),但最後乙個位元組除外,請參見圖 3。這種情況下,主節點將處於主接收模式,而從節點則處於從傳輸模式。
主節點將以 stop 位結束傳輸,或者可能為進行下一步傳輸而傳送另乙個 start 位以保持匯流排控制。
圖 3 資料傳輸期間傳輸/接收模式的變化情況
當寫入到從節點時,主節點將主要以傳輸模式執行,並且只有自從節點接收應答時才會更改為接收模式。
當自從節點讀取時,主節點將以傳輸模式啟動,然後在傳送 read 請求(讀寫位=1)到從節點後會更改為接收模式。從節點將一直處於對應的互補模式,直至結束該任務。
請注意,主節點將通過在最後接收的位元組後面跟隨乙個無應答 (nack) 來結束讀取序列。此步驟會復位從狀態機,並允許主節點傳送 stop 命令。
thomas kugelstadt 現任 ti 高階系統工程師,主要負責定義新型高效能模擬產品以及探測和調節工業系統中低電平模擬訊號的完整系統解決方案的開發工作。
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 由低電平變為高電平的下降沿被...