I2C/SPI/UART/1-Wire/並行接口這幾種常用嵌入式通訊協議,你都了解嗎

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

嵌入式通信協議

隨著通信與計算機整合時代的到來,數字化、寬帶化和智能化已成為未來通信發展的方向,人類社會對電信業務從質量到業務種類都提出越來越高的要求,而接入網作為電信網的重要組成部分,連接本地交換機與用戶,是整個電信網的毛細血管和瓶頸,做到數字化、寬帶化和業務綜合化的關鍵。

嵌入式系統是以應用為中心的硬件設計和面向應用的軟件產品開發為基礎的專用計算機系統,在嵌入式系統中板上通信接口是指用於將各種集成電路與其他外圍設備交互連接的通信通路或總線。下面將逐一說明常用的板上通信接口。

 

1.

I2C總線

I2C總線是一種同步、雙向、半雙工的兩線式串行接口總線。這里,半雙工的含義是指在任意給定的時刻,只有一個方向上是可以通信的。

I2C總線最早由Philips半導體公司於20世紀80年代研發面市,I2C最初的設計目標是為微處理器/微控制器系統與電視機外圍晶片之間的連接提供簡單的方法。I2C總線由兩條總線組成:串行時鐘線SCL和串行數據線SDA。SCL線負責產生同步時鐘脈沖,SDA線負責在設備間傳輸串行數據。

I2C總線是共享的總線系統,因此可以將多個I2C設備連接到該系統上。連接到I2C總線上的設備既可以用作主設備,也可以用作從設備。主設備負責控制通信,通過對數據傳輸進行初始化/終止化,來發送數據並產生所需的同步時鐘脈沖。從設備則是等待來自主設備的命令,並響應命令接收。

主設備和從設備都可以作為發送設備或接收設備。無論主設備是作為發送設備還是接收設備,同步時鐘信號都只能由主設備產生。在相同的總線上,I2C支持多個主設備的同時存在。

  

基於輸入緩沖區和漏極開路晶體管(或者是集電極開路晶體管),可以構建I2C總線接口。當總線處於空閒狀態的時候,漏極開路晶體管(或者是集電極開路晶體管)處於懸空狀態,輸出導線(SDA和SCL)為高阻態。

為了使總線正常工作,應該使用上拉電阻,將兩條總線都上拉到供電電壓(TTL系列器件為+5V,CMOS系列器件為+3.3V)。上拉電阻通常取值為2.2K。使用上拉電阻,總線上輸出導線處於空閒狀態的時候,對應於高電平。

  

通過將設備地址線硬件連接到所需的邏輯電平上,可以分配I2C設備的地址。在嵌入式設備中,當設計嵌入式硬件的時候,需要分配各種I2C設備的地址並完成硬件連接。系統與I2C從設備通信的工作順序如下:

  1. 主設備將總線上的時鐘線(SCL)拉高到高電平。

  2. 當SCL線處於高電平邏輯(這是數據傳輸的啟動條件)的時候,主設備將數據線(SDA)拉低到低電平。

  3. 主設備通過SDA線,將從設備地址(具有7位或10位寬度)發送到通信目的地址。從設備會在SCL線上產生時鐘脈沖,用於同步位接收。需要說明的是,系統總是首先傳輸數據的MSB(最高位)。在時鐘信號處於高電平期間,總線中的數據是有效的。

  4. 根據需求,主設備發送讀位或寫位(位值等於1意味著讀操作,位值等於0意味著寫操作)。

  5. 主設備等待從設備發出確認位。在發送讀/寫操作命令的同時,從設備的地址也會發送到總線上。對於連接到總線上的從設備,會將接收到的地址與分配的地址進行比較。

  6. 如果從設備接收到來自主設備的指令並且地址正確,那麼從設備通過SDA線發送確認位(值為1)。

  7. 主設備接收到確認位之後,如果操作指令是向設備寫入數據,就通過SDA線向從設備發送8位數據。如果操作指令是從設備讀出數據,從設備將通過SDA線將數據發送給主設備。

  8. 對於寫入操作,在字節傳輸結束之後,主設備等待從設備發送確認位;對於讀出操作,在字節傳輸結束之後,主設備向從設備發送確認位。

  9. 當時鐘線SCL處於邏輯高電平(表示停止)的時候,通過將SDA線拉高到高電平,主設備可以終止數據傳輸。

  

I2C總線支持三種不同的數據速率:標準模式(數據速率為100kb/秒,即100kbps)、快速模式(數據速率為400kb/秒,即400kbps)、高速模式(數據速率為3.4Mb/秒,即3.4Mbps)。第一代I2C設備設計所支持的數據速率只有100kbps,新一代I2C設備則能夠以高達3.4Mbps的數據速率工作。

  

