屈綠源 王春龍
(1.貴州大學(xué)理學(xué)院 貴州 貴陽 550025;2.哈爾濱理工大學(xué)軟件學(xué)院 黑龍江 哈爾濱 150080)
I2C總線(Intel IC BUS)是Philps公司開發(fā)的一種用于芯片之間通訊的二線制串行傳輸總線,是基于串行時鐘線SCL和串行數(shù)據(jù)線SDA完成的全雙工的數(shù)據(jù)傳送。與其它的并行數(shù)據(jù)傳輸線相比有以下幾個優(yōu)點:規(guī)范完整,結(jié)構(gòu)獨立,易于實現(xiàn)用戶系統(tǒng)軟硬件的模塊化、標準化,同時還具有連線少、允許多主機控制、具有總線仲裁和同步的特點等,因此,已經(jīng)被廣泛用于各個領(lǐng)域,并成為了一種國際的工業(yè)標準。本文的宗旨是利用Verilog HDL在FPGA上模擬I2C接口時序,實現(xiàn)與I2C總線的通信。
I2C總線系統(tǒng)有嚴格的時序規(guī)范,由兩條串行接口組成,即SCL串行時總鐘線和SDA串行數(shù)據(jù)總線。SDA和SCL都是全雙工的串行總線,SDA用于傳輸?shù)刂泛蛿?shù)據(jù),SCL為傳送數(shù)據(jù)提供時鐘。I2C總線系統(tǒng)中主機和從機之間傳送一次數(shù)據(jù)為一幀,由開始信號、地址,數(shù)據(jù)字節(jié)、應(yīng)答信號以及停止信號組成。當啟動通訊時,主機先發(fā)送一個開始信號和從機的地址字節(jié) (由7位地址和一位讀寫信號標志位組成),若某個從機發(fā)出響應(yīng)信號,則主機開始發(fā)送數(shù)據(jù)字節(jié),每一個數(shù)據(jù)字節(jié)完成時,從機必須發(fā)出一個響應(yīng)信號,主機接收到從機響應(yīng)信號之后,才能發(fā)送下一個數(shù)據(jù)字節(jié)。當通訊停止時,主機產(chǎn)生一個停止信號。圖1為一次完整的數(shù)據(jù)傳送。
圖1 I2C總線一次完整的數(shù)據(jù)傳送過程
由I2C總線規(guī)范可得到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主機的狀態(tài)轉(zhuǎn)移圖
本文中按照以上兩個讀寫過程,用Verilog HDL語言使用狀態(tài)機的方式實現(xiàn),如圖2所示。狀態(tài)機的編碼方式使用獨熱碼,不僅可以防止毛刺引起狀態(tài)轉(zhuǎn)移,而且還可以提高電路的速度和可靠性。本文中I2C總線的傳輸速率為400kbit/s。
圖3是在Modelsim6.5中的時序仿真波形圖,模擬了I2C總線系統(tǒng)的寫和讀過程。對I2C總線系統(tǒng)的仿真和調(diào)試,主要是看時鐘線SCL以及數(shù)據(jù)線SDA的輸出是否滿足I2C總線系統(tǒng)規(guī)范,為此,本文中把I2C模塊分成兩個模塊master和slave,然后在頂層模塊里面調(diào)用這兩個子模塊。當SCL保持高電平時,SDA線從高電平跳變到低電平,產(chǎn)生開始信號,隨后SDA線發(fā)送8位地址,其中包括7位從機地址和1位讀/寫位,此時SCL需要發(fā)送9個脈沖,第9個脈沖為從機的響應(yīng)脈沖,如果從機響應(yīng),則SDL為高電平,隨后主機繼續(xù)發(fā)送寄存器地址、數(shù)據(jù)字節(jié)直到產(chǎn)生停止信號。SCL保持高電平,SDA從低電平跳變到高電平表示停止信號。產(chǎn)生停止信號后,SCL和SDA線都保持高電平不變,等待下一個開始信號。圖4和圖5是使用示波器觀測FPGA和I2C總線接口通信的時序波形。
圖3 I2C的一次寫和讀過程
圖4 I2C寫的波形
圖5 I2C讀的波形
以上是對主機和從機的仿真,從仿真波形和示波器觀測到的波形可以看出,整個時序基本上滿足了I2C總線系統(tǒng)的時序要求,而且本文中所編寫的代碼是可綜合的,并且在Xilinx公司的Spartan-3E系列的XC3S250E器件上驗證通過的,基本滿足了本文的宗旨。
[1]夏文宇.Verilog數(shù)字系統(tǒng)設(shè)計教程[M].北京航空航天大學(xué)出版社,2005.
[2]何立民.I2C總線應(yīng)用系統(tǒng)設(shè)計[M].北京航空航天大學(xué)出版社,2004.
[3]李廣軍,王厚華.使用接口技術(shù)[M].電子科技大學(xué)出版社,1997.
[4]鄧云祥,孟勁松,蘇燕辰.Verilog HDL數(shù)字電路設(shè)計[J].中國測試技術(shù),2005,3(13):103-105.