硬件通信協議


硬件通信協議

前言

完整的硬件產品是由多種模塊組合實現產品功能的,微控制器 MCU 充當大腦,外圍的存儲單元、顯示單元、發聲單元、傳感器單元、運動單元等等是其軀干和四肢,而不同類型的硬件單元需要有機的結合起來,就離不開相互之間的數據通信,電子工業經過了百余年的發展,衍生出了繁多的協議,其中既有行業公認的標准協議,也有企業自研的內部標准,這些協議通常可以分為並行通信協議和串行通信協議。

  • 並行通信,在同一時刻發送多位數據(可以是多根線)。優點是發送速度快;缺點是傳輸距離短 資源占用多。   

  •   串行通信,用一根線 在不同的時刻發送8位數據。優點是傳輸距離遠 占用資源少;缺點是發送速度慢。

    通信的方式可以分為:全雙工、半雙工、單工

  • 單工通信 只能接受或者發送 收音機 遙控器,一般只有一根線

  • 半雙工通信 在同一時刻只能發送或者接收 對講機,至少有兩根線

  • 全雙工通信 在同一時刻 既能接收又能發送 電話,至少有兩根線

    根據是接收端和發送端時鍾頻率的異同又可分為同步通信和異步通信,本章將簡單介紹主流的一些硬件通信協議。

SPI 協議

 協議概括    

    SPI是串行外設接口(Serial Peripheral Interface)的縮寫。SPI,是一種高速的,全雙工,同步的通信總線,並且在芯片的管腳上只占用四根線,節約了芯片的管腳,同時為PCB的布局上節省空間,提供方便,正是出於這種簡單易用的特性,如今主流的微控制器都集成有spi接口,如 stm32 家族。

通信原理

    SPI的通信原理很簡單,它以主從方式工作,這種模式通常有一個主設備和一個或多個從設備,需要至少4根線,事實上3根也可以(單向傳輸時)。也是所有基於SPI的設備共有的,它們是SDI(數據輸入)、SDO(數據輸出)、SCLK(時鍾)、CS(片選)。

  • SDI – SerialData In,串行數據輸入;

  • SDO – SerialDataOut,串行數據輸出;

  • SCLK – Serial Clock,時鍾信號,由主設備產生;

  • CS – Chip Select,從設備使能信號,由主設備控制。

    其中,CS是從芯片是否被主芯片選中的控制信號,也就是說只有片選信號為預先規定的使能信號時(高電位或低電位),主芯片對此從芯片的操作才有效。這就使在同一條總線上連接多個SPI設備成為可能。

    接下來就負責通訊的3根線了。通訊是通過數據交換完成的,這里先要知道SPI是串行通訊協議,也就是說數據是一位一位的傳輸的。這就是SCLK時鍾線存在的原因,由SCLK提供時鍾脈沖,SDI,SDO則基於此脈沖完成數據傳輸。數據輸出通過 SDO線,數據在時鍾上升沿或下降沿時改變,在緊接着的下降沿或上升沿被讀取。完成一位數據傳輸,輸入也使用同樣原理。因此,至少需要8次時鍾信號的改變(上沿和下沿為一次),才能完成8位數據的傳輸。

    SCLK信號線只由主設備控制,從設備不能控制信號線。同樣,在一個基於SPI的設備中,至少有一個主控設備。這樣傳輸的特點:這樣的傳輸方式有一個優點,與普通的串行通訊不同,普通的串行通訊一次連續傳送至少8位數據,而SPI允許數據一位一位的傳送,甚至允許暫停,因為SCLK時鍾線由主控設備控制,當沒有時鍾跳變時,從設備不采集或傳送數據。也就是說,主設備通過對SCLK時鍾線的控制可以完成對通訊的控制。

    通過邏輯分析儀采集 spi 總線數據,可以看到四個通道的波形變化,判斷信號的時鍾周期、時鍾相位和極性,並能夠解碼獲取實際傳輸的數據和指令。

    SPI還是一個數據交換協議:因為SPI的數據輸入和輸出線獨立,所以允許同時完成數據的輸入和輸出。不同的SPI設備的實現方式不盡相同,主要是數據改變和采集的時間不同,在時鍾信號上沿或下沿采集有不同定義,具體請參考相關器件的文檔。

    最后,SPI接口的一個缺點:沒有指定的流控制,沒有應答機制確認是否接收到數據。

