引言
雖然現(xiàn)實(shí)世界中的信號(hào)都是模擬信號(hào),但是現(xiàn)在越來越多的模擬IC采用數(shù)字接口進(jìn)行通信。串行接口的數(shù)據(jù)通信介于主機(jī)(提供串行時(shí)鐘)和從機(jī)/外設(shè)之間。目前,大多數(shù)微控制器提供SPI (3線)和I2C (2線)接口,用于發(fā)送、接收數(shù)據(jù)。微處理器通過幾條總線控制周邊的設(shè)備,比如:模/數(shù)轉(zhuǎn)換器(ADC)、數(shù)/模轉(zhuǎn)換器(DAC)、智能電池、端口擴(kuò)展、EEPROM以及溫度傳感器。與通過并口傳輸數(shù)據(jù)不同的是:串行接口通過2條、3條或4條數(shù)據(jù)/時(shí)鐘總線連續(xù)傳輸數(shù)據(jù)。雖然并行接口具有傳輸速度快的特點(diǎn),但是串行接口占用較少的控制和數(shù)據(jù)線。串行接口的基礎(chǔ)知識(shí)
串行接口有三種:3線、2線和單線。本文主要討論3線和2線串行接口。串行外設(shè)接口(SPI)、隊(duì)列串行外設(shè)接口(QSPI?)和MICROWIRE? (或MICROWIRE PLUS?)接口標(biāo)準(zhǔn)均采用3線接口。芯片間總線(I2C)和系統(tǒng)管理總線(SMBus?)均為2線接口。這些串行接口擁有各自的優(yōu)點(diǎn)和缺點(diǎn),如表1所示。3線接口
3線接口使用片選線(低電平有效CS或SS)、時(shí)鐘線(SCLK)和數(shù)據(jù)輸入/主機(jī)輸出線(DIN或MOSI)。3線接口有時(shí)也包括一條數(shù)據(jù)輸出/主機(jī)輸入線(DOUT或MISO),這時(shí)也叫做4線接口。為了敘述的簡(jiǎn)便,本文將3線接口和4線接口統(tǒng)稱為3線接口。3線接口可以以更高的時(shí)鐘頻率工作,并且不需要上拉電阻。SPI/QSPI和MICROWIRE接口都可以工作在全雙工模式(數(shù)據(jù)可以在同一時(shí)間發(fā)送和接收),一般在嘈雜環(huán)境下工作不成問題。3線接口是邊沿觸發(fā),不是電平觸發(fā),因此具有更強(qiáng)的抗干擾能力。
3線接口的主要缺點(diǎn)是它要為每一個(gè)從機(jī)提供一條低電平有效的CS線,除非將從機(jī)用菊鏈形式連接,如圖1所示(后續(xù)章節(jié)將詳細(xì)討論菊鏈方式)。另外一個(gè)缺點(diǎn)是3線接口沒有應(yīng)答機(jī)制去判斷數(shù)據(jù)的收發(fā)是否正確。從軟件設(shè)計(jì)看,在單主機(jī)/單從機(jī)應(yīng)用中,3線接口比2線接口簡(jiǎn)單,效率更高。
圖1. 利用數(shù)據(jù)輸入、數(shù)據(jù)輸出、時(shí)鐘和片選信號(hào)進(jìn)行通信的3線接口。
2線接口
2線接口包括一條數(shù)據(jù)線(SDA或SMBDATA)和一條時(shí)鐘線(SCL或SMBCLK)。2線接口的優(yōu)點(diǎn)是使用更少的連線,這一點(diǎn)對(duì)于結(jié)構(gòu)緊湊的設(shè)計(jì)尤為重要,比如:手機(jī)、光纖的應(yīng)用。因?yàn)?線接口為每個(gè)從機(jī)分配唯一的地址,所以可以在一條總線連接多個(gè)從機(jī)而不需要片選信號(hào)。2線接口在成功完成一次讀操作后會(huì)傳輸一個(gè)應(yīng)答位。因?yàn)?線接口只有一條數(shù)據(jù)線,所以它只能工作在半雙工模式(數(shù)據(jù)的讀寫不可以同時(shí)進(jìn)行)。因?yàn)?線接口是電平觸發(fā),所以在嘈雜環(huán)境中如果發(fā)生數(shù)據(jù)位錯(cuò)誤,可能造成問題。表1. 3/2線接口優(yōu)缺點(diǎn)的對(duì)比
Interface | Advantages | Disadvantages |
3-Wire: SPI, QSPI, and MICROWIRE PLUS | 1. Speed 2. No pullup resistors required 3. Full-duplex operation 4. Noise immunity |
1. Larger number of bus line connections 2. Individual chip-select lines required to communicate with more than one slave at a time 3. No acknowledgment of received data |
2-Wire: I2C and SMBus | 1. Fewer bus line connections 2. Multiple devices share the same bus 3. Received data is acknowledged |
1. Speed: SMBus limited to 100kHz; I2C limited to 3.4MHz 2. Half-duplex operation 3. Open-drain bus lines require pullup resistors 4. Reduced noise immunity |
主機(jī)和從機(jī)經(jīng)由多條總線通過串行接口進(jìn)行通訊。在寫周期,主機(jī)使用自己產(chǎn)生的時(shí)鐘和數(shù)據(jù)將數(shù)據(jù)傳至從機(jī)。在讀周期,從機(jī)傳輸數(shù)據(jù)至主機(jī)。
SPI、QSPI和MICROWIRE設(shè)計(jì)
由Motorola制定的SPI接口已被很多流行的處理器和微控制器采用,比如MAXQ2000。SPI接口需要兩條控制線(低電平有效CS和SCLK)和兩條數(shù)據(jù)線(DIN/SDI和DOUT/SDO)。Motorola的SPI/QSPI標(biāo)準(zhǔn)稱DIN/SDI數(shù)據(jù)線為MOSI (主機(jī)出,從機(jī)入),DOUT/SDO數(shù)據(jù)線為MISO (主機(jī)入,從機(jī)出),CS線為SS(從機(jī)選擇)。為了敘述的清晰,我們基于從機(jī)說明3線接口的數(shù)據(jù)線。DIN是從機(jī)的數(shù)據(jù)輸入線,DOUT是從機(jī)的數(shù)據(jù)讀出線。本文采用低電平有效CS、SCLK、DIN和DOUT來定義3線接口中的各條線,Maxim外設(shè)使用了這些引腳名稱。大多數(shù)的SPI接口有兩位配置位,時(shí)鐘極性(CPOL)和時(shí)鐘相位(CPHA)用于設(shè)定從機(jī)何時(shí)采集數(shù)據(jù)。CPOL決定SCLK為高時(shí)總線空閑(CPOL = 1)還是SCLK為低時(shí)總線空閑(CPOL = 0)。CPHA決定在SCLK的哪一個(gè)邊沿將數(shù)據(jù)移入、移出。當(dāng)CPOL = 0時(shí),將CPHA設(shè)為0,表示在SCLK的上升沿將數(shù)據(jù)移入從機(jī);將CPHA設(shè)為1,表示在SCLK的下降沿將數(shù)據(jù)移入從機(jī)。CPOL和CPHA的兩個(gè)狀態(tài)允許四種時(shí)鐘極性和相位的不同組合。每一種都與其它三種不兼容。為了實(shí)現(xiàn)主、從機(jī)間的通訊,主、從機(jī)的CPOL和CPHA必須有相同的設(shè)置。
在SPI接口的大多數(shù)應(yīng)用中,SPI接口一次傳送8位數(shù)據(jù)(一個(gè)字節(jié)),有一些微處理器一次傳送兩個(gè)或多個(gè)字節(jié)。例如,MAXQ2000微處理器可一次傳送8位或16位數(shù)據(jù)。當(dāng)CPOL = 0、CPHA = 0,低電平有效CS由高跳變?yōu)榈停_始一個(gè)主機(jī)到從機(jī)的傳輸過程。在SCLK信號(hào)高低變化的八個(gè)周期內(nèi),低電平有效CS信號(hào)必須保持為低。DIN數(shù)據(jù)鎖定在SCLK信號(hào)的上升沿。在同樣的8位周期內(nèi),DOUT線上的從機(jī)輸出數(shù)據(jù)在SCLK的每個(gè)下降沿有效。圖2a給出了CPHA = 1時(shí)的詳細(xì)時(shí)序;圖2b給出了CPHA = 0時(shí)的詳細(xì)時(shí)序。
圖2a. 3線接口時(shí)序(CPHA = 1),CPHA = 1、CPOL = 1時(shí),3線接口在時(shí)鐘的上升沿將數(shù)據(jù)移入外設(shè),在時(shí)鐘的下降沿將數(shù)據(jù)移出外設(shè)。
圖2b. 3線接口時(shí)序(CPHA = 0),CHPA = 0、CPOL = 1時(shí),3線接口在時(shí)鐘的下降沿將數(shù)據(jù)移入外設(shè),在時(shí)鐘的上升沿將數(shù)據(jù)移出外設(shè)。
因?yàn)榭偩€上的每一個(gè)IC需要專屬的片選線,所以低電平有效CS被用做每個(gè)從機(jī)的使能信號(hào)。如果一條總線上有四個(gè)從機(jī),則需要四條片選線。如果從機(jī)的低電平有效CS為高電平(禁止),該從機(jī)就忽略SCLK線上的數(shù)據(jù),將DOUT置為高阻。
部分3線接口設(shè)備可以鏈接成菊鏈的方式,而不需要為每個(gè)從機(jī)提供低電平有效的CS線,菊鏈方式能夠用一條低電平有效的CS線和一條數(shù)據(jù)線控制多個(gè)串聯(lián)從機(jī)。在菊鏈結(jié)構(gòu)中3線接口必須包含DOUT線,如圖1所示,從機(jī)#1的DOUT連接到從機(jī)#2的DIN,如此反復(fù)。
SPI標(biāo)準(zhǔn)中沒有定義最大數(shù)據(jù)速率。外部設(shè)備定義了自己的最大數(shù)據(jù)速率,通常為MHz量級(jí)。微處理器可以適應(yīng)很寬范圍的SPI數(shù)據(jù)速率。在利用SPI接口進(jìn)行通訊時(shí),從機(jī)無法降低主機(jī)的數(shù)據(jù)速率或確定一個(gè)適當(dāng)?shù)乃俾省?br>
QSPI標(biāo)準(zhǔn)和SPI標(biāo)準(zhǔn)非常相似。事實(shí)上,外設(shè)無法區(qū)分QSPI總線和SPI總線。與SPI標(biāo)準(zhǔn)中的主機(jī)不同,QSPI中的主機(jī)允許數(shù)據(jù)通過可編程的片選線傳輸數(shù)據(jù)。QSPI的主機(jī)甚至可以傳送長(zhǎng)度在8位和16位之間的數(shù)據(jù),而SPI的主機(jī)只可以傳送8位的數(shù)據(jù)。可以配置QSPI的設(shè)備去連續(xù)傳送長(zhǎng)度超過16字節(jié)的數(shù)據(jù)(最大為256位)。這種傳輸完全由QSPI設(shè)備的配置來實(shí)現(xiàn),不需要MCU的操作。與SPI接口相似,QSPI接口也沒有規(guī)定最大數(shù)據(jù)速率。
由National Semiconductor公司制定的老的MICROWIRE標(biāo)準(zhǔn)和SPI標(biāo)準(zhǔn)非常相似。不同的是MICROWIRE標(biāo)準(zhǔn)的時(shí)鐘極性和時(shí)鐘相位是固定的(CPOL = 0和CPHA = 0)。DIN的數(shù)據(jù)讀取總是鎖定在SCLK的上升沿。DOUT的數(shù)據(jù)輸出總是在SCLK的下降沿。MICROWIRE標(biāo)準(zhǔn)沒有規(guī)定最大數(shù)據(jù)速率。
芯片間電路接口(I2C)
不同于全雙工的3線制接口,由Philips制定的I2C接口通過一條數(shù)據(jù)線(SDA)和一條時(shí)鐘線(SCL)實(shí)現(xiàn)半雙工通信。I2C接口定義了一個(gè)簡(jiǎn)單的主/從雙向通信接口。在這個(gè)體系中,MCU決定自己為主機(jī)(寫模式)或?yàn)閺臋C(jī)(接收模式)。每個(gè)從機(jī)具備專有、唯一的地址,使主機(jī)可以和多個(gè)從機(jī)通過一條總線進(jìn)行通信,而不需要為每一個(gè)從機(jī)提供單獨(dú)的片選線。如圖3所示,從機(jī)的數(shù)目只受限于最大線上電容(400pF),I2C接口的機(jī)制基于7位或10位地址,7位的地址更為常見。在7位地址的機(jī)制中,總線上可以接127個(gè)不同的外設(shè)。SCL和SDA線為漏極開路結(jié)構(gòu),所以閑置時(shí)必須為高。當(dāng)電源電壓為3V時(shí),連接一個(gè)1kΩ或更大阻值的上拉電阻;當(dāng)電源電壓為5V時(shí),連接一個(gè)1.6kΩ或更大阻值的上拉電阻。圖3. 利用數(shù)據(jù)輸入/輸出和時(shí)鐘信號(hào)進(jìn)行通信的2線接口。
當(dāng)SCL為高,SDA從高變?yōu)榈停窗l(fā)出了一個(gè)開始命令,啟動(dòng)I2C通信。圖4a所示,每個(gè)SCL時(shí)鐘傳輸一個(gè)數(shù)據(jù)位,傳輸一個(gè)字節(jié)至少需要9個(gè)數(shù)據(jù)位。一個(gè)寫周期包括8個(gè)數(shù)據(jù)位和一個(gè)應(yīng)答位(ACK)或者非應(yīng)答位(NACK)。如圖4b所示,當(dāng)數(shù)據(jù)在I2C總線上傳輸時(shí),在SLK的上升沿寫入從機(jī),在SLK的下降沿從機(jī)輸出。在SCL時(shí)鐘周期為高電平的時(shí)間內(nèi),SDA線的數(shù)據(jù)不可以改變。一次傳輸?shù)耐瓿杀仨毟S著一個(gè)中止或重新開始的命令,既SCL為高時(shí),SDA由低變?yōu)楦摺.?dāng)總線空閑時(shí),SDA和SCL都為高。
圖4a. 開始條件和停止條件,2線接口采用開始、重復(fù)開始和停止命令在主機(jī)和從機(jī)之間傳輸數(shù)據(jù)。
圖4b. I2C應(yīng)答位,應(yīng)答數(shù)據(jù)時(shí),2線接口將SDA拉低。
I2C的寫周期起始于開始命令,隨后是7位從機(jī)地址和第8位用于標(biāo)識(shí)讀、寫操作。將第8位置低,表示寫操作;將第8位置高,表示讀操作。主機(jī)在第8個(gè)時(shí)鐘周期后釋放總線。如果從機(jī)應(yīng)答數(shù)據(jù)傳輸,則在第9個(gè)時(shí)鐘周期將SDA拉低。如果從機(jī)不應(yīng)答寫命令,則釋放SDA (該數(shù)據(jù)線通過上拉電阻置于高電平)。
隨后,主機(jī)寫入8位命令字節(jié),然后是第二個(gè)ACK/NACK位。接下來,主機(jī)寫入8位數(shù)據(jù)字節(jié)并跟隨第三個(gè)ACK/NACK位。數(shù)據(jù)字節(jié)和最后的應(yīng)答位完成一個(gè)讀/寫周期,更新外設(shè)輸出,圖5a是一個(gè)寫周期的詳細(xì)例子。
I2C讀周期起始于開始命令,隨后是需要寫入數(shù)據(jù)的從機(jī)地址、第8位置高,表示讀操作。在ACK/NACK之后,主機(jī)寫入命令字節(jié)訪問從機(jī)寄存器。在第二個(gè)ACK/NACK位后,主機(jī)重新寫入從機(jī)地址。在第三個(gè)ACK/NACK位后,從機(jī)控制總線,一次輸出8位數(shù)據(jù)到總線上。如圖5b所示,當(dāng)從與上次讀操作相同的從機(jī)寄存器讀取數(shù)據(jù)時(shí),主機(jī)只需要在讀取從機(jī)數(shù)據(jù)之前寫入從機(jī)地址。
圖5. 2線接口一次傳輸8位數(shù)據(jù),圖5a是I2C寫周期的一個(gè)例子;圖5b是I2C讀周期的一個(gè)例子。
I2C接口支持低速(大于100kHz)、快速(大于400kHz)和高速(大于3.4MHz)三種數(shù)據(jù)速率。I2C接口的高低電平為CMOS邏輯電平(低電平為0.3x電源電壓以下,高電平為0.7x電源電壓以上)。
系統(tǒng)管理總線(SMBus)
Intel?制定了SMBus標(biāo)準(zhǔn)用于低速通信,SMBus 2線接口與I2C接口非常相似。SMBus也使用一條數(shù)據(jù)線(SMBDATA)和一條時(shí)鐘線(SMBCLK)進(jìn)行通信。SMBCLK和SMBDATA也需要上拉電阻,3V供電時(shí)上拉電阻大于8.5kΩ,5V供電時(shí)上拉電阻大于14kΩ。SMBus工作電壓范圍在3V和5V之間,大于2.1V為高電平,低于0.8V為低電平。I2C接口和SMBus接口的最主要區(qū)別是最高/最低時(shí)鐘速率,因?yàn)镮2C總線為被動(dòng)傳輸總線,不存在總線超時(shí)問題,速率可低至“靜止”。SMBus接口則存在總線超時(shí)問題。如果時(shí)鐘信號(hào)拉低之后的時(shí)間大于超時(shí)周期(最長(zhǎng)為35ms)時(shí),從機(jī)復(fù)位接口,認(rèn)為發(fā)生總線超時(shí)。SMBus的超時(shí)周期限制了時(shí)鐘的最小速率為19kHz。為了保證正常通信,SMBCLK的速率必須介于10kHz至100kHz之間,而I2C接口的主機(jī)或從機(jī)則可根據(jù)傳輸數(shù)據(jù)的需要將時(shí)鐘保持在低電平。
外設(shè)舉例
微處理器經(jīng)常通過串行接口與外設(shè)通信,當(dāng)微處理器通過2線或3線接口訪問外設(shè)后,外設(shè)相應(yīng)地改變其模擬或數(shù)字輸出。例如,指使外設(shè)設(shè)置電池的充電的電流和電壓、用溫度傳感器控制風(fēng)扇、設(shè)置數(shù)模轉(zhuǎn)換器的模擬輸出等。如圖6所示,通過2線接口連接微處理器和8位數(shù)/模轉(zhuǎn)換器(MAX5115)。因?yàn)檫@個(gè)DAC有四個(gè)地址選擇引腳,可以產(chǎn)生16個(gè)唯一的從機(jī)地址,因此可以在總線上并聯(lián)16個(gè)DAC,因?yàn)镸AX6641有不同的從機(jī)地址,同樣的2線接口也可以設(shè)置SMBus溫度傳感器/風(fēng)扇控制器(MAX6641),風(fēng)扇控制器控制MOSFET的柵極,使其打開或關(guān)閉風(fēng)扇。
圖6. 由于微控制器采用的是I2C接口,與外設(shè)通信時(shí),如DAC、溫度傳感器,總線只需要兩條連線。
3線接口需要單獨(dú)的片選線實(shí)現(xiàn)微處理器與多個(gè)并行從機(jī)之間的通信,更簡(jiǎn)單的2線接口用一條時(shí)鐘線和一條數(shù)據(jù)線與總線上的每個(gè)設(shè)備通信。可以通過設(shè)定不同的從機(jī)地址在總線上掛接多個(gè)IC。大多數(shù)I2C接口外設(shè)具備地址選擇引腳,以實(shí)現(xiàn)從機(jī)地址的配置。外設(shè)可以使用的從地址數(shù)等于地址選擇引腳數(shù)的平方。例如,若外有兩個(gè)地址選擇引腳,它就可以配置四個(gè)不同的地址。
新一代設(shè)計(jì)以更少的地址選擇引腳提供更多的從地址。MAX7319是輸入/輸出擴(kuò)展芯片,可以從兩個(gè)地址選擇引腳(AD2和AD0)擴(kuò)展出16個(gè)從地址。這些引腳可以接GND、電源(VCC)、SDA或SCL。表2列出了這16個(gè)從地址的詳細(xì)信息,A6、A5、A4固定為110,A3至A0可以通過AD2、AD0設(shè)置。
表2. MAX7319僅利用2個(gè)地址線(AD2和AD0)即可編譯出16個(gè)不同地址
Pin Connection | Device Address | |||||||
AD2 | AD0 | A6 | A5 | A4 | A3 | A2 | A1 | A0 |
SCL | GND | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
SCL | VCC | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
SCL | SCL | 1 | 1 | 0 | 0 | 0 | 1 | 0 |
SCL | SDA | 1 | 1 | 0 | 0 | 0 | 1 | 1 |
SDA | GND | 1 | 1 | 0 | 0 | 1 | 0 | 0 |
SDA | VCC | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
SDA | SCL | 1 | 1 | 0 | 0 | 1 | 1 | 0 |
SDA | SDA | 1 | 1 | 0 | 0 | 1 | 1 | 1 |
GND | GND | 1 | 1 | 0 | 1 | 0 | 0 | 0 |
GND | VCC | 1 | 1 | 0 | 1 | 0 | 0 | 1 |
GND | SCL | 1 | 1 | 0 | 1 | 0 | 1 | 0 |
GND | SDA | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
VCC | GND | 1 | 1 | 0 | 1 | 1 | 0 | 0 |
VCC | VCC | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
VCC | SCL | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
VCC | SDA | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
進(jìn)一步改進(jìn)
3線接口和2線接口有幾點(diǎn)不同的要求,每種接口都有其特殊優(yōu)勢(shì)。近期內(nèi)不可能用一種接口標(biāo)準(zhǔn)完全取代另一接口標(biāo)準(zhǔn)。具備I2C接口的器件發(fā)展較快,并開始融合一些SMBus接口的特點(diǎn),支持諸如超時(shí)復(fù)位等功能,使接口可以根據(jù)需要關(guān)斷。新的I2C從機(jī)地址長(zhǎng)達(dá)10位,而不僅僅是7位,這給用戶帶來更多的靈活性。3線接口和2線接口將并存,但I(xiàn)2C接口似乎占有更大的市場(chǎng)份額,大部分微處理器支持2線接口。I2C接口的易用性及更少的連線使其增長(zhǎng)量超過了SPI接口。
其它信息請(qǐng)參考應(yīng)用筆記3967:"選擇串行總線"和應(yīng)用筆記3438:"串行數(shù)字網(wǎng)絡(luò)"。
評(píng)論
查看更多