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