I2C 協議

 協議概括    

    I2C總線是由Philips公司開發的一種簡單、雙向二線制同步串行總線。它只需要兩根線即可在連接於總線上的器件之間傳送信息。

    主器件用於啟動總線傳送數據,並產生時鍾以開放傳送的器件,此時任何被尋址的器件均被認為是從器件.在總線上主和從、發和收的關系不是恆定的,而取決於此時數據傳送方向。如果主機要發送數據給從器件,則主機首先尋址從器件,然后主動發送數據至從器件,最后由主機終止數據傳送;如果主機要接收從器件的數據,首先由主器件尋址從器件.然后主機接收從器件發送的數據,最后由主機終止接收過程。在這種情況下.主機負責產生定時時鍾和終止數據傳送。

通信原理

    SDA(串行數據線)和SCL(串行時鍾線)都是雙向I/O線,接口電路為開漏輸出.需通過上拉電阻接電源VCC.當總線空閑時.兩根線都是高電平,連接總線的外同器件都是CMOS器件,輸出級也是開漏電路.在總線上消耗的電流很小,因此,總線上擴展的器件數量主要由電容負載來決定,因為每個器件的總線接口都有一定的等效電容.而線路中電容會影響總線傳輸速度.當電容過大時,有可能造成傳輸錯誤.所以,其負載能力為400pF,因此可以估算出總線允許長度和所接器件數量。

    主器件用於啟動總線傳送數據,並產生時鍾以開放傳送的器件,此時任何被尋址的器件均被認為是從器件.在總線上主和從、發和收的關系不是恆定的,而取決於此時數據傳送方向。如果主機要發送數據給從器件,則主機首先尋址從器件,然后主動發送數據至從器件,最后由主機終止數據傳送;如果主機要接收從器件的數據,首先由主器件尋址從器件.然后主機接收從器件發送的數據,最后由主機終止接收過程。在這種情況下.主機負責產生定時時鍾和終止數據傳送。

    邏輯分析儀采集 I2C 總線數據,可以看到 SDA 和 SCL 的數據波形,查看每次的指令和數據、地址等。

CAN 協議

 協議概括        

    控制器局域網總線(CAN,Controller Area Network)是一種用於實時應用的串行通訊協議總線,它可以使用雙絞線來傳輸信號,是世界上應用最廣泛的現場總線之一。CAN協議用於汽車中各種不同元件之間的通信,以此取代昂貴而笨重的配電線束。該協議的健壯性使其用途延伸到其他自動化和工業應用。CAN協議的特性包括完整性的串行數據通訊、提供實時支持、傳輸速率高達1Mb/s、同時具有11位的尋址以及檢錯能力。

通信原理

    CAN總線使用串行數據傳輸方式,可以1Mb/s的速率在40m的雙絞線上運行,也可以使用光纜連接,而且在這種總線上總線協議支持多主控制器。 CAN與I2C總線的許多細節很類似,但也有一些明顯的區別。當CAN總線上的一個節點(站)發送數據時,它以報文形式廣播給網絡中所有節點。對每個節點來說,無論數據是否是發給自己的,都對其進行接收。每組報文開頭的11位字符為標識符,定義了報文的優先級,這種報文格式稱為面向內容的編址方案。在同一系統中標識符是唯一的,不可能有兩個站發送具有相同標識符的報文。當幾個站同時競爭總線讀取時,這種配置十分重要。

  當一個站要向其它站發送數據時,該站的CPU將要發送的數據和自己的標識符傳送給本站的CAN芯片,並處於准備狀態;當它收到總線分配時,轉為發送報文狀態。CAN芯片將數據根據協議組織成一定的報文格式發出,這時網上的其它站處於接收狀態。每個處於接收狀態的站對接收到的報文進行檢測,判斷這些報文是否是發給自己的,以確定是否接收它。由於CAN總線是一種面向內容的編址方案,因此很容易建立高水准的控制系統並靈活地進行配置。我們可以很容易地在CAN總線中加進一些新站而無需在硬件或軟件上進行修改。當所提供的新站是純數據接收設備時,數據傳輸協議不要求獨立的部分有物理目的地址。它允許分布過程同步化,即總線上控制器需要測量數據時,可由網上獲得,而無須每個控制器都有自己獨立的傳感器。

