1 I2C簡介
I2C(Inter-Integrated Circuit)是一種由飛利浦半導體(現(xiàn)為恩智浦半導體)在1980年代初開發(fā)的同步、串行、半雙工的總線型通信協(xié)議。主要用于近距離(同一塊印刷電路板(PCB)上的集成電路(IC)之間)、低速(注:標準模式100K,快速模式400K,高速模式3.4M)的芯片之間的通信。
I2C總線有兩根信號線,一根數(shù)據(jù)線SDA用于收發(fā)數(shù)據(jù),一根時鐘線SCL用于通信雙方時鐘的同步。I2C總線是一種多主機總線,連接在I2C總線上的器件分為主機和從機,主機有權(quán)發(fā)起和結(jié)束一次通信,而從機只能被主機呼叫。每個連接到I2C總線上的器件都有一個唯一的地址(7-bit)。主機通過I2C設備的地址來選擇從機。

2 I2C的三態(tài)門電路
信息雙向傳輸(方向為inout)的時候需要使用三態(tài)門電路。FPGA內(nèi)部三態(tài)門結(jié)構(gòu):

當sda_out為1時,sda被設置為高阻態(tài)(1'bz),即此時sda由外部設備(或上拉電阻)控制。當sda_out為0時,sda被驅(qū)動為0。這種設計符合I2C協(xié)議的開漏輸出特性:I2C設備只能將數(shù)據(jù)線拉低(輸出0)或釋放(輸出高阻,由上拉電阻拉高)。因此,這個三態(tài)設置實現(xiàn)了I2C數(shù)據(jù)線的雙向通信:既可以輸出數(shù)據(jù)(拉低),也可以輸入數(shù)據(jù)(釋放總線并讀取)。具體的Verilog實現(xiàn)如下:

所以FPGA和外設之間要有個上拉電阻,如下是DE10-Nano的相關電路圖:

3 I2C協(xié)議的開始與結(jié)束信號
開始條件為當SCLK(時鐘腳)保持在高電平時, SDIN(數(shù)據(jù)腳)從高到低,接著會開始進行地址與數(shù)據(jù)傳輸;停止的條件是被定義成在 SCLK 在高電平時, SDIN 有一個低到高轉(zhuǎn)換:

4 I2C協(xié)議的字節(jié)傳送與應答
I2C總線通信時每個字節(jié)為8位長度,數(shù)據(jù)傳送時,先傳送最高位,后傳送低位,發(fā)送器發(fā)送完一個字節(jié)數(shù)據(jù)后,接收器必須發(fā)送1位應答位(應答:低電平"0";非應答:沒接收到數(shù)據(jù)或者接收器不想應答,就保持高電平"1")來回應發(fā)送器,即一幀共有9位。

5 I2C協(xié)議的同步信號
I2C總線在進行數(shù)據(jù)傳送時:
時鐘線SCL為低電平時,發(fā)送器向數(shù)據(jù)線上發(fā)送1-bit數(shù)據(jù),在此期間數(shù)據(jù)線上的信號允許變化;
時鐘線SCL為高電平時,接收器從數(shù)據(jù)線上讀取1-bit數(shù)據(jù),在此期間數(shù)據(jù)線上的信號不允許發(fā)生變化,必須保持穩(wěn)定。

6 I2C協(xié)議的寫操作
主機先產(chǎn)生一個起始信號ST,再由主機發(fā)送出欲控制的器件地址Device Address[6:0],再加上 1 位的 W/R 讀寫位(設定為 0)。從機收到主機發(fā)送出8 位信號后,會回應一個 ACK 信號;接著送出寄存器地址Register Address[7:0](有的寄存器地址是16位,則可分兩次發(fā)送),從機收到主機發(fā)送出8 位信號后,會回應一個 ACK 信號;接著送出 8 位數(shù)據(jù) Data[7:0],從機收到主機發(fā)送出8 位信號后,會回應一個ACK 信號。傳輸完成后,會從主機送出停止信號SP。則完成了將數(shù)據(jù) Data[7:0] 寫入 Device Address[6:0] 設備中的 Register Address[7:0] 寄存器中:

7 I2C協(xié)議的讀操作
主機先產(chǎn)生一個起始信號ST,再由主機發(fā)送出欲控制的器件地址Device Address[6:0],再加上 1 位的 W/R 讀寫位(設定為 0)。從機收到主機發(fā)送出8 位信號后,會回應一個 ACK 信號;接著送出寄存器地址Register Address[7:0],從機收到主機發(fā)送出8 位信號后,會回應一個 ACK 信號;接著主機重新送出開始信號SR(restart),再由主機發(fā)送出欲控制的器件地址DeviceAddress[6:0],再加上 1 位的 W/R 讀寫位(設定為 1)。從機收到主機發(fā)送出8 位信號后,會回應 一個 ACK 信號。接著讀取 8 位數(shù)據(jù) Data[7:0],主機收到8 位信號后發(fā)送一個NACK給從機,通知從機主機不再需要更多的數(shù)據(jù),最后從主機送出停止信號SP:

-
FPGA
+關注
關注
1659文章
22364瀏覽量
632960 -
通信協(xié)議
+關注
關注
28文章
1083瀏覽量
41947 -
接收器
+關注
關注
15文章
2641瀏覽量
76780 -
I2C總線
+關注
關注
8文章
416瀏覽量
63147
原文標題:4-DE10-Nano的HDMI方塊移動案例——I2C通信協(xié)議
文章出處:【微信號:友晶FPGA,微信公眾號:友晶FPGA】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
i2c通信協(xié)議
I2C通信協(xié)議簡介
I2C總線通信協(xié)議的相關資料下載
SPI、I2C、UART串行總線協(xié)議
I2C通信協(xié)議應該如何學習
i2c和spi通信協(xié)議的概念與區(qū)別 I2C/SPI總線通信協(xié)議你搞懂沒有
I2C通信協(xié)議:了解I2C Primer、 PMBus和SMBus
基于FPGA的I2C通信協(xié)議設計
評論