I2C總線在如今比較流行的串行擴展總線中,以其嚴(yán)格的規(guī)范和眾多支持I2C接VI的外圍器件而獲得了廣泛的應(yīng)用。它適合于較復(fù)雜單片機應(yīng)用系統(tǒng)中元件與芯片之間的短距離通信,主要應(yīng)用于板級的IC通信。本文介紹了基于單片機的I2C總線系統(tǒng)設(shè)計過程,其中包括了硬件和軟件的設(shè)計。
1.I2C總線介紹
I2C(inter—integrated circuit)總線是一種由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。I2C總線產(chǎn)生于80年代,最初為音頻和視頻設(shè)備開發(fā),如今主要應(yīng)用于板級的IC通信需要,即主要被用作硬件系統(tǒng)中的電路板上各個IC芯片的相互通信的線路,I2C總線在系統(tǒng)設(shè)計中十分常見。
I2C總線最主要的優(yōu)點是其簡單性和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本??偩€的長度可高達25英尺,并且能夠以l0kbps的最大傳輸速率支持40個組件。I2C總線的另一個優(yōu)點是,它支持多主控(multimastering),其中任何能夠進行發(fā)送和接收的設(shè)備都可以成為主總線。一個主控能夠控制信號的傳輸和時鐘頻率。當(dāng)然,在任何時間點上只能有一個主控。
2.I2C總線硬件接口設(shè)計
在進行I2C總線硬件接口設(shè)計時使用的是Philips公司生產(chǎn)的P89C66X系列單片機,其片內(nèi)的I2C總線邏輯提供了符合I2C總線規(guī)范的串口,它們具有性能穩(wěn)定、速度快、使用方便等優(yōu)點。
2.1單片機I2C總線接口引腳設(shè)計
P89C66X系列單片機有44引腳的LQFP封裝和PLCC封裝,其中P1.6/SCL和P1.7/SDA分別為I2C總線的時鐘信號線和數(shù)據(jù)信號線,由于芯片內(nèi)部都采用了漏極開路工藝,所以當(dāng)把這兩個引腳作為I2C總線的接口使用時,需要外接上拉電阻,如圖1所示。
圖1 P89C66X的I2C總線接口引腳
2.2單片機I2C總線相關(guān)寄存器
P89C66X系列單片機內(nèi)部與I2C總線相關(guān)的寄存器共有4個,其功能列于表1,通過對這4個寄存器的編程實現(xiàn)I2C總線的功能。
表1I2C總線寄存器
2.3設(shè)計要點
在硬件系統(tǒng)中應(yīng)用I2C總線進行連接控制,可以有效的減少單片機I/O端口資源的占用,這在單片機應(yīng)用中是十分重要的,這也是I2C總線得以廣泛應(yīng)用的主要原因。此外,I2C總線在設(shè)計思想上也是十分突出的,其模塊化的設(shè)計思想符合硬件系統(tǒng)設(shè)計的潮流。應(yīng)用I2C總線進行設(shè)計,可以將整個硬件系統(tǒng)分為不同的功能模塊,每個功能模塊分別設(shè)計,不會受到其它模塊的影響,設(shè)計完成后,使用統(tǒng)一的I2C總線接口連入系統(tǒng),這樣的系統(tǒng)各個部分不會相互干擾,每一個模塊只與自身電路相關(guān),大大簡化了設(shè)計和調(diào)試的過程,也提高了通用設(shè)備的復(fù)用率。
3.I2C總線接口軟件設(shè)計
針對P89C66X系列單片機的I2C總線進行軟件程序設(shè)計,首先要了解I2C總線的26個狀態(tài),其次要根據(jù)應(yīng)用中要求的模式來設(shè)定各個寄存器,最后編寫出完整的應(yīng)用程序。下面是P89C66X系列單片機的I2C總線以主模式工作的軟件設(shè)計方法。
3.1向無子地址器件發(fā)送字節(jié)數(shù)據(jù)
當(dāng)單片機在主模式下向從器件發(fā)送字節(jié)數(shù)據(jù)時,首先,單片機要申請總線,在得到總線的控制權(quán)后,發(fā)送器件的7bit地址編碼,這時判斷狀態(tài)寄存器SlSTA的值是否為0x18(0xl8代表的狀態(tài)為主器件已經(jīng)發(fā)送SLA+W,并且收到應(yīng)答),如果不是0x18,則表示發(fā)送發(fā)生錯誤;如果是0x18,則繼續(xù)發(fā)送數(shù)據(jù)字節(jié)。然后判斷S1STA的值是否為0x28(0x28代表的狀態(tài)是主器件已經(jīng)發(fā)送數(shù)據(jù)寄存器SIDAT中的數(shù)據(jù),并受到應(yīng)答),如果是0x28,則表示發(fā)送數(shù)據(jù)成功,此時要將控制寄存器SICON的SI復(fù)位,結(jié)束此次傳送。
3.2從無子地址器件讀字節(jié)數(shù)據(jù)
當(dāng)單片機在主模式下向從器件讀字節(jié)數(shù)據(jù)時,單片機在申請到總線后發(fā)送從器件地址,隨后檢測總線狀態(tài),如果S1STA寄存器的值為0x40(0x40代表的狀態(tài)為主器件已經(jīng)發(fā)送SLA+R,并且收到應(yīng)答),表明地址發(fā)送成功,程序準(zhǔn)備接收數(shù)據(jù)字節(jié),否則表示發(fā)送發(fā)生錯誤。程序在接收字節(jié)后判斷SISTA的值是否為Ox58(0x58代表的狀態(tài)是主器件已經(jīng)收到數(shù)據(jù)字節(jié),并返回應(yīng)答),如果是0x58,則表示發(fā)送數(shù)據(jù)成功,此時要將控制寄存器SICON的SI復(fù)位,結(jié)束此次傳送。
3.3向有子地址器件發(fā)送和接收字節(jié)數(shù)據(jù)
在I2C總線器件中,每個器件除了擁有其自身的從地址外,部分器件還可以具有子地址。在對子地址指向的空間通信時,主器件需要依次發(fā)送從地址和子地址才可以正常尋址。其實現(xiàn)過程與前面發(fā)送和接收字節(jié)的過程基本相同,只是要注意發(fā)送器件從地址后,還要發(fā)送一個子地址信息才可以繼續(xù)發(fā)送或者接收數(shù)據(jù)。其編程流程如圖2所示。
圖2 有子地址器件發(fā)送和接收數(shù)據(jù)流程圖
總結(jié)
以上就是基于單片機的I2C總線系統(tǒng)設(shè)計與開發(fā)介紹了。在進行I2C總線的設(shè)計與開發(fā)時,需要首先將整體系統(tǒng)的功能進行劃分,對各個不同的功能部分進行獨立的設(shè)計,最后使用12C總線接口將整個系統(tǒng)連接到一起。值得注意的是,在設(shè)計的過程中,每完成一個功能模塊的設(shè)計,就應(yīng)該進行調(diào)試,直到完全達到設(shè)計的要求,再開始下一個模塊的設(shè)計,這樣所有模塊設(shè)計完成后,可以直接連入系統(tǒng)進行最后的整合工作,如此整個調(diào)試過程中出現(xiàn)的任何問題都可以直接找到對應(yīng)的部分,降低系統(tǒng)調(diào)試的難度。
電話:18923864027(同微信)
QQ:709211280
〈烜芯微/XXW〉專業(yè)制造二極管,三極管,MOS管,橋堆等,20年,工廠直銷省20%,上萬家電路電器生產(chǎn)企業(yè)選用,專業(yè)的工程師幫您穩(wěn)定好每一批產(chǎn)品,如果您有遇到什么需要幫助解決的,可以直接聯(lián)系下方的聯(lián)系號碼或加QQ/微信,由我們的銷售經(jīng)理給您精準(zhǔn)的報價以及產(chǎn)品介紹