USB 協議

 協議概括

    通用串行總線(英語:Universal Serial Bus,縮寫:USB)是連接計算機系統與外部設備的一種串口總線標准,也是一種輸入輸出接口的技術規范,被廣泛地應用於個人電腦和移動設備等信息通訊產品,並擴展至攝影器材、數字電視(機頂盒)、游戲機等其它相關領域。

通信原理

    USB總線屬於一種輪詢式總線,主機控制端口初始化所有的數據傳輸。每一總線動作最多傳送三個數據包,包括令牌(Token)、數據(Data)、聯絡(HandShake)。

    按照傳輸前制定好的原則,在每次傳送開始時,主機送一個描述傳輸動作的種類、方向、USB設備地址和終端號的USB數據包,這個數據包通常被稱為令牌包(TokenPacket)。USB設備從解碼后的數據包的適當位置取出屬於自己的數據。數據傳輸方向不是從主機到設備就是從設備到主機。

USB 2.0 接口

USB 3.0 接口

    在傳輸開始時,由標志包來標志數據的傳輸方向,然后發送端開始發送包含信息的數據包或表明沒有數據傳送。接收端也要相應發送一個握手的數據包表明是否傳送成功。發送端和接收端之間的USB數據傳輸,在主機和設備的端口之間,可視為一個通道。USB中有一個特殊的通道一缺省控制通道,它屬於消息通道,設備一啟動即存在,從而為設備的設置、狀態查詢和輸入控制信息提供一個入口。

UART 協議

 協議概括

    通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART,是一種異步收發傳輸器,是電腦硬件的一部分。它將要傳輸的資料在串行通信與並行通信之間加以轉換。作為把並行輸入信號轉成串行輸出信號的芯片,UART通常被集成於其他通訊接口的連結上。

    具體實物表現為獨立的模塊化芯片,或作為集成於微處理器中的周邊設備。一般是RS-232C規格的,與類似Maxim的MAX232之類的標准信號幅度變換芯片進行搭配,作為連接外部設備的接口。在UART上追加同步方式的序列信號變換電路的產品,被稱為USART(Universal Synchronous Asynchronous Receiver Transmitter)。

通信原理

    計算機內部采用並行數據,不能直接把數據發到Modem,必須經過UART整理才能進行異步傳輸,其過程為:CPU先把准備寫入串行設備的數據放到UART的寄存器(臨時內存塊)中,再通過FIFO(First Input First Output,先入先出隊列)傳送到串行設備,若是沒有FIFO,信息將變得雜亂無章,不可能傳送到Modem。

    UART作為異步串口通信協議的一種,工作原理是將傳輸數據的每個字符一位接一位地傳輸。

    其中各位的意義如下:

  •     起始位:先發出一個邏輯”0”的信號,表示傳輸字符的開始。

  • 資料位:緊接着起始位之后。資料位的個數可以是4、5、6、7、8等,構成一個字符。通常采用ASCII碼。從最低位開始傳送,靠時鍾定位。

  • 奇偶校驗位:資料位加上這一位后,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗),以此來校驗資料傳送的正確性。

  • 停止位:它是一個字符數據的結束標志。可以是1位、1.5位、2位的高電平。 由於數據是在傳輸線上定時的,並且每一個設備有其自己的時鍾,很可能在通信中兩台設備間出現了小小的不同步。因此停止位不僅僅是表示傳輸的結束,並且提供計算機校正時鍾同步的機會。適用於停止位的位數越多,不同時鍾同步的容忍程度越大,但是數據傳輸率同時也越慢。

  • 空閑位:處於邏輯“1”狀態,表示當前線路上沒有資料傳送。

  • 波特率:是衡量資料傳送速率的指標。表示每秒鍾傳送的符號數(symbol)。一個符號代表的信息量(比特數)與符號的階數有關。例如資料傳送速率為120字符/秒,傳輸使用256階符號,每個符號代表8bit,則波特率就是120baud,比特率是120*8=960BIT/S。

    通過邏輯分析儀抓取 uart 總線數據,可以清楚的看到數據幀格式。

參考鏈接

1.《物聯網安全百科》 https://iot-security.wiki


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM