1 前 言
I2C總線接口器件在視頻處理、移動通信等領域的應用已經非常普遍。另外,通用的I2C總線接口器件,如帶I2C總線的RAM,ROM,A/D,D/A,LCD驅動器等,也越來越多地應用于計算機及自動控制系統中。隨著I2C接口器件越來越廣泛的應用,8051系列單片機與他之間的通信越來越頻繁。
8051系列單片機與I2C總線接口器件通信時,8051的通用口與I2C總線器件的SCL,SDA連接。根據I2C 總線數據傳輸協議,8051必須對其兩個通用口進行頻繁的置位、清零。根據基于51指令系統編制的匯編程序,傳送一位數據,需要9個機器周期,而對于 8051,一個機器周期要耗費6個時鐘周期,即用54個時鐘周期才能傳送一位數據。如此則極大地占用了CPU的工作時間,降低了系統的工作效率,導致I2C器件的優勢難以顯現。因此,有必要設計8051與I2C總線的專用接口電路。該接口電路能夠對I2C總線上的數據進行自動收發,而CPU只需要通過并口訪問該接口電路中的有關寄存器就可以實現與I2C器件的數據交換,從而使整個系統的性能得到提高。本設計用VHDL硬件描述語言為工具,用ALTERA公司的 MAXPLUSⅡ軟件進行編譯仿真,下載芯片為EPM7128SLC84-15。
2 設計目標和要求
為了提高數據傳送的速度,設計一個I2C接口電路。8051不直接與I2C器件交換數據,而是通過并口與該I2C接口電路交換數據,I2C總線上的數據傳送也通過該I2C接口電路來完成。從而通過CPU的外部存儲器讀寫指令就可實現與I2C器件的數據交換,使對串口的操作用并口的方式來實現。
在I2C接口電路內部有一個控制寄存器CI0和一個數據寄存器CI1,即I2C接口電路占用兩個地址。通過寫控制寄存器CI0的內容實現對I2C接口電路的編程,讀寫數據寄存器CI1的內容實現與I2C器件的數據交換。在CI0中的內容定義了8051對I2C器件進行操作的類型(讀或寫)和I2C器件內地址的字節數等信息,使I2C接口電路能夠識別從8051傳來的數據是地址還是數據、8051將要發送數據還是接收數據以及數據的長度等。
如果8051要發送數據給I2C器件,則根據I2C總線協議,在數據CI1接收到第一個數據后啟動I2C總線,然后將CI1中的數據進行并串轉換后逐位發出,發出完畢后設置一個標志位,使8051知道可以發送下一個總線后首先寫I2C器件內地址,然后進行數據接收,進行串并轉換后將接收到的數據裝入CI1中,再設置標志位,使8051知道可以讀出數據。
根據上述設計要求,I2C接口芯片的引腳如圖1所示。其中clk可以使用獨立的時鐘,使I2C總線的位傳送速度遠高于8051的位操作,從而可使I2C總線的數據傳送接近并口的數據速率;a0是地址信號輸入,a0=0時進行CI0寫操作,當a0=1時進行CI1讀/寫操作;bz為標志輸出位,bz=0時,8051需要等待,bz=1時8051可以對CI1操作。
I2C接口芯片在系統中的情況如圖2所示。這里8051對I2C接口芯片操作使用了查詢方式,也可以改用中斷方式。
3 并行接口設計的實現
3.1 接口設計的內部結構
該芯片的內部結構圖如圖3所示。系統由控制寄存器CI0,數據寄存器CI1,并串轉換,串并轉換,移位寄存器以及I2C控制模塊6部分構成。
3.2 方式控制字
8051向控制寄存器CI0寫控制字,實現對I2C接口的編程控制。CI0的控制字格式如下所示:
A2,A1,A0位:對與8051相連的I2C器件組的片選(器件地址)。對應不同值時選擇不同的器件通信。
R/W:用來控制8051對I2C器件的讀寫操作。1表示8051對I2C器件讀數據;0表示8051對I2C器件寫數據。
M1M0:當S=1時的4種工作方式:
①I2C總線未連接,要進行寫操作。
②I2C總線未連接,要進行讀操作。
③I2C總線已連接,換一個I2C器件或換新地址,要進行寫操作。
④I2C總線已連接,換一個I2C器件或換新地址,要進行讀操作。
S:工作控制位。當S=0時,關閉I2C總線,其他情況S=1。
DZS:指明8051對I2C器件讀寫的地址數。具體為:
0:8051對I2C器件內單字節地址讀寫。
1:8051對I2C器件內雙字節地址讀寫。
3.3 I2C模塊對I2C傳輸協議的實現
根據I2C數據傳輸協議,時鐘為高電平時,數據線由高電平向低電平跳變,啟動I2C數據傳輸。然后每到來一個時鐘脈沖,傳送一位串行數據,第8個脈沖到來后,已完成一個字節的傳輸,第9個脈沖時,發送應答信號。寫數據時,I2C器件收到數據,發送應答信號;讀數據時,8051收到數據,發送應答信號。數據傳送過程中,時鐘為高電平期間,數據線上的內容保持不變。數據傳送完畢,應答結束后,需要用停止信號停止數據傳輸,時鐘高電平時,數據線由低電平向高電 55平跳變來實現此停止信號。
I2C模塊實現I2C數據傳輸協議。start信號為1時,啟動數據傳輸;write信號為1時,向I2C器件寫數據,read信號為1時,向I2C器件讀數據。
讀寫過程中,輸出標志位flag、計數器dcnt,控制en的兩位矢量,從而控制并串轉換寄存器和串并轉換寄存器的并入、移位、保持、清零操作。停止信號為1時,結束數據傳輸。
3.4 接口芯片的工作原理與控制過程
8051向控制寄存器CI0寫控制字,實現對I2C接口的編程控制;向數據寄存器CI1寫數據,實現對I2C接口的數據傳輸。
當bz=1時,8051才對數據寄存器讀寫,而每次讀寫后接口電路自動將bz置0,在接口電路完成有關操作等待8051的讀寫時將bz置1。
(1)I2C總線未連接,要進行寫操作。8051的操作:
①寫控制字W1;②當bz=1時寫器件內地址第1字節;③當bz=1時寫器件內地址第2字節…;④當bz=1時寫第1字節…。
I2C的操作:
當接收到該控制字W1后操作為:①置bz=1,啟動I2C總線;②根據控制字中的器件地址發出第1個字節(器件選擇、寫);③發送器件內地址,置bz=1;④發送數據內容,置bz=1…。
(2)I2C總線未連接,要進行讀操作。8051的操作:
①電路寫控制字W2;②寫器件內地址第1字節; ③當bz=1時寫器件內地址第2字節…;④當bz=1時讀第1字節…。
I2C的操作:
當接收到該控制字W2后操作為:①置bz=1,啟動I2C總線;②根據控制字中的器件地址以出第1個字節(器件選擇、寫);③發送器件內地址;④關閉I2C總線;⑤啟動I2C總線;⑥第2次發送器件選擇字節、讀;⑦接收數據內容,置bz=1…。
(3)I2C總線已連接,換一個I2C器件或換新地址,要進行寫操作。
8051的操作:
①寫控制字W5;②當bz=1時寫器件內地址第1字節;③當bz=1時寫器件內地址第2字節…;④當bz=1時寫第1字節…。
I2C的操作:
當接收到該控制字W5后操作為:①置bz=1,關閉I2C總線;②啟動I2C總線;③根據控制字中的器件地址發出第1個字節(器件選擇、寫);④發送器件內地址,置bz=1。
(4)I2C總線已連接,換一個I2C器件或換新地址,要進行讀操作。
8051的操作:
①電路寫控制字W6;②寫器件內地址第1字節; ③當bz=1時寫器件內地址第2字節…;④當bz=1時讀第1字節…。
I2C的操作:
當接收到該控制字W6后操作為:①置bz=1,關閉I2C總線;②啟動I2C總線;③根據控制字中的器件地址發出第1個字節(器件選擇、寫);④發送器件內地址;⑤關閉I2C總線;⑥啟動I2C總線;⑦第2次發送器件選擇字節、讀;⑧接收數據內容,置bz=1…。
4 結 語
擴展接口芯片設計采用VHDL語言實現,芯片設計的全部程序均通過ALTERA公司的MAXPLUSⅡ軟件編譯,仿真結果正確。編譯、仿真后的VHDL 程序經下載線下載至EPM7128SLC84-15芯片,驗證正確。設計的接口時鐘要求6 MHz,可直接和單片機接口連接。
擴展后的接口,傳送一位數據只需要4個時鐘周期。擴展的接口,訪問I2C器件的時鐘可以自行設定,他們之間的通信不需要等待8051。一旦8051的并行數據送出,該接口可立即用自己設定的速度傳送。從而該接口在8051和I2C器件之間通信時,數據的傳送可達到并行的速度,這就是本接口擴展設計的最大優點。
由于使用的設計軟件是ALTERA公司的MAXPLUSⅡ軟件,下載仿真芯片為EPM7128SLC84該芯片延遲時間為15 s,延時時間過長;接口的設計本身對數據傳輸的時鐘也可進一步減少,更進一步提高數據傳輸的速度。基于以上兩點,還需要對本設計進一步優化,以期進一步提高性能與速度。
評論
查看更多