I2C總線(inter integrated circuit bus)由飛利浦公司于20世紀(jì)80年代研究開發(fā),。I2C總線接口電路其簡(jiǎn)單性和有效性而被廣泛用于連接微處理器及外圍設(shè)備,。在電視中頻解調(diào)電路中,二線制的I2C總線接口電路使得主控制器只需要2個(gè)引腳便可實(shí)現(xiàn)對(duì)解調(diào)電路所有功能的控制,,且總線接口集成在器件中,,各電路單元之間只需要最簡(jiǎn)單的連接,大大簡(jiǎn)化了電路板上的走線,,減少了電路板面積,,提高了其可靠性,降低了成本,。
在該中頻解調(diào)的接口電路中,,基于I2C總線傳輸協(xié)議,通過(guò)對(duì)狀態(tài)機(jī)與控制邏輯的優(yōu)化設(shè)置,,只需要1個(gè)3位的狀態(tài)機(jī)便可實(shí)現(xiàn)電路的使能,、啟動(dòng)、終止,、應(yīng)答,、復(fù)位、選址等功能,,電路得到了最優(yōu)化,,且通過(guò)地址選擇位的增加,防止了芯片地址沖突,,極大地改善了電路的可靠性及穩(wěn)定性,。
1 I2C總線的特點(diǎn)及數(shù)據(jù)傳輸
1.1 總線特點(diǎn)
I2C總線是由數(shù)據(jù)線SDA和時(shí)鐘線SCL構(gòu)成的雙向串行總線,I2C總線上的所有節(jié)點(diǎn),,如主控器,、外圍器件、接口模塊都連接到SDA,,SCL上,,在總線備用時(shí),SDA和SCL都保持高電平,,I2C不工作時(shí)SCL嵌位在低電平,。為了使總線上所有電路的輸出都能實(shí)現(xiàn)“線與”功能,I2C總線接口電路的輸出端必須是漏極開路結(jié)構(gòu),,輸出端要接上拉電阻,。
1.2 總線的數(shù)據(jù)傳輸格式
I2C總線數(shù)據(jù)傳送格式按圖1進(jìn)行,。首先由主控設(shè)備發(fā)出起始信號(hào)(S),即SDA在SCL高電平期間由高電平跳變?yōu)榈碗娖?,然后主控器發(fā)送1個(gè)字節(jié)的數(shù)據(jù),。首先傳送的是最高位(MSB)。在傳輸了每個(gè)字節(jié)之后,,必須要有接收設(shè)備發(fā)出1位應(yīng)答信號(hào),。
起始信號(hào)后的第1個(gè)字節(jié)是尋址字節(jié),尋址字節(jié)的高7位是接收設(shè)備的地址,,第8位是方向位,,“O”發(fā)送數(shù)據(jù)(寫狀態(tài)),“1”接收數(shù)據(jù)(讀狀態(tài)),。尋址字節(jié)后面可以有很多數(shù)據(jù)字節(jié),,每個(gè)字節(jié)后都要有一位發(fā)自接收設(shè)備的應(yīng)答信號(hào)。在結(jié)束與該接收設(shè)備通信時(shí),,主控設(shè)備
必須發(fā)出終止信號(hào)(P),,即在時(shí)鐘線SCL為高電平期間,SDA由低電平跳變?yōu)楦唠娖健?/p>
2 中頻解調(diào)電路I2C總線接口的實(shí)現(xiàn)
電視中頻解調(diào)電路中的I2C總線接口主要由輸入濾波器,、地址寄存器,、移位寄存器,、控制寄存器,、狀態(tài)機(jī)與控制邏輯、讀狀態(tài)寄存器,、輸出模式寄存器等構(gòu)成,,如圖2所示。其中,,輸入濾波器具有I2C總線邏輯兼容電平,,輸入時(shí)鐘與內(nèi)部時(shí)鐘同步,可濾除部分干擾信號(hào),??刂七壿嬜鳛榭刂坪诵目刂浦恳徊糠值臓顟B(tài)。地址寄存器存放著自己的7位地址,,用來(lái)與接收到的地址比較,。移位寄存器、輸出模式寄存器與讀狀態(tài)寄存器端口并行相接,,各存儲(chǔ)著8位數(shù)據(jù)字節(jié),。
(1)起始信號(hào)與結(jié)束信號(hào)檢測(cè)。起始信號(hào)與結(jié)束信號(hào)的檢測(cè)由2個(gè)下降沿D觸發(fā)器和1個(gè)反相器構(gòu)成,,如圖3所示,。D1在SDA從高電平跳變到低電平時(shí)觸發(fā),,此時(shí)只有當(dāng)SCL保持高電平時(shí),Start才為1,,即檢測(cè)到起始信號(hào),。同理,D2在SDA從低電平跳變到高電平時(shí)觸發(fā),,此時(shí)只有當(dāng)SCL保持高電平時(shí),,Stop才為1,即檢測(cè)到結(jié)束信號(hào),。
(2)地址檢測(cè),。根據(jù)設(shè)計(jì)要求,I2C總線每次通信輸入8位地址數(shù)據(jù)和控制數(shù)據(jù),,電路進(jìn)行地址比較以后,,如果地址正確,則接收控制數(shù)據(jù),。為了防止地址沖突,,增加了地址選擇位,具體實(shí)現(xiàn)如圖4所示,。D7~D1為發(fā)送的數(shù)據(jù)地址,,由于S1,S2是可設(shè)置端口,,有4種組合,,即總線接口有4個(gè)地址,分別為 1000010,,100001l,,1001010,100101l,,只有當(dāng)D7~D1為100S101S2時(shí),,選址成功,即可以有效解決地址沖突,。
(3)數(shù)據(jù)串并與并串的轉(zhuǎn)換,。電路中,串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù),、并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)主要由移位寄存器完成,。它以并行方式與輸出模式寄存器和讀狀態(tài)寄存器相連;以串行方式與數(shù)據(jù)線SDA相連,。發(fā)送的數(shù)據(jù)由讀狀態(tài)寄存器裝載到數(shù)據(jù)寄存器中,。發(fā)送后數(shù)據(jù)又從串行通道返回?cái)?shù)據(jù)寄存器中,接收數(shù)據(jù)時(shí),,數(shù)據(jù)寄存器裝入SDA線上的數(shù)據(jù),。
(4)內(nèi)部總線狀態(tài)的檢測(cè),。讀狀態(tài)寄存器連接著內(nèi)部總線的8位狀態(tài)位S0~S7,在讀狀態(tài)時(shí),,該寄存器將內(nèi)部總線的狀態(tài)讀進(jìn)去,,再以并行方式傳給移位寄存器,移位寄存器以串行的方式傳給數(shù)據(jù)線,,即內(nèi)部總線狀態(tài)被主控器讀取,,如圖5所示。
(5)并行端口的擴(kuò)展,。根據(jù)芯片功能的需要,,設(shè)置了4組輸出模式寄存器,分別為調(diào)整模式寄存器,、備用寄存器,、開關(guān)模式寄存器、數(shù)據(jù)模式寄存器,。寄存器個(gè)數(shù)可根據(jù)芯片功能的需要進(jìn)行并行擴(kuò)展,,由于每一組寄存器都對(duì)應(yīng)著相應(yīng)的子地址,所以每一組寄存器對(duì)應(yīng)相應(yīng)的時(shí)鐘CPl,,CP2,,CP3,CP4和控制端 C1,,C2,,C3,C4,。這些時(shí)鐘和控制端由1個(gè)帶控制端的2/4譯碼器輸出,,所以每次只有1組寄存器工作,,如圖5所示,。
(6)狀態(tài)機(jī)與控制邏輯的設(shè)置與優(yōu)化。狀態(tài)機(jī)與控制邏輯作為I2C接口的控制中心,,主要用于控制I2C接口電路的使能,、啟動(dòng)、終止,。圖5給出寄存器組圖的應(yīng)答,、復(fù)位、選址及中斷請(qǐng)求等,。通過(guò)對(duì)狀態(tài)機(jī)與控制邏輯的優(yōu)化設(shè)置,,僅使用3位狀態(tài)作為狀態(tài)機(jī)的狀態(tài)端,在滿足更多功能的基礎(chǔ)上,,電路更易于實(shí)現(xiàn),。如圖6 所示,,3個(gè)觸發(fā)器的輸出Q18,Q15,,Q16為狀態(tài)機(jī)的狀態(tài),,Qd0~Qd8為移位寄存器的輸出,HL91為移位寄存器的可控復(fù)位端,,G111為地址檢測(cè)位,,HL22為應(yīng)答位,C5,,C6為移位寄存器與讀狀態(tài)寄存器的控制端,。
上電后,狀態(tài)機(jī)的初始值被置位為全0,。HL91作為移位寄存器輸入端的置位端將移位寄存器的輸入端置0,。當(dāng)初始信號(hào)到來(lái)時(shí),start信號(hào)變?yōu)?,,此時(shí)狀態(tài)機(jī)的狀態(tài)變?yōu)?00,,開始傳送尋址字節(jié);當(dāng)8位地址傳送完畢后,,假設(shè)為寫狀態(tài),,此時(shí)Qd8變?yōu)楦唠娖剑瑧?yīng)答位HL22由高電平變?yōu)榈忘c(diǎn)平,,狀態(tài)機(jī)的狀態(tài)變?yōu)?10,。HL91變高將移位寄存器的輸入置0,響應(yīng)結(jié)束后,,應(yīng)答位由低電平變?yōu)楦唠娖?,狀態(tài)機(jī)的狀態(tài)變?yōu)?10,此時(shí)開始傳輸數(shù)據(jù),。
I2C總線開始工作后,,主控器便發(fā)送尋址字節(jié)給移位寄存器,在移位寄存器將7位串行地址并行移出,,且與地址寄存器的從地址進(jìn)行比較,,當(dāng)?shù)刂废嗤瑫r(shí),Glll變?yōu)?,,尋址成功,,此時(shí)應(yīng)答信號(hào)HL22變?yōu)?,并告知主控制器,。在尋址成功后,,如果為讀狀態(tài),則在傳完該字節(jié)之后,產(chǎn)生應(yīng)答信號(hào),,狀態(tài)機(jī)變?yōu)?00,,移位寄存器控制端C5變?yōu)榈碗娖剑x狀態(tài)寄存器的控制端C6變?yōu)楦唠娖?,讀狀態(tài)寄存器讀入內(nèi)部總線狀態(tài),。其中,QI20是與讀/寫有關(guān)的控制端,,響應(yīng)結(jié)束后,,狀態(tài)機(jī)狀態(tài)變?yōu)?10,此時(shí),,C5變?yōu)楦唠娖?,C6變?yōu)榈碗娖剑x狀態(tài)寄存器將存儲(chǔ)的8位狀態(tài)位并行傳給移位寄存器,;移位寄存器將狀態(tài)串行移出,,發(fā)送給主控制器;主控制器接收到8位狀態(tài)位后,,發(fā)送非應(yīng)答信號(hào)給接收器,,使它釋放數(shù)據(jù)線;響應(yīng)結(jié)束后,,主控制器產(chǎn)生結(jié)束信號(hào),,結(jié)束數(shù)據(jù)傳送?!∪绻麨閷憼顟B(tài),,在接收器產(chǎn)生應(yīng)答信號(hào)后,主控器將發(fā)送子地址給移位寄存器,。根據(jù)輸出模式寄存器功能的不同,,分別對(duì)應(yīng)3組不同的子地址。在狀態(tài)機(jī)與控制邏輯的作用下,,子地址具有自動(dòng)加1功能,,所以在讀寫多字節(jié)時(shí),可以實(shí)現(xiàn)自動(dòng)操作,,加上后面的2/4譯碼器,,每次只選通1路輸出模式寄存器,如圖7所示,。
在所有數(shù)據(jù)發(fā)送完畢后,接收器發(fā)送應(yīng)答信號(hào)給主控制器,,響應(yīng)結(jié)束后,,主控制器發(fā)送停止信號(hào)(P),結(jié)束數(shù)據(jù)傳送,。
3 仿真結(jié)果
通過(guò)VHDL的程序編寫,,對(duì)I2C模塊進(jìn)行了分析綜合,,得到如圖8、圖9的仿真結(jié)果,。
在寫狀態(tài)時(shí),,尋址位后的讀/寫位為0,C6一直為低電平,,即讀狀態(tài)寄存器不工作,,在開始后的第8個(gè)時(shí)鐘,移位寄存器將SDA的數(shù)據(jù)并行移出,,第9個(gè)時(shí)鐘時(shí),,應(yīng)答位HL22變?yōu)榈碗娖健T谧x狀態(tài)時(shí),,當(dāng)傳完7位尋址位和“1”方向位時(shí),,C5變?yōu)榈碗娖剑珻6變?yōu)楦唠娖?,讀狀態(tài)寄存器工作,,可將內(nèi)部總線狀態(tài)讀進(jìn)來(lái)。
在讀/寫2種狀態(tài)下,,I2C控制模塊都能很好地實(shí)現(xiàn)I2C總線的開始,、停止、讀,、寫,、響應(yīng)等功能,仿真結(jié)果正確,,完全符合I2C總線標(biāo)準(zhǔn)和電路預(yù)期的要求,。
4 結(jié) 語(yǔ)
目前,I2C總線已作為一種標(biāo)準(zhǔn)廣為人們接受,,除了帶有I2C總線的單片機(jī)和一些常用的外圍設(shè)備器件,,在電信、電視,、音像等產(chǎn)品中都有成套的I2C總線器件,。
隨著大量串行數(shù)據(jù)的傳輸,I2C總線的傳輸速率已提升為高速模式,,可達(dá)到3.4 Mb/s,,尋址范圍也由原來(lái)的7位擴(kuò)展為10位,這樣被控器的地址數(shù)量約增加了10倍,。