2.

SPI總線

SPI總線是同步、雙向、全雙工的4線式串行接口總線,最早由Motorola公司提出。SPI是由「單個主設備+多個從設備」構成的系統。需要說明的是:在系統中,只要任意時刻只有一個主設備是處於激活狀態的,就可以存在多個SPI主設備。為了做到通信,SPI共有4條信號線,分別是:

  • 主設備出、從設備入(Master Out Slave In,MOSI):由主設備向從設備傳輸數據的信號線,也稱為從設備輸入(Slave Input/Slave Data In,SI/SDI)。

  • 主設備入、從設備出(Master In Slave Out,MISO):由從設備向主設備傳輸數據的信號線,也稱為從設備輸出(Slave Output/Slave Data Out,SO/SDO)。

  • 串行時鐘(Serial Clock,SCLK):傳輸時鐘信號的信號線。

  • 從設備選擇(Slave Select,SS):用於選擇從設備的信號線,低電平有效。

主設備負責產生時鐘信號,並通過將相應從設備的從設備選擇信號拉低為低電平,選通所需的從設備。在沒有選通的時候,所有從設備的數據輸出線MISO都懸空處於高阻態。

  

SPI總線上的串行數據傳輸是用戶可配置的。SPI設備包含特定的寄存器組,可以保存所需的配置。串行外圍設備的控制寄存器用於保存各種配置參數,比如器件的主/從選擇、通信波特率的選擇、時鐘信號控制等。狀態寄存器則用於保存各種通信條件的狀態,做到所需的數據傳輸和數據接收。

  

SPI的工作是基於移位寄存器的;為了做到數據傳輸或數據接收,主設備和從設備包含了專用移位寄存器。移位寄存器的長度取決於具體設備,通常是8的整數倍。數據在從主設備傳輸到從設備的過程中,主設備移位寄存器中的數據從MOSI管腳移出,然後通過從設備的MOSI管腳,輸入到從設備的移位寄存器中。

與此同時,由從設備移位寄存器移位出來的數據,通過MISO管腳,輸入到主設備的移位寄存器中。也就是說,主設備和從設備的移位寄存器構成了一個循環緩沖區。對於特定類型的器件,可以通過配置寄存器(比如,對於Motorola公司生產的68HC12型控制器,需要配置SPI控制寄存器的LSBF位),決定最先發送的數據位是最高位還是最低位。

  

與I2C總線相比,SPI總線更適於數據流傳輸。SPI的不足之處在於,SPI不支持數據確認機制。

  

3.

UART

基於UART的數據傳輸是異步形式的串行數據傳輸。基於UART的串行數據傳輸不需要使用時鐘信號來同步傳輸的發送端和接收端,而是依賴於發送設備和接收設備之間預定義的配置。

對於發送設備和接收設備來說,兩者的串行通信配置(波特率、單位字的位數、奇偶校驗、起始位數與結束位、流量控制)應該設置為完全相同。通過在數據流中插入特定的比特序列,可以指示通信的開始與結束。當發送一個字節數據的時候,需要在比特流的開頭加上起始位,並在比特流的末尾加上結束位。數據字節的最低位緊接在起始位之後。

  

起始位用於告知接收設備:數據字節將要到達接收端。然後,接收設備按照設定的波特率,選中其數據接收線。如果波特率是x比特/秒,那麼每個比特可用的時隙是1/x秒。接收設備會精確地在比特可用時隙一半的位置,定時選中數據接收線。

如果通信使用了奇偶校驗功能,那麼UART發送設備會在發送數據流中增加奇偶校驗位(取值為1,表示傳輸比特流中含有奇數個1;取值為0,則表示傳輸比特流中含有偶數個1)。UART接收設備計算接收到的數據位的奇偶校驗結果,並與接收到的奇偶校驗位進行比較。

UART接收設備丟棄掉接收比特流中的起始位、結束位、奇偶校驗位,並將接收到的串行比特數據轉換成字(比如,考慮8比特對應於1個字節的情況,接收到8比特,最先接收到的數據位是LSB,最後接收到的數據位是MSB)。為了做到正確的通信,發送設備的數據傳輸線應該連接到接收設備的數據接收線上。

除了串行數據傳輸功能以外,UART還可以為控制串行數據流提供硬件握手信號支持。很多半導體廠商都提供了相應的UART晶片。NaTIonal半導體公司生產的8250 UART是具有標準設置的UART,用於IBM PC的早期設計中。

  

如今,大多數微處理器/控制器都集成有UART功能,並為串行數據傳輸與接收提供內置式的指令支持。

  

