魏海波,馬錚,劉杰
(湖北汽車(chē)工業(yè)學(xué)院電氣與信息工程學(xué)院,湖北十堰442002)
基于FPGA的I2C總線應(yīng)用研究
魏海波,馬錚,劉杰
(湖北汽車(chē)工業(yè)學(xué)院電氣與信息工程學(xué)院,湖北十堰442002)
I2C總線作為高性能的串行傳輸總線,已在微電子領(lǐng)域得到了廣泛的應(yīng)用。本課題中,在EP2C5Q208C8N平臺(tái)上采用硬件描述語(yǔ)言VHDL,通過(guò)Moore型有限狀態(tài)機(jī)編程設(shè)計(jì)了模數(shù)轉(zhuǎn)換器件PCF8591T的I2C總線控制器。實(shí)驗(yàn)結(jié)果表明:所設(shè)計(jì)的I2C總線控制器遵循I2C總線接口協(xié)議,數(shù)據(jù)傳輸穩(wěn)定可靠。
I2C總線;串行傳輸總線;有限狀態(tài)機(jī);硬件描述語(yǔ)言;接口協(xié)議
doi:10.3969/j.issn.1008-5483.2015.03.011
I2C總線是Philips公司推出的串行總線,由于結(jié)構(gòu)簡(jiǎn)單、傳輸速率高、支持主從及多主工作方式、具備總線仲裁等特點(diǎn)[1],在硬件電路設(shè)計(jì)中可以大為簡(jiǎn)化電路復(fù)雜程度。諸如TI、ST、Freescale等眾多全球知名半導(dǎo)體廠商在其推行的高性能IC芯片中添加了I2C總線接口,以確保其產(chǎn)品的市場(chǎng)份額?,F(xiàn)場(chǎng)可編程邏輯門(mén)陣列是較為新型的半定制電路產(chǎn)品,利用查找表方式實(shí)現(xiàn)組合邏輯,通過(guò)相應(yīng)觸發(fā)器驅(qū)動(dòng)其它電路,從而完成功能開(kāi)發(fā)。該半定制產(chǎn)品既解決了定制電路功能限定的不足之處,又克服了原有編程器件可用器件偏少的問(wèn)題[2]。
根據(jù)I2C總線電氣特性及通訊協(xié)議,采用Altera公司高性價(jià)比的CycloneII系列EP2C5Q208C8N器件,結(jié)合I2C總線數(shù)據(jù)傳輸器件PCF8591T,以VH?DL語(yǔ)言設(shè)計(jì)了具體的數(shù)據(jù)傳輸模塊。
I2C總線采用時(shí)鐘總線(SCL)和數(shù)據(jù)總線(SDA)實(shí)現(xiàn)數(shù)據(jù)的雙向同步傳輸。為了衡量I2C總線空閑時(shí)的狀態(tài)定義其邏輯高電平為總線空閑狀態(tài),通過(guò)監(jiān)控I2C總線上的SCL和SDA總線狀態(tài),就能判定I2C總線的實(shí)時(shí)狀態(tài)。通過(guò)連接上拉電阻至總線電源電壓實(shí)現(xiàn),如圖1所示。
圖1 I2C總線基本框架圖
連接在I2C總線上的每個(gè)器件都通過(guò)I2C總線接口將各自的SCL和SDA直接掛在總線上。這樣,器件之間均構(gòu)成線“與”關(guān)系,任意器件的低電平都會(huì)帶來(lái)該總線的低電平邏輯。
IC總線由主器件發(fā)動(dòng)一幀數(shù)據(jù)的傳輸,通常包含起始信號(hào)(S)、地址選通控制字信息(ADR_ sel)、應(yīng)答/非應(yīng)答信號(hào)(ACK)、數(shù)據(jù)傳輸字信息(DAT_trans)、結(jié)束信號(hào)(P)。主器件通過(guò)地址選通控制字中的傳輸方向位信息判斷I2C總線的數(shù)據(jù)傳輸方向,而選通信號(hào)中存在數(shù)據(jù)傳輸?shù)姆较蛭恍畔?,大多?shù)情況下同時(shí)涉及主器件與從器件之間的雙向通信,因此選通信號(hào)會(huì)產(chǎn)生2次;起始信號(hào)、應(yīng)答/非應(yīng)答信號(hào)、終止信號(hào)是決定I2C總線啟動(dòng)停止與數(shù)據(jù)接受與否的關(guān)鍵要素,必須嚴(yán)格按照總線協(xié)議進(jìn)行。一幀完整的I2C總線信息如圖2所示。
圖2 I2C總線完整時(shí)序
從圖2中可以看出,當(dāng)I2C總線啟動(dòng)后,首先發(fā)出一個(gè)起始信號(hào)S啟動(dòng)總線??偩€啟動(dòng)后,在SCL時(shí)鐘下進(jìn)行尋址字節(jié)的廣播信號(hào)發(fā)送,位于I2C總線上的任意器件都能接收到該字節(jié)信息,僅有1個(gè)與之完全相同的地址器件才能與之匹配,同時(shí)獲得數(shù)據(jù)傳輸方向提示。在第9個(gè)時(shí)鐘下,從器件響應(yīng)主控器件,這時(shí)通信雙方已做好數(shù)據(jù)收發(fā)的準(zhǔn)備工作。之后進(jìn)入正常的數(shù)據(jù)發(fā)送階段,根據(jù)實(shí)際情況決定是否終止數(shù)據(jù)傳輸,從而產(chǎn)生終止信號(hào)P。
在具有I2C總線的器件中,通常都配備了地址引腳用于設(shè)定器件的I2C總線3位可編程引腳。通過(guò)對(duì)這些引腳的設(shè)定可以產(chǎn)生多達(dá)8個(gè)相同器件的總線接入。本課題中,采用4通道8位I2C總線數(shù)據(jù)傳輸器件PCF8591T作為總線控制對(duì)象,利用Al?tera公司高性價(jià)比FPGA器件EP2C5Q208C8N芯片作為I2C總線主控器件,以有限狀態(tài)機(jī)方式設(shè)計(jì)了來(lái)自外部模擬量的數(shù)據(jù)采集工作。
硬件電路原理圖如圖3所示,A/D轉(zhuǎn)換器件PCF8591T的AIN0~AIN3是來(lái)自外部的4組待采集的模擬量數(shù)據(jù),A0~A2是該器件的地址選擇引腳,直接接地,即后續(xù)I2C總線尋址字節(jié)中的3位可編程位信息D3~D1,應(yīng)設(shè)置為“000”。該器件的2條 I2C總線SCL和SDA分別通過(guò)10kΩ的上拉電阻連接到器件的VCC端,以保證I2C總線空閑期間是邏輯高電平。同時(shí),SCL和SDA直接與FPGA器件的2個(gè)通用I/O管腳連接,通過(guò)管腳配置為SCL和SDA總線,實(shí)現(xiàn)I2C總線數(shù)據(jù)傳輸?shù)挠布l件基礎(chǔ)。
圖3 FPGA的I2C總線數(shù)據(jù)采集原理圖
3.1I2C總線時(shí)鐘確定
從I2C總線傳輸速率來(lái)看,其標(biāo)準(zhǔn)模式傳輸速率位100 kHz,快速模式為400 kHz,高速模式為3.4 MHz。從圖2可以看出,I2C總線3個(gè)特殊信號(hào)的保持時(shí)間均應(yīng)該不小于4.7μs,取近似值5μs,故而選用本課題I2C總線傳輸速率為200 kHz,這樣在一個(gè)I2C總線周期里可以完成對(duì)這類(lèi)特殊信號(hào)的處理過(guò)程。
FPGA采用50 MHz的有源晶振,對(duì)于I2C總線所需求的200 kHz時(shí)鐘,可以通過(guò)分頻程序?qū)崿F(xiàn),兩者之間的分頻系數(shù)為
代入已知信息 fOSC為50 MHz,fI2C為200 kHz,計(jì)算得分頻系數(shù)N為250。
3.2I2C總線控制字確定
PCF8591T中,為了實(shí)現(xiàn)其功能,除了規(guī)定的地址尋址字節(jié)外,還設(shè)置有額外的控制字,用于控制該器件的工作方式及其它功能[3]。通過(guò)查閱產(chǎn)品手冊(cè),確定了I2C總線通訊的相關(guān)控制字設(shè)置,相關(guān)說(shuō)明見(jiàn)表1。
表1 PCF8591T I2C總線通訊控制字設(shè)置
PCF8591T器件中只有2個(gè)通信相關(guān)寄存器:地址字寄存器和控制字寄存器。當(dāng)該器件啟動(dòng)后需要先展開(kāi)初始化工作確定其工作方式,這就需要完成表1中的步驟1~2。此時(shí)該器件才真正地進(jìn)入工作,開(kāi)始采集外部模擬信號(hào)并轉(zhuǎn)換,在下一個(gè)I2C總線周期中輸出數(shù)據(jù)。
3.3VHDL軟件實(shí)現(xiàn)
在VHDL編程中,PCF8591T器件的I2C總線通訊主要涉及2個(gè)模塊:分頻模塊和I2C總線數(shù)據(jù)傳輸模塊。分頻模塊建立I2C總線的時(shí)鐘,I2C總線數(shù)據(jù)傳輸模塊是在分頻模塊建立的I2C總線基礎(chǔ)之上通過(guò)Moore型有限狀態(tài)機(jī)完成,其具體流程見(jiàn)圖4。
VHDL軟件編程中,建立起FPGA對(duì)PCF8591T的完全控制,時(shí)鐘總線SCL采用單向總線方式由FPGA發(fā)送所有的時(shí)鐘信號(hào)至PCF8591T,數(shù)據(jù)總線SDA的通信雙方是相互的數(shù)據(jù)傳輸過(guò)程,采用雙向總線實(shí)現(xiàn)。編譯通過(guò)后的RTL級(jí)電路如圖5所示。
在VHDL設(shè)計(jì)的I2C軟件程序中,主要涉及啟動(dòng)、停止、應(yīng)答/非應(yīng)答以及數(shù)據(jù)傳送4個(gè)部分,其中數(shù)據(jù)傳送部分是核心部分,部分程序如下:
圖4 PCF8591T的I2C總線通訊軟件流程圖
圖5 I2C總線RTL級(jí)接口電路
在MOORE型有限狀態(tài)機(jī)的驅(qū)動(dòng)下,在每個(gè)I2C總線的高電平期間讀取來(lái)自PCF8591T的位轉(zhuǎn)換數(shù)字量信息,經(jīng)過(guò)8個(gè)總線周期自高位到低位依次讀取1個(gè)字節(jié)信息量;在第8個(gè)周期的總線低電平期間完成1個(gè)字節(jié)信息量的存儲(chǔ),以便用于后續(xù)的處理任務(wù)。之所以是高電平進(jìn)行數(shù)據(jù)讀取傳輸,是因?yàn)橛邢逘顟B(tài)機(jī)只能在狀態(tài)內(nèi)進(jìn)行數(shù)據(jù)操作,與I2C總線的規(guī)定低電平數(shù)據(jù)變化,高電平數(shù)據(jù)穩(wěn)定傳輸存在一定的差異。
I2C總線的Quartus II仿真,受到SDA數(shù)據(jù)總線是雙向傳輸總線的影響,不能通過(guò)下載到FPGA器件里的程序?qū)崿F(xiàn)。為了確保仿真的正常展開(kāi),引入3組來(lái)自PCF8591T的虛擬數(shù)字轉(zhuǎn)換值實(shí)現(xiàn)。圖6即引入虛擬數(shù)據(jù)后修改部分程序后的功能仿真圖。
圖6中的輸入量data0,data1,data2模擬來(lái)自PCF8591T轉(zhuǎn)換后的數(shù)字量;CLK_scl是經(jīng)過(guò)分頻后的I2C總線主頻;Reset是I2C總線復(fù)位信號(hào),設(shè)置為高電平保持其無(wú)效狀態(tài);SCL是I2C總線時(shí)鐘,從FPGA至PCF8591T的單向時(shí)鐘信號(hào);SDA是I2C數(shù)據(jù)總線,典型雙向信號(hào);channel0_data,chan?nel1_data,channel2_data即經(jīng)過(guò)IIC總線傳送到FP?GA內(nèi)部的3組轉(zhuǎn)換的數(shù)字量。
從圖6中可以看出,由于I2C總線傳輸送率高,A/D轉(zhuǎn)換時(shí)間很短,假定3組模擬量同時(shí)轉(zhuǎn)換。轉(zhuǎn)換完的數(shù)字量在I2C總線控制信號(hào)作用下,依次將數(shù)字量傳送到FPGA內(nèi)部設(shè)置的3個(gè)寄存器中。SDA~result是FPGA內(nèi)部自動(dòng)生成的臨時(shí)SDA總線位寄存器,可以清楚地再現(xiàn)IIC總線的起始信號(hào)S、應(yīng)答信號(hào)/非應(yīng)答信號(hào)ACK以及終止信號(hào)P。
圖6 I2C總線通訊功能仿真圖
根據(jù)工業(yè)現(xiàn)場(chǎng)需求,設(shè)計(jì)了硬件描述語(yǔ)言VH?DL的I2C總線通信程序,通過(guò)Altera公司Cyclone II器件EP2C5Q208C8N在對(duì)象模數(shù)轉(zhuǎn)換芯片PCF8591T上成功實(shí)施,較好地驗(yàn)證了FPGA器件具有良好的接口適應(yīng)能力。樣機(jī)試制后經(jīng)過(guò)工業(yè)現(xiàn)場(chǎng)測(cè)試,獲得了理想的運(yùn)行結(jié)果,表明FPGA器件在工業(yè)領(lǐng)域也具有強(qiáng)健的核心競(jìng)爭(zhēng)力。
[1]李全利.單片機(jī)原理及接口技術(shù)[M].2版.北京:高等教育出版社,2009:222.
[2]百度百科.FPGA[EB/OL].[2015-06-16].http://baike. baidu.com/link?url=uLbhqpY7MK658-NuJSVLqJebmcZ?lI5-TwZ04wvJPHg91cEeMEd9uojBgw8Eovx2N9I0fTWU Uozq0tR2aGRnuSK#6.
[3]Philips.PCF8591 8-bit A/D and D/A converter[K].Phil?ips Semiconductors,2003:5-6.
Application Research of I2C Bus Based on FPGA
Wei Haibo,Ma Zheng,Liu Jie
(School of Electrical&Information Engineering,Hubei University of Automotive Technology,Shiyan 442002,China)
As the serial bus of high performance,I2C Bus has been widely used in the field of microelec?tronics.Using hardware description language VHDL and Moore finite state machine,the I2C bus control?ler of analogy-to-digital converter PCF8591T was designed through programming on EP2C5Q208C8N platform.The experimental results show that the I2C bus controller is stable and reliable by I2C bus in?terface protocol.
I2C bus;serial transmission bus;finite state machine;hardware description language;inter?face protocol
TP336
A
1008-5483(2015)03-0048-04
2015-06-19
湖北省自然基金重點(diǎn)項(xiàng)目(2012FFA062)
魏海波(1984-),男,湖北十堰人,碩士,從事電源及其相關(guān)技術(shù)研究。E-mail:xinxin840920@163.com
湖北汽車(chē)工業(yè)學(xué)院學(xué)報(bào)2015年3期