屈綠源 王春龍
(1.貴州大學理學院 貴州 貴陽 550025;2.哈爾濱理工大學軟件學院 黑龍江 哈爾濱 150080)
I2C總線(Intel IC BUS)是Philps公司開發的一種用于芯片之間通訊的二線制串行傳輸總線,是基于串行時鐘線SCL和串行數據線SDA完成的全雙工的數據傳送。與其它的并行數據傳輸線相比有以下幾個優點:規范完整,結構獨立,易于實現用戶系統軟硬件的模塊化、標準化,同時還具有連線少、允許多主機控制、具有總線仲裁和同步的特點等,因此,已經被廣泛用于各個領域,并成為了一種國際的工業標準。本文的宗旨是利用Verilog HDL在FPGA上模擬I2C接口時序,實現與I2C總線的通信。
I2C總線系統有嚴格的時序規范,由兩條串行接口組成,即SCL串行時總鐘線和SDA串行數據總線。SDA和SCL都是全雙工的串行總線,SDA用于傳輸地址和數據,SCL為傳送數據提供時鐘。I2C總線系統中主機和從機之間傳送一次數據為一幀,由開始信號、地址,數據字節、應答信號以及停止信號組成。當啟動通訊時,主機先發送一個開始信號和從機的地址字節 (由7位地址和一位讀寫信號標志位組成),若某個從機發出響應信號,則主機開始發送數據字節,每一個數據字節完成時,從機必須發出一個響應信號,主機接收到從機響應信號之后,才能發送下一個數據字節。當通訊停止時,主機產生一個停止信號。圖1為一次完整的數據傳送。

圖1 I2C總線一次完整的數據傳送過程
由I2C總線規范可得到I2C的寫和讀的命令格式如下:
(1)I2C 總 線 寫 命 令 格 式 :<Start>-<Write Slave Address+W/R bit>-<Ack>-<Register Address> -<Ack> -<W_Data1> -<Ack> -<W_Data2> -<Ack>…<Stop>.
(2)I2C 總 線 讀 命 令 格 式 :<Start>-<Write Slave Address+W/R bit>-<Ack>-<Register Address>-<Ack>-<Restart>-<Write Slave Address+W/R bit>-<Ack>-<R_Data1>-<Ack>-<R_Data2>-<Ack> … <Stop>.

圖2 I2C主機的狀態轉移圖
本文中按照以上兩個讀寫過程,用Verilog HDL語言使用狀態機的方式實現,如圖2所示。狀態機的編碼方式使用獨熱碼,不僅可以防止毛刺引起狀態轉移,而且還可以提高電路的速度和可靠性。本文中I2C總線的傳輸速率為400kbit/s。
圖3是在Modelsim6.5中的時序仿真波形圖,模擬了I2C總線系統的寫和讀過程。對I2C總線系統的仿真和調試,主要是看時鐘線SCL以及數據線SDA的輸出是否滿足I2C總線系統規范,為此,本文中把I2C模塊分成兩個模塊master和slave,然后在頂層模塊里面調用這兩個子模塊。當SCL保持高電平時,SDA線從高電平跳變到低電平,產生開始信號,隨后SDA線發送8位地址,其中包括7位從機地址和1位讀/寫位,此時SCL需要發送9個脈沖,第9個脈沖為從機的響應脈沖,如果從機響應,則SDL為高電平,隨后主機繼續發送寄存器地址、數據字節直到產生停止信號。SCL保持高電平,SDA從低電平跳變到高電平表示停止信號。產生停止信號后,SCL和SDA線都保持高電平不變,等待下一個開始信號。圖4和圖5是使用示波器觀測FPGA和I2C總線接口通信的時序波形。

圖3 I2C的一次寫和讀過程

圖4 I2C寫的波形

圖5 I2C讀的波形
以上是對主機和從機的仿真,從仿真波形和示波器觀測到的波形可以看出,整個時序基本上滿足了I2C總線系統的時序要求,而且本文中所編寫的代碼是可綜合的,并且在Xilinx公司的Spartan-3E系列的XC3S250E器件上驗證通過的,基本滿足了本文的宗旨。
[1]夏文宇.Verilog數字系統設計教程[M].北京航空航天大學出版社,2005.
[2]何立民.I2C總線應用系統設計[M].北京航空航天大學出版社,2004.
[3]李廣軍,王厚華.使用接口技術[M].電子科技大學出版社,1997.
[4]鄧云祥,孟勁松,蘇燕辰.Verilog HDL數字電路設計[J].中國測試技術,2005,3(13):103-105.