4.

1-Wire接口

1-Wire接口是由Maxim Dallas半導體公司開發的異步半雙工通信協議,也稱為Dallas 1-Wire®協議。其中,按照主-從通信模型,只使用單條信號線DQ做到通信。

1-Wire總線的一個重要特徵在於,該總線允許在信號線上傳輸能量。I2C從設備在信號線上使用內部電容器(其典型取值為800 pF)來驅動設備。1-Wire接口支持在總線上連接單個主設備以及一個或多個從設備。

每台1-Wire設備都具有全球唯一可識別的64位識別碼信息,存儲在設備內部。對於多台從設備連接到1-Wire總線上的情況,通過解讀唯一的識別碼,可以尋址總線上存在的各台獨立設備。識別碼由以下三個部分組成:8位的類別碼、48位的序列號以及前56比特數據的8位CRC校驗結果。與1-Wire從設備通信的具體流程如下:

  1. 主設備將復位脈沖發送到1-Wire總線上。

  2. 總線上的從設備通過確認脈沖予以回應。

  3. 主設備發送ROM命令(網路尋址命令,參數是設備的64位地址),從而尋址到需要發起通信的從設備。

  4. 主設備發送讀/寫命令,對從設備的內部存儲器或寄存器進行讀/寫操作。

  5. 主設備將數據由從設備讀出,或者是將數據寫入從設備。

  

1-Wire總線上的所有通信都是由主設備發起的。其中,通信的最小間隔是時長為60微秒的時隙。復位脈沖占用8個時隙。在通信的開始階段,主設備將1-Wire總線拉低到低電平,並持續8個時隙(即480 μs),從而發出復位脈沖。如果總線上存在從設備,而且已經準備好進行通信,那麼從設備將通過確認脈沖來回應主設備;也就是說,從設備將1-Wire總線拉低到低電平,並持續1個時隙(即60 μs)。

為了在1-Wire總線上寫入位值1,需要總線主設備將總線拉低,其持續時間為1~15 μs,然後在該時隙的其餘時間段釋放總線。

為了在總線上寫入位值0,主設備需要將總線拉低,其持續時間至少為1個時隙(60 μs),最多為2個時隙(120 μs)。為了由從設備讀出位值,主設備需要將總線拉低,並持續1~15 μs。

為了響應主設備的讀數據請求,如果從設備想要發送位值1,那麼從設備只需要在該時隙的其餘時間段釋放總線;如果從設備想要發送位值0,那麼從設備需要在該時隙的其餘時間段將總線拉低。

  

5.

並行接口

板上並行接口(parallel interface)通常用於系統與外圍設備之間的通信,其中,外圍設備通過存儲器映射到系統的主控端。只要嵌入式系統的主控處理器/控制器含有並行總線,支持並行總線的設備就可以直接連接到該總線系統上。外圍設備與主控端之間具有控制信號接口,可以控制並行總線上的數據通信。這里,通信的控制信號包括讀/寫信號和設備選擇信號。

一般說來,外圍設備具有設備選擇線;只有當主控處理器選通該線的時候,該設備才是有效的。數據傳輸的方向可以是從主控端到外圍設備,也可以是從外圍設備到主控端;這是通過讀和寫控制信號線進行控制的。只有主控處理器能夠控制讀控制信號和寫控制信號。

一般說來,外圍設備通過存儲器映射到主控處理器,從而可以訪問分配的地址範圍。此時,設備需要使用地址譯碼電路來產生晶片選擇信號。當處理器選擇的地址位於設備指定範圍內的時候,譯碼電路對晶片選擇線進行觸發,從而激活設備。然後,處理器可以使能相應的控制線(分別是RD\與WD\),從而由設備讀出數據,或者是向設備寫入數據。

為了做到並行通信,系統需要嚴格遵循時序規範。前面已經提到過,並行通信是由主控處理器啟動的。如果某外圍設備想要對通信進行初始化,那麼可以向處理器發出中斷,告知相關信息。

為了做到上述功能,設備的中斷線需要連接到處理器的中斷線上,並且主控處理器需要觸發相應的中斷。需要說明的是,主控處理器的數據總線寬度決定了並行接口的寬度,可以是4位、8位、16位、32位、64位等。設備支持的總線寬度應該與主控處理器完全相同。

I2C/SPI/UART/1-Wire/並行接口這幾種常用嵌入式通訊協議,你都了解嗎 科技 第1張

I2C/SPI/UART/1-Wire/並行接口這幾種常用嵌入式通訊協議,你都了解嗎 科技 第2張

↓↓↓↓點擊閱讀原文,查看更多新聞

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!