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

2020-12-08 電子產品世界

  隨著通信與計算機整合時代的到來,數位化、寬帶化和智能化已成為未來通信發展的方向,人類社會對電信業務從質量到業務種類都提出越來越高的要求,而接入網作為電信網的重要組成部分,連接本地交換機與用戶,是整個電信網的毛細血管和瓶頸,實現數位化、寬帶化和業務綜合化的關鍵。 嵌入式系統是以應用為中心的硬體設計和面向應用的軟體產品開發為基礎的專用計算機系統,廣泛應用於製造工業、過程控制、通信、儀器、儀表、汽車、船舶、航空、航天、軍事裝備、消費產品等領域。

本文引用地址:http://www.eepw.com.cn/article/201802/375748.htm

  在嵌入式系統中,板上通信接口是指用於將各種集成電路與其他外圍設備交互連接的通信通路或總線。下面將逐一說明常用的板上通信接口。

  1. I2C總線

  I2C總線是一種同步、雙向、半雙工的兩線式串行接口總線。這裡,半雙工的含義是指在任意給定的時刻,只有一個方向上是可以通信的。I2C總線最早由Philips半導體公司於20世紀80年代研發麵市。I2C最初的設計目標是為微處理器/微控制器系統與電視機外圍晶片之間的連接提供簡單的方法。I2C總線由兩條總線組成:串行時鐘線SCL和串行數據線SDA。SCL線負責產生同步時鐘脈衝,SDA線負責在設備間傳輸串行數據。I2C總線是共享的總線系統,因此可以將多個I2C設備連接到該系統上。連接到I2C總線上的設備既可以用作主設備,也可以用作從設備。主設備負責控制通信,通過對數據傳輸進行初始化/終止化,來發送數據並產生所需的同步時鐘脈衝。從設備則是等待來自主設備的命令,並響應命令接收。主設備和從設備都可以作為發送設備或接收設備。無論主設備是作為發送設備還是接收設備,同步時鐘信號都只能由主設備產生。在相同的總線上,I2C支持多個主設備的同時存在。圖2-26顯示了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條信號線,分別是:

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

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

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

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

  圖2-27顯示了SPI總線上主設備和從設備的連接關係圖。


  主設備負責產生時鐘信號,並通過將相應從設備的從設備選擇信號拉低為低電平,選通所需的從設備。在沒有選通的時候,所有從設備的數據輸出線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)。

  為了實現正確的通信,發送設備的數據傳輸線應該連接到接收設備的數據接收線上。圖2-28顯示了UART的連接圖。



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

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

  4. 1-Wire接口

  1-Wire接口是由Maxim Dallas半導體公司(首頁為http://www.maxim-ic.com)開發的異步半雙工通信協議,也稱為Dallas 1-Wire®協議。其中,按照主-從通信模型,只使用單條信號線DQ實現通信。1-Wire總線的一個重要特徵在於,該總線允許在信號線上傳輸能量。I2C從設備在信號線上使用內部電容器(其典型取值為800 pF)來驅動設備。1-Wire接口支持在總線上連接單個主設備以及一個或多個從設備。圖2-29顯示了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位等。設備支持的總線寬度應該與主控處理器完全相同。圖2-30顯示了並行接口總線上主控處理器和設備的連接關係圖。


相關焦點

  • UART/I2C/SPI/1-wire四大通信接口的神解釋
    2、叫你一聲你敢答應嗎之I2C作為太上老君看銀爐的童子,銀角大王最懂I2C,萬千人中我叫你一聲,你答應了就倒黴(從機地址正確才能通信)。這棗核釘是單向操作,用力過猛,棗核透過棗樹,用力太輕或者射偏了,棗樹沒有反應,這樣棗核用完了就悲劇了。可見這絕技,看起來簡便,實則背後隱藏了精確控制,對時機、位置控制要完美,如1-wire通信,單線控制,時鐘精準。1-wire總線接口簡單,一根線就可以,一般內部開漏輸出,外部硬體上拉。
  • 嵌入式硬體通信接口協議-UART(一)協議基礎
    由於串口(COM)不支持熱插拔及傳輸速率較低,目前部分新主板和大部分便攜電腦已開始取消該接口。目前串口多用於工控和測量設備以及部分通信設備中。  在幾乎所有的MCU中都會有UART接口。其中:  UART,「串口」時序協議的名稱,定義了各個信號時序協議;  USART,相比UART增加了同步信號,可實現ISO-7816智慧卡接口;  COM口,在PC等作業系統上,區別於USB、SATA接口的串行接口,定義了在作業系統中的規範;  TTL/CMOS,嵌入式硬體系統的信號電平;  RS-232,在UART
  • 嵌入式硬體通信接口協議中的串行通信接口-SPI
    本節繼續講嵌入式硬體通信接口協議中的另外一個串行通信接口-SPI。相比於UART串口協議,SPI又有著其獨特之處。SPI,是一種高速的,全雙工,同步的通信總線,並且在晶片的管腳上只佔用四根線,節約了晶片的管腳,同時為PCB的布局上節省空間,提供方便,正是出於這種簡單易用的特性,如今越來越多的晶片集成了這種通信協議,比如AT91RM9200。  --from 百度百科  該接口由摩託羅拉在20世紀80年代中期開發,並已成為事實標準。
  • 嵌入式硬體通信接口協議:UART(二)不同電氣規範下的標準
    在上一篇《嵌入式硬體通信接口協議-UART(一)協議基礎》中,簡單而細緻描述了UART的各個配置項以及通信過程的信號時序,此篇將繼續介紹UART接口在不一樣的電氣特性下,所使用的一些接口規範。在不一樣的應用場景下,不同的走線空間,不同程度幹擾的惡劣環境,不同的平臺和和設備間,要使用UART進行通信,信號管腳的電氣特性差異就是個很大的障礙,並且在很多低功耗設備的信號電平一般都較低(小於5V),因此,應對不一樣的應用場景和環境,而制定出不一樣的電氣特性協議。
  • spi與i2c總線有什麼區別
    什麼是SPI   SPI是串行外設接口(Serial Peripheral Interface)的縮寫。SPI,是一種高速的,全雙工,同步的通信總線,並且在晶片的管腳上只佔用四根線,節約了晶片的管腳,同時為PCB的布局上節省空間,提供方便,正是出於這種簡單易用的特性,如今越來越多的晶片集成了這種通信協議,比如AT91RM9200。
  • 單片機 arm 常用的接口總結
    常用的接口有spi,I2c,uart等,他們都有自己的協議規定,下面談談它們之間的聯繫與區別:1 I2C總線本文引用地址:http://www.eepw.com.cn/article/201611/321770.htm涉及到I2C的編程主要涉及到兩種情況:有專用控制器的arm晶片
  • 串口、COM口、UART、TTL、USB、RS-232、RS-485、I2C、SPI、CAN、1...
    電子產品,如電腦,滑鼠,充電器,包括汽車等,在我們的身邊有很多接口,帶你認識這些接口,知道長什麼樣子,用在什麼地方,怎麼用,原理是什麼?這篇文章僅僅作為簡單描述,入門級。WIRE 一、串口 1、串口概述   串行接口簡稱為串口,也叫串行通信接口,一般也叫COM口,這是一個統稱,採用串行通信的接口都叫作串口,串口是一個硬體接口。
  • 嵌入式PROFIBUS現場總線通信接口設計
    基於上述需求,嵌入式PROFIBUS-DP從站通信接口的設計為自主開發具有PROFIBUS-DP通信功能產品的用戶提供了一種快速、高效的解決方案。 1實現方法 (1)電路設計製作:使用PROFIBUS通信專用ASIC晶片SPC3實現協議相 關內容,選用合適的CPU,外圍加帶光電隔離的RS-485驅動; (2)單片機+Firmware軟體:需要在單片機中編程(Firmware軟體),實現單片機與ASIC的結合; (3)用戶產品的CPU通過串行接口向PROFIBUS-DP從站通信接口板讀/寫輸入
  • 通信接口協議介紹
    在現場數據採集和數據傳輸中大量採用接口方式,監控系統涉及較多的是串行通信接口和網絡接口。 一、串行通信協議 計算機與外設或計算機之間的通信通常有兩種方式:並行通信和串行通信。並行通信指數據的各位同時傳送。並行方式傳輸數據速度快,但佔用的通信線多,傳輸數據的可靠性隨距離的增加而下降,只適用於近距離的數據傳送。 串行通信是指在單根數據線上將數據一位一位地依次傳送。
  • 嵌入式PROFIBUS-DP從站通信接口的設計
    基於上述需求,嵌入式PROFIBUS-DP從站通信接口的設計為自主開發具有PROFIBUS-DP通信功能產品的用戶提供了一種快速、高效的解決方案。  (3)用戶產品的CPU通過串行接口向PROFIBUS-DP從站通信接口板讀/寫輸入/輸出數據;PROFIBUS-DP從站通信接口板自動轉換成PROFIBUS-DP協議與PROFIBUS主站通信;  (4)編寫GSD文件,搭建一個調試與測試平臺進行PROFIBUS系統配置。
  • 嵌入式中常用的總線與接口有哪一些
    嵌入式中常用的總線與接口有哪一些 中國電子網 發表於 2019-09-27 16:28:38 任何一個微處理器都要與一定數量的部件和外圍設備連接,但如果將各部件和每一種外圍設備都分別用一組線路與
  • 樹莓派怎樣連接多個I2C設備
    步驟2:案例1:I2c設備具有相同的地址 這始終是有問題的情況。 我將創建兩個附加總線, nl總線3和4 打開cli並運行 cd/boot sudo nano config.txt 添加以下代碼行,最好在啟用spi和i2c的部分中。
  • 淺談I2C總線,I2C接口和SPI接口的作用相同
    I2C 接口和 SPI 接口的作用相同,但二者的使用方法有些不同。  I2C 總線用兩根線來連接多支路總線中的多個設備。這種總線是雙向、低速的,並與公共時鐘同步。可以直接將一個設備接到 I2C 總線上或是從該總線上取下,而不會影響其他設備。一些生產商比如 Microchip 公司、Philips 公司、Intel 公司等生產的小型微處理器都內置了 I2C 接口。
  • 淺析六種常用的單片機通信協議
    打開APP 淺析六種常用的單片機通信協議 佚名 發表於 2019-11-08 16:36:46 在單片機的應用中,通信協議是必不可少的一部分,上位機與下位機,單片機與單片機,單片機與外設模塊之間的通信都需要通信協議實現信息交換和資源共享。
  • I/O擴展電路GM8166在嵌入式鍋爐系統中的應用
    該系統有32路數字輸入信號、32路數字輸出信號、11路模擬量輸入信號和8路模擬量輸出信號,因此所需要的硬體電路多,控制複雜,筆者以atmel公司的at91rm9200為處理器設計出了一款具有32位高速數據處理能力,處理速度可達200mi/s,並配有lcd、觸控螢幕、sd卡、cpld、音頻、網絡、usb及串行接口等多項功能的嵌入式工業鍋爐控制系統。
  • MIPI CSI-2 接口標準
    MIPI CSI-2 和 MIPI CSI-3 是MIPI 攝像機接口最初標準的升級版本,這兩個版本都在持續演進中。兩個版本都具有高級的架構設計,為開發人員,製造商和最終的消費者提供更多選擇和更大的價值,同時保持標準接口的優勢。技術概要
  • Linux下I2C總線EEPROM驅動程序設計方法
    對於I2C設備,基本上每種具體設備都有自己的基本特性。其驅動程序一般都需要特別設計。  在I2C總線驅動程序體系結構中。使用數據結構Driver來表示I2C設備驅動,使用數據結構Client表示一個具體的I2C設備。而對於I2C總線  控制器,各種總線控制器在進行數據傳輸時採用的算法有好多種,使用相同算法的控制器提供的控制接口也可能不同。
  • 異步串行通信協議的設計與實現
    引言      在單片機控制系統中,CPU和外部通信主要有兩種方 式:並行通信和串行通信。並行通信,即數據的各位同時傳 送;串行通信,即數據按位次序傳送。
  • 兩種MCU間的串行通信協議設計
    1 方案設計 要進行信息交互,離不開物理接口。在嵌入式應用中,目前常用的接口有UART、SPI和I2C等串行接口。UART接口只需兩根數據線就可以工作,時序控制簡單,大部分設備都整合了這種接口。而且,經過電平轉換後UART的TTL電平可以轉換成RS232電平,RS232接口是計算機標準配置的通信接口,可以通過超級終端查看串口的數據,便於使用PC機對線路進行檢測分析。因此,本設計採用UART接口作為Cortex-M3與C51之間的通信接口。
  • 實戰經驗吐血推薦:怎樣在Linux環境下輕鬆實現基於I2C總線的EEPROM...
    它是同步通信的一種特殊形式,具有接口線少、控制方式簡單、器件封裝形式小、通信速率較高等優點。在主從通信中,可有多個I2C總線器件同時接到I2C總線上,通過地址來識別通信對象。筆者在開發基於MPC8250的嵌入式Linux系統的過程中發現I2C總線在嵌入式系統中應用廣泛,I2C總線控制器的類型比較多,對系統提供的操作接口差別也很大。