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