I2C/SPI/UART/1-Wire/并行接口這幾種常用嵌入式通信協(xié)議,你都了解嗎
隨著通信與計算機(jī)整合時代的到來,數(shù)字化、寬帶化和智能化已成為未來通信發(fā)展的方向,人類社會對電信業(yè)務(wù)從質(zhì)量到業(yè)務(wù)種類都提出越來越高的要求,而接入網(wǎng)作為電信網(wǎng)的重要組成部分,連接本地交換機(jī)與用戶,是整個電信網(wǎng)的毛細(xì)血管和瓶頸,實現(xiàn)數(shù)字化、寬帶化和業(yè)務(wù)綜合化的關(guān)鍵。 嵌入式系統(tǒng)是以應(yīng)用為中心的硬件設(shè)計和面向應(yīng)用的軟件產(chǎn)品開發(fā)為基礎(chǔ)的專用計算機(jī)系統(tǒng),廣泛應(yīng)用于制造工業(yè)、過程控制、通信、儀器、儀表、汽車、船舶、航空、航天、軍事裝備、消費(fèi)產(chǎn)品等領(lǐng)域。
本文引用地址:http://www.ex-cimer.com/article/201802/375748.htm在嵌入式系統(tǒng)中,板上通信接口是指用于將各種集成電路與其他外圍設(shè)備交互連接的通信通路或總線。下面將逐一說明常用的板上通信接口。
1. I2C總線
I2C總線是一種同步、雙向、半雙工的兩線式串行接口總線。這里,半雙工的含義是指在任意給定的時刻,只有一個方向上是可以通信的。I2C總線最早由Philips半導(dǎo)體公司于20世紀(jì)80年代研發(fā)面市。I2C最初的設(shè)計目標(biāo)是為微處理器/微控制器系統(tǒng)與電視機(jī)外圍芯片之間的連接提供簡單的方法。I2C總線由兩條總線組成:串行時鐘線SCL和串行數(shù)據(jù)線SDA。SCL線負(fù)責(zé)產(chǎn)生同步時鐘脈沖,SDA線負(fù)責(zé)在設(shè)備間傳輸串行數(shù)據(jù)。I2C總線是共享的總線系統(tǒng),因此可以將多個I2C設(shè)備連接到該系統(tǒng)上。連接到I2C總線上的設(shè)備既可以用作主設(shè)備,也可以用作從設(shè)備。主設(shè)備負(fù)責(zé)控制通信,通過對數(shù)據(jù)傳輸進(jìn)行初始化/終止化,來發(fā)送數(shù)據(jù)并產(chǎn)生所需的同步時鐘脈沖。從設(shè)備則是等待來自主設(shè)備的命令,并響應(yīng)命令接收。主設(shè)備和從設(shè)備都可以作為發(fā)送設(shè)備或接收設(shè)備。無論主設(shè)備是作為發(fā)送設(shè)備還是接收設(shè)備,同步時鐘信號都只能由主設(shè)備產(chǎn)生。在相同的總線上,I2C支持多個主設(shè)備的同時存在。圖2-26顯示了I2C總線上主設(shè)備和從設(shè)備的連接關(guān)系。
基于輸入緩沖區(qū)和漏極開路晶體管(或者是集電極開路晶體管),可以構(gòu)建I2C總線接口。當(dāng)總線處于空閑狀態(tài)的時候,漏極開路晶體管(或者是集電極開路晶體管)處于懸空狀態(tài),輸出導(dǎo)線(SDA和SCL)為高阻態(tài)。為了使總線正常工作,應(yīng)該使用上拉電阻,將兩條總線都上拉到供電電壓(TTL系列器件為+5V,CMOS系列器件為+3.3V)。上拉電阻通常取值為2.2K。使用上拉電阻,總線上輸出導(dǎo)線處于空閑狀態(tài)的時候,對應(yīng)于高電平。
通過將設(shè)備地址線硬件連接到所需的邏輯電平上,可以分配I2C設(shè)備的地址。在嵌入式設(shè)備中,當(dāng)設(shè)計嵌入式硬件的時候,需要分配各種I2C設(shè)備的地址并完成硬件連接。系統(tǒng)與I2C從設(shè)備通信的工作順序如下:
(1) 主設(shè)備將總線上的時鐘線(SCL)拉高到高電平。
(2) 當(dāng)SCL線處于高電平邏輯(這是數(shù)據(jù)傳輸?shù)膯訔l件)的時候,主設(shè)備將數(shù)據(jù)線(SDA)拉低到低電平。
(3) 主設(shè)備通過SDA線,將從設(shè)備地址(具有7位或10位寬度)發(fā)送到通信目的地址。從設(shè)備會在SCL線上產(chǎn)生時鐘脈沖,用于同步位接收。需要說明的是,系統(tǒng)總是首先傳輸數(shù)據(jù)的MSB(最高位)。在時鐘信號處于高電平期間,總線中的數(shù)據(jù)是有效的。
(4) 根據(jù)需求,主設(shè)備發(fā)送讀位或?qū)懳?位值等于1意味著讀操作,位值等于0意味著寫操作)。
(5) 主設(shè)備等待從設(shè)備發(fā)出確認(rèn)位。在發(fā)送讀/寫操作命令的同時,從設(shè)備的地址也會發(fā)送到總線上。對于連接到總線上的從設(shè)備,會將接收到的地址與分配的地址進(jìn)行比較。
(6) 如果從設(shè)備接收到來自主設(shè)備的指令并且地址正確,那么從設(shè)備通過SDA線發(fā)送確認(rèn)位(值為1)。
(7) 主設(shè)備接收到確認(rèn)位之后,如果操作指令是向設(shè)備寫入數(shù)據(jù),就通過SDA線向從設(shè)備發(fā)送8位數(shù)據(jù)。如果操作指令是從設(shè)備讀出數(shù)據(jù),從設(shè)備將通過SDA線將數(shù)據(jù)發(fā)送給主設(shè)備。
(8) 對于寫入操作,在字節(jié)傳輸結(jié)束之后,主設(shè)備等待從設(shè)備發(fā)送確認(rèn)位;對于讀出操作,在字節(jié)傳輸結(jié)束之后,主設(shè)備向從設(shè)備發(fā)送確認(rèn)位。
(9) 當(dāng)時鐘線SCL處于邏輯高電平(表示停止)的時候,通過將SDA線拉高到高電平,主設(shè)備可以終止數(shù)據(jù)傳輸。
I2C總線支持三種不同的數(shù)據(jù)速率:標(biāo)準(zhǔn)模式(數(shù)據(jù)速率為100kb/秒,即100kbps)、快速模式(數(shù)據(jù)速率為400kb/秒,即400kbps)、高速模式(數(shù)據(jù)速率為3.4Mb/秒,即3.4Mbps)。第一代I2C設(shè)備設(shè)計所支持的數(shù)據(jù)速率只有100kbps,新一代I2C設(shè)備則能夠以高達(dá)3.4Mbps的數(shù)據(jù)速率工作。
2. SPI總線
SPI總線是同步、雙向、全雙工的4線式串行接口總線,最早由Motorola公司提出。SPI是由“單個主設(shè)備+多個從設(shè)備”構(gòu)成的系統(tǒng)。需要說明的是:在系統(tǒng)中,只要任意時刻只有一個主設(shè)備是處于激活狀態(tài)的,就可以存在多個SPI主設(shè)備。為了實現(xiàn)通信,SPI共有4條信號線,分別是:
(1)主設(shè)備出、從設(shè)備入(Master Out Slave In,MOSI):由主設(shè)備向從設(shè)備傳輸數(shù)據(jù)的信號線,也稱為從設(shè)備輸入(Slave Input/Slave Data In,SI/SDI)。
(2)主設(shè)備入、從設(shè)備出(Master In Slave Out,MISO):由從設(shè)備向主設(shè)備傳輸數(shù)據(jù)的信號線,也稱為從設(shè)備輸出(Slave Output/Slave Data Out,SO/SDO)。
(3)串行時鐘(Serial Clock,SCLK):傳輸時鐘信號的信號線。
(4)從設(shè)備選擇(Slave Select,SS):用于選擇從設(shè)備的信號線,低電平有效。
圖2-27顯示了SPI總線上主設(shè)備和從設(shè)備的連接關(guān)系圖。
主設(shè)備負(fù)責(zé)產(chǎn)生時鐘信號,并通過將相應(yīng)從設(shè)備的從設(shè)備選擇信號拉低為低電平,選通所需的從設(shè)備。在沒有選通的時候,所有從設(shè)備的數(shù)據(jù)輸出線MISO都懸空處于高阻態(tài)。
SPI總線上的串行數(shù)據(jù)傳輸是用戶可配置的。SPI設(shè)備包含特定的寄存器組,可以保存所需的配置。串行外圍設(shè)備的控制寄存器用于保存各種配置參數(shù),比如器件的主/從選擇、通信波特率的選擇、時鐘信號控制等。狀態(tài)寄存器則用于保存各種通信條件的狀態(tài),實現(xiàn)所需的數(shù)據(jù)傳輸和數(shù)據(jù)接收。
SPI的工作是基于移位寄存器的;為了實現(xiàn)數(shù)據(jù)傳輸或數(shù)據(jù)接收,主設(shè)備和從設(shè)備包含了專用移位寄存器。移位寄存器的長度取決于具體設(shè)備,通常是8的整數(shù)倍。數(shù)據(jù)在從主設(shè)備傳輸?shù)綇脑O(shè)備的過程中,主設(shè)備移位寄存器中的數(shù)據(jù)從MOSI管腳移出,然后通過從設(shè)備的MOSI管腳,輸入到從設(shè)備的移位寄存器中。與此同時,由從設(shè)備移位寄存器移位出來的數(shù)據(jù),通過MISO管腳,輸入到主設(shè)備的移位寄存器中。也就是說,主設(shè)備和從設(shè)備的移位寄存器構(gòu)成了一個循環(huán)緩沖區(qū)。對于特定類型的器件,可以通過配置寄存器(比如,對于Motorola公司生產(chǎn)的68HC12型控制器,需要配置SPI控制寄存器的LSBF位),決定最先發(fā)送的數(shù)據(jù)位是最高位還是最低位。
與I2C總線相比,SPI總線更適于數(shù)據(jù)流傳輸。SPI的不足之處在于,SPI不支持?jǐn)?shù)據(jù)確認(rèn)機(jī)制。
3. UART
基于UART的數(shù)據(jù)傳輸是異步形式的串行數(shù)據(jù)傳輸?;?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/UART">UART的串行數(shù)據(jù)傳輸不需要使用時鐘信號來同步傳輸?shù)陌l(fā)送端和接收端,而是依賴于發(fā)送設(shè)備和接收設(shè)備之間預(yù)定義的配置。對于發(fā)送設(shè)備和接收設(shè)備來說,兩者的串行通信配置(波特率、單位字的位數(shù)、奇偶校驗、起始位數(shù)與結(jié)束位、流量控制)應(yīng)該設(shè)置為完全相同。通過在數(shù)據(jù)流中插入特定的比特序列,可以指示通信的開始與結(jié)束。當(dāng)發(fā)送一個字節(jié)數(shù)據(jù)的時候,需要在比特流的開頭加上起始位,并在比特流的末尾加上結(jié)束位。數(shù)據(jù)字節(jié)的最低位緊接在起始位之后。
起始位用于告知接收設(shè)備:數(shù)據(jù)字節(jié)將要到達(dá)接收端。然后,接收設(shè)備按照設(shè)定的波特率,選中其數(shù)據(jù)接收線。如果波特率是x比特/秒,那么每個比特可用的時隙是1/x秒。接收設(shè)備會精確地在比特可用時隙一半的位置,定時選中數(shù)據(jù)接收線。如果通信使用了奇偶校驗功能,那么UART發(fā)送設(shè)備會在發(fā)送數(shù)據(jù)流中增加奇偶校驗位(取值為1,表示傳輸比特流中含有奇數(shù)個1;取值為0,則表示傳輸比特流中含有偶數(shù)個1)。UART接收設(shè)備計算接收到的數(shù)據(jù)位的奇偶校驗結(jié)果,并與接收到的奇偶校驗位進(jìn)行比較。UART接收設(shè)備丟棄掉接收比特流中的起始位、結(jié)束位、奇偶校驗位,并將接收到的串行比特數(shù)據(jù)轉(zhuǎn)換成字(比如,考慮8比特對應(yīng)于1個字節(jié)的情況,接收到8比特,最先接收到的數(shù)據(jù)位是LSB,最后接收到的數(shù)據(jù)位是MSB)。
為了實現(xiàn)正確的通信,發(fā)送設(shè)備的數(shù)據(jù)傳輸線應(yīng)該連接到接收設(shè)備的數(shù)據(jù)接收線上。圖2-28顯示了UART的連接圖。
除了串行數(shù)據(jù)傳輸功能以外,UART還可以為控制串行數(shù)據(jù)流提供硬件握手信號支持。很多半導(dǎo)體廠商都提供了相應(yīng)的UART芯片。NaTIonal半導(dǎo)體公司生產(chǎn)的8250 UART是具有標(biāo)準(zhǔn)設(shè)置的UART,用于IBM PC的早期設(shè)計中。
如今,大多數(shù)微處理器/控制器都集成有UART功能,并為串行數(shù)據(jù)傳輸與接收提供內(nèi)置式的指令支持。
4. 1-Wire接口
1-Wire接口是由Maxim Dallas半導(dǎo)體公司(首頁為http://www.maxim-ic.com)開發(fā)的異步半雙工通信協(xié)議,也稱為Dallas 1-Wire?協(xié)議。其中,按照主-從通信模型,只使用單條信號線DQ實現(xiàn)通信。1-Wire總線的一個重要特征在于,該總線允許在信號線上傳輸能量。I2C從設(shè)備在信號線上使用內(nèi)部電容器(其典型取值為800 pF)來驅(qū)動設(shè)備。1-Wire接口支持在總線上連接單個主設(shè)備以及一個或多個從設(shè)備。圖2-29顯示了1-Wire總線上主設(shè)備和從設(shè)備的連接關(guān)系圖。
每臺1-Wire設(shè)備都具有全球唯一可識別的64位識別碼信息,存儲在設(shè)備內(nèi)部。對于多臺從設(shè)備連接到1-Wire總線上的情況,通過解讀唯一的識別碼,可以尋址總線上存在的各臺獨立設(shè)備。識別碼由以下三個部分組成:8位的類別碼、48位的序列號以及前56比特數(shù)據(jù)的8位CRC校驗結(jié)果。與1-Wire從設(shè)備通信的具體流程如下:
(1) 主設(shè)備將復(fù)位脈沖發(fā)送到1-Wire總線上。
(2) 總線上的從設(shè)備通過確認(rèn)脈沖予以回應(yīng)。
(3) 主設(shè)備發(fā)送ROM命令(網(wǎng)絡(luò)尋址命令,參數(shù)是設(shè)備的64位地址),從而尋址到需要發(fā)起通信的從設(shè)備。
(4) 主設(shè)備發(fā)送讀/寫命令,對從設(shè)備的內(nèi)部存儲器或寄存器進(jìn)行讀/寫操作。
(5) 主設(shè)備將數(shù)據(jù)由從設(shè)備讀出,或者是將數(shù)據(jù)寫入從設(shè)備。
1-Wire總線上的所有通信都是由主設(shè)備發(fā)起的。其中,通信的最小間隔是時長為60微秒的時隙。復(fù)位脈沖占用8個時隙。在通信的開始階段,主設(shè)備將1-Wire總線拉低到低電平,并持續(xù)8個時隙(即480 μs),從而發(fā)出復(fù)位脈沖。如果總線上存在從設(shè)備,而且已經(jīng)準(zhǔn)備好進(jìn)行通信,那么從設(shè)備將通過確認(rèn)脈沖來回應(yīng)主設(shè)備;也就是說,從設(shè)備將1-Wire總線拉低到低電平,并持續(xù)1個時隙(即60 μs)。為了在1-Wire總線上寫入位值1,需要總線主設(shè)備將總線拉低,其持續(xù)時間為1~15 μs,然后在該時隙的其余時間段釋放總線。為了在總線上寫入位值0,主設(shè)備需要將總線拉低,其持續(xù)時間至少為1個時隙(60 μs),最多為2個時隙(120 μs)。為了由從設(shè)備讀出位值,主設(shè)備需要將總線拉低,并持續(xù)1~15 μs。為了響應(yīng)主設(shè)備的讀數(shù)據(jù)請求,如果從設(shè)備想要發(fā)送位值1,那么從設(shè)備只需要在該時隙的其余時間段釋放總線;如果從設(shè)備想要發(fā)送位值0,那么從設(shè)備需要在該時隙的其余時間段將總線拉低。
5. 并行接口
板上并行接口(parallel interface)通常用于系統(tǒng)與外圍設(shè)備之間的通信,其中,外圍設(shè)備通過存儲器映射到系統(tǒng)的主控端。只要嵌入式系統(tǒng)的主控處理器/控制器含有并行總線,支持并行總線的設(shè)備就可以直接連接到該總線系統(tǒng)上。外圍設(shè)備與主控端之間具有控制信號接口,可以控制并行總線上的數(shù)據(jù)通信。這里,通信的控制信號包括讀/寫信號和設(shè)備選擇信號。一般說來,外圍設(shè)備具有設(shè)備選擇線;只有當(dāng)主控處理器選通該線的時候,該設(shè)備才是有效的。數(shù)據(jù)傳輸?shù)姆较蚩梢允菑闹骺囟说酵鈬O(shè)備,也可以是從外圍設(shè)備到主控端;這是通過讀和寫控制信號線進(jìn)行控制的。只有主控處理器能夠控制讀控制信號和寫控制信號。一般說來,外圍設(shè)備通過存儲器映射到主控處理器,從而可以訪問分配的地址范圍。此時,設(shè)備需要使用地址譯碼電路來產(chǎn)生芯片選擇信號。當(dāng)處理器選擇的地址位于設(shè)備指定范圍內(nèi)的時候,譯碼電路對芯片選擇線進(jìn)行觸發(fā),從而激活設(shè)備。然后,處理器可以使能相應(yīng)的控制線(分別是RD與WD),從而由設(shè)備讀出數(shù)據(jù),或者是向設(shè)備寫入數(shù)據(jù)。為了實現(xiàn)并行通信,系統(tǒng)需要嚴(yán)格遵循時序規(guī)范。前面已經(jīng)提到過,并行通信是由主控處理器啟動的。如果某外圍設(shè)備想要對通信進(jìn)行初始化,那么可以向處理器發(fā)出中斷,告知相關(guān)信息。為了實現(xiàn)上述功能,設(shè)備的中斷線需要連接到處理器的中斷線上,并且主控處理器需要觸發(fā)相應(yīng)的中斷。需要說明的是,主控處理器的數(shù)據(jù)總線寬度決定了并行接口的寬度,可以是4位、8位、16位、32位、64位等。設(shè)備支持的總線寬度應(yīng)該與主控處理器完全相同。圖2-30顯示了并行接口總線上主控處理器和設(shè)備的連接關(guān)系圖。
評論