| 摘要:為了擴展I2C總線(Inter IC BUS)外圍器件的使用范圍,設計出了虛擬I2C總線軟件包VIICC1.0,介紹了它的1個應用實例。結果表明:該軟件包具有可靠的性能和廣泛的適應性,有利于I2C接口器件在不帶I2C總線接口的微控制器(MCU)系統(tǒng)中的應用。 關鍵詞:I2C總線單片機程序設計 一、 I2C總線簡介 串行擴展總線在單片機系統(tǒng)中的應用是目前單片機技術發(fā)展的一種趨勢。在目前比較流行的幾種串行擴展總線中,I2C總線以其嚴格的規(guī)范和眾多帶I2C接口的外圍器件而獲得廣泛的應用。 I2C總線是PHILIPS公司推出的芯片間串行傳輸總線。它以1根串行數據線(SDA)和1根串行時鐘線(SCL)實現了全雙工的同步數據傳輸。隨著I2C總線研究的深入,它已經廣泛應用于視/音頻領域、IC卡行業(yè)和一些家電產品中,在智能儀器、儀表和工業(yè)測控領域也越來越多地得到應用。 I2C總線的廣泛應用是同它卓越的性能和簡便的操作方法分不開的。I2C總線的特點主要表現在以下幾個方面: (1) 硬件結構上具有相同的硬件接口界面。I2C總線系統(tǒng)中,任何一個I2C總線接口的外圍器件,不論其功能差別有多大,都是通過串行數據線(SDA)和串行時鐘線(SCL)連接到I2C總線上。這一特點給用戶在設計應用系統(tǒng)中帶來了極大的便利性。用戶不必理解每個I2C總線接口器件的功能如何,只要將器件的SDA和SCL引腳連到I2C總線上,然后對該器件模塊進行獨立的電路設計,從而簡化了系統(tǒng)設計的復雜性,提高了系統(tǒng)抗干擾的能力,符合EMC (Electromagnetic Compatibility)設計原則。 (2) 總線接口器件地址具有很大的獨立性。在單主系統(tǒng)中,每個I2C接口芯片具有惟一的器件地址,由于不能發(fā)出串行時鐘信號而只能作為從器件使用。各器件之間互不干擾,相互之間不能進行通信,各個器件可以單獨供電。MCU與I2C器件之間的通信是通過獨一無二的器件地址來實現的。 (3) 軟件操作的一致性。由于任何器件通過I2C總線與MCU進行數據傳送的方式是基本一樣的,這就決定了I2C總線軟件編寫的一致性。 (4) PHILIPS公司在推出I2C總線的同時,也為I2C總線制訂了嚴格的規(guī)范,如:接口的電氣特性、信號時序、信號傳輸的定義等。規(guī)范的嚴密性,結構的獨立性和硬、軟件接口界面的一致性,極大地方便了I2C總線設計的模塊化和規(guī)范化,伴隨而來的是用戶在使用I2C總線時的“傻瓜”化。 一、開發(fā)虛擬I2C總線軟件包的必要性 所謂的虛擬I2C總線是指借用MCU的2根通用I/O口線來虛擬I2C總線接口,而用軟件來實現I2C協(xié)議的一種總線虛擬方式。 虛擬I2C總線軟件包的產生及其應用是由虛擬I2C總線的廣泛需求和I2C總線的特點來決定的。其原因和應用現狀主要表現在以下幾個方面: (1) 有大量的外圍接口器件,如PCF8574、PCF8591、CAT24WC256C等都帶有I2C接口?墒菐2C總線接口的MCU卻不多,例如AT89C52、8051、68HC05和68HC11等都不帶I2C總線接口。虛擬I2C總線的產生大大地擴展了I2C總線外圍器件的應用范圍。 (2) PHILIPS公司為了將I2C總線器件應用到不帶I2C接口的MCU系統(tǒng)中,推出了PCF8584作為不帶I2C接口的MCU與I2C總線連接的轉接器。但是,在一些小型的單片機應用系統(tǒng)和對時序要求不是很嚴格的系統(tǒng)中,這種做法不僅會增加硬件成本,而且會增加線路的復雜性,不利于實現系統(tǒng)設計的最簡化和最優(yōu)化。 (3) 如簡介所述,I2C總線在進行數據傳輸方面,對于不同的I2C器件具有相同的操作模式,遵循相同的規(guī)范,這就為I2C總線的軟件虛擬提供了實現的可能性。 (4) 通過查閱近幾年I2C總線應用方面的資料,發(fā)現虛擬I2C總線有了一定程度的應用。但是,在應用的過程中也有一些不盡人意的地方,如:大多數I2C總線操作程序都是針對具體的器件,按照I2C總線協(xié)議從最基本的時序編寫的;I2C協(xié)議的復雜性和不同器件的互異性決定了一個程序一個樣,可移植性較差,給I2C總線的應用造成了不應有的障礙。因此,I2C總線的用戶只有轉變觀念,將I2C總線的應用開發(fā)由板凳模式變成平臺模式,才能夠為I2C總線應用范圍的進一步擴大產生更大的推動作用。 基于此,本文將虛擬I2C總線軟件包VIICC1.0公布出來,希望它能夠給I2C總線應用人員提供一些幫助。 二、 虛擬I2C總線軟件包VIICC1.0 I2C總線是一種多主系統(tǒng)總線,總線上可有多個MCU,因此有4種工作方式:主發(fā)送、主接收、從發(fā)送和從接收。虛擬I2C總線軟件包VIICC1.0虛擬了單主系統(tǒng)的I2C總線,即主發(fā)送和主接收。不過,在實際應用中,單片機應用系統(tǒng)絕大多數是單主系統(tǒng),因此它不會影響虛擬I2C總線軟件包的廣泛應用。 虛擬I2C總線軟件包VIICC1.0是用Franklin C51編寫的。它由1個頭文件和1個源程序組成。頭文件(VIICC.H)的清單如下: 三、 虛擬I2C總線軟件包VIICC1.0應用界面 在應用VIICC1.0時,用戶要做的工作是: (1) 將虛擬I2C總線軟件包的頭文件復制到Franklin C51編譯器的..\c51\inc目錄下; (2) 將上面介紹的源程序復制到應用系統(tǒng)主程序的末尾; (3) 在主程序的最上面添加如下1條指令: #include <VIICC.H> 做完上面的工作后,用戶就可以自如地使用這個軟件包了。在使用時,用戶不必關心I2C外圍器件功能如何,都使用下面的幾條指令: rdnbyt(uchar slar,uchar qq[],uchar number); 或:wrnbyt(uchar slaw,uchar ff[],uchar number); 其中:slar/slaw是從器件的地址(讀/寫); number是需要讀寫的數據字節(jié)的個數; qq[]是從虛擬I2C總線上讀出的數據數組; ff[]是需要向虛擬I2C總線上寫入的數據數組。 VIICC1.0占用資源與VIIC1.0(見《單片機與嵌入式系統(tǒng)應用》2001年第2期上的相應文章)占用資源基本上一樣。由于VIICC1.0的設計是基于12MHz的時鐘設計的,因此當晶振頻率發(fā)生變化時,須要在頭文件中適當修改nop ( )的個數。另外,當所使用的通用I/O口線發(fā)生變化時,須要在頭文件中對SDA與SCL的宏定義進行修改。 四、c虛擬I2C總線軟件包 在CAT24WC256C中的應用 CAT24WC256C是CATLYST推出的可直接和MCS-51接口的E2PROM。它遵循I2C總線協(xié)議,使用SDA和SCL雙總線進行數據通信。 CAT24WC256C是256K位(32KB)的串行CMOS E2PROM,有1個64字節(jié)的頁寫緩沖器。它能在1.8~6.0V的寬電壓范圍內工作,實現了寫保護功能,即當其WP引腳為高電平時進入寫保護狀態(tài)。CAT24WC256C的引腳分配及其定義如圖1所示。 圖1 CAT24WC256C的引腳分配及其定義 從圖1中可以看出,在單主系統(tǒng)中,由A1和A0地址譯碼最多可以接4片CAT24WC256C器件,即最多可擴展128KB的E2PROM。由于它不能發(fā)出串行時鐘信號和啟、停信號,因此,只能作為從器件被操作。 CAT24WC256C的器件地址格式為: 1 0 1 0 0 A1 A0 R/W 這個器件地址的最高5位固定為10100,A1和A0為器件的地址,這些位必須與硬件連線輸入腳A1和A0位相對應,最低位(R/)為讀寫控制位,“1”表示對器件進行讀操作;“0”表示對器件進行寫操作。CAT24WC256C收到起始信號和從器件地址字節(jié)后,比較從器件地址,如果發(fā)現與其自身地址相符合,則響應1個應答信號,然后根據(R/)位來進行讀/寫操作。 CAT24WC256C的寫操作中有2種方式:字節(jié)寫或頁寫,它們的本質是一樣的,不同的是所傳輸的數據字節(jié)數不同,例如頁寫時序如下: CAT24WC256C的讀操作有3種方式:立即/當前地址讀、隨機讀和連續(xù)讀。立即地址讀與隨機讀基本上是一樣的,不同的是立即讀的地址是上次進行操作的地址+1;隨機讀可以由用戶隨意指定1個地址;連續(xù)讀可以對1個存儲區(qū)進行多個字節(jié)的連續(xù)讀。以連續(xù)讀為例,它的操作時序如下: 在操作中要注意頁的自動翻轉問題,解決頁自動翻轉問題的方法是在頁操作中不要一次傳輸超過64個字節(jié)的數據。 虛擬I2C總線軟件包VIICC1.0在CAT24WC256C中應用的電路原理圖如圖2所示。 圖2 虛擬I2C總線軟件包 在CAT24WC256C中的應用原理圖 在這個應用實例中,首先向CAT24WC256C中起始地址為0x0080連續(xù)存儲區(qū)中寫入64個字節(jié)的數據,然后再將這64個字節(jié)讀出來,放在輸出數組中,下面是部分源代碼。 …… 點擊下載代碼 結束語 虛擬I2C總線軟件包VIICC1.0在作者的多項科研工作中得到應用,運行效果良好,表明該軟件包具有可靠的性能和廣泛的適應性,具有一定的參考價值。MES 參考文獻 1 何立民. I2C總線應用系統(tǒng)設計. 北京:北京航空航天大學出版社,1995 2 何立民. 單片機高級教程. 北京:北京航空航天大學出版社,2000 3 王晶晶,容太平. IC卡中I2C BUS設計及其在儀表中的應用. 儀表技術,1999(2):32~34 4 周軍,張瑞蘭. PCF8584 I2C總線擴展器的應用. 電測與儀表,1998(10):36~38
|