單片機的I2C總線擴展和I2C虛擬技術(shù)
在單片機應(yīng)用系統(tǒng)中,要處理的數(shù)據(jù)不僅很多,而且很重要時,通常的做法是用并行口擴展單片機外部數(shù)據(jù)存儲器芯片。近年來,隨著半導(dǎo)體技術(shù)的不斷發(fā)展,陸續(xù)出現(xiàn)了一些新的數(shù)據(jù)要求非常嚴格的芯片,比較典型的有基于I2C總線接口的24系列,基于SPI總線的25系列,以及并行總線接口的28系列,29系列,這些芯片的特點是芯片掉電后數(shù)據(jù)不會丟失,數(shù)據(jù)可以保存幾年、甚至幾十年,這些芯片采用I2C、SPI或Microwire串行總線協(xié)議,與單片機接口通常僅占用2~4個I/O口,可以最大限度地節(jié)省單片機的資源,并且數(shù)據(jù)可以反復(fù)擦寫。
I2C總線采用二線傳輸,即SDA串行數(shù)據(jù)線和SCL串行時鐘,在總線上擴展的外圍器件及外圍設(shè)備接口通過總線尋址,圖2為I2C總線構(gòu)成的輸入/輸出、顯示、ADC/DAC以及鍵盤、顯示電路。在SDA和SCL上掛接單片機CUP和外圍器件(如I/O、ADC、DAC、存儲器)和外設(shè)接口(如鍵盤、顯示器、打印機等),所有掛接在I2C總線上的器件和接口電路都應(yīng)具有I2C總線接口,將所有的SDA/SCL同名端相連。
I2C總線為同步串行數(shù)據(jù)傳輸總線,其總線傳輸速率為100 KB/s,改進后為400 KB/s,總線驅(qū)動能力為400 PF,通過驅(qū)動擴展可達4 000 PF,在圖1中只表示I2C總線上外圍擴展的節(jié)點,其總線的節(jié)點的尋址方法為,確定總線上的主節(jié)點(主控器件),在任何時刻總線上只有一個主節(jié)點(一個主控器件),實現(xiàn)總線的控制操作,由主控器對總線上的其他節(jié)點尋址,分時實現(xiàn)點對點的數(shù)據(jù)傳輸。因此總線上每個節(jié)點都有一個固定的節(jié)點地址。I2C總線每次傳送數(shù)據(jù),都是由主器件發(fā)送起始信號開始,送停止信號結(jié)束,當SCL時鐘線為高電平時,SDA出現(xiàn)由高到低的下降沿,即總線的起始信號,相反,當SDA出現(xiàn)上升沿時為結(jié)束信號,在起始信號和停止信號之間是尋址信息和數(shù)據(jù)信息,圖2為I2C的操作時序。
I2C總線上的單片機都可作為主節(jié)點,其器件地址由軟件給出。存放在I2C總線的地址寄存器,稱為主器件的從地址。器件地址由7位組成和一個方向位構(gòu)成尋址字節(jié)SLA,尋址字節(jié)格式如下:
DA3~DA0為器件地址,由器件出廠時給定的固定地址編碼;A2~A0為器件在電路中接電源或地的不同,形成的地址數(shù)據(jù);R/W——數(shù)據(jù)傳輸方向,規(guī)定總線上主節(jié)點對從節(jié)點的數(shù)據(jù)傳輸方向,R——接收,W——發(fā)送。表1為常用外圍器件的節(jié)點地址。
2 單主系統(tǒng)的I2C總線的虛擬技術(shù)
在單主系統(tǒng)中,I2C總線上只有一個單片機,由于總線上只有一個單片機成為主節(jié)點,在這種情況下,對于沒有I2C總線的單片機,可以用兩根I/O線來虛擬I2C總線接口,在采用虛擬串行擴展接口時,可根據(jù)系統(tǒng)的資源情況選用具體的I/O口線,可以設(shè)計出各種類型接口的虛擬軟件包,只要安裝軟件包和定義相應(yīng)的I/O端口,使用極其靈活方便,這種方式稱為單主方式I2C總線虛擬(簡稱主方式)。
2.1 單主方式下的數(shù)據(jù)操作格式
2.1.1 主發(fā)送的數(shù)據(jù)操作格式
主節(jié)點向由尋址字節(jié)指令的外圍器件節(jié)點發(fā)送N個字節(jié)數(shù)據(jù),整個數(shù)據(jù)傳送過程中數(shù)據(jù)的傳送方向不變,操作格式如下:
其中S.SLAW、data1~N、P~為主節(jié)點發(fā)送,從節(jié)點接收;A~主節(jié)點接收,從節(jié)點發(fā)送;SLAW~尋址字節(jié)(寫);data1~dataN:寫入從節(jié)點的N個數(shù)據(jù)。
(2) 主接收的數(shù)據(jù)操作格式
主節(jié)點要求被尋址的從節(jié)點(外圍器件)發(fā)送N個字節(jié)數(shù)據(jù)。數(shù)據(jù)操作格式如下:
2.1.2 主方式下的虛擬I2C總線軟件包
在使用虛擬I2C總線時,有一個通用的主方式I2C軟件包,并在此基礎(chǔ)上給出歸一化操作命令。即在使用I2C虛擬總線時,只要在程序存儲器的任一空間,裝入通用軟件包作為I2C總線應(yīng)用程序設(shè)計的軟件支持。在應(yīng)用中只須將軟件包中標記賦值即可。
這些標記符有:
VSDA~虛擬I2C總線數(shù)據(jù)線;VSCL~虛擬I2C總線時鐘線;SLA~尋址字節(jié)存放單元;SLAW~尋址字節(jié)寫;SLAW~尋址字節(jié)讀;NUMBYT~傳送字節(jié)數(shù)據(jù)存放單元;MTD~發(fā)送數(shù)據(jù)緩沖區(qū);MRD~接收數(shù)據(jù)緩沖區(qū)。
在程序中嵌入了通用I2C軟件包并進行標號賦值后,歸一化的操作命令有三條:
MOV SLA,#SLAW/#SLAR;指向那個節(jié)點,并認定發(fā)送(SLAW)還是接收(SLAR);MOV NUMBYT,#N;傳送幾個字節(jié);LCALL WRNBYT/RDNBYT;調(diào)用接收或發(fā)送子程序。
以圖1為例,假定在嵌入了通用I2C軟件包的情況下,使用主方式的I2C虛擬技術(shù),標記符的偽定義為:
評論