天天看點

嵌入式中常見通訊方式的基礎概念簡介

目錄

(1)UART

(2)SPI

(3)IIC

(4)TTL

(5)RS232

(6)RS422

(7)RS485

(8)CAN

(9)USB

在這裡,主要針對一些常用的通訊協定,或者與通訊有關的一些基礎概念,做一些簡單的介紹,由于網絡協定屬于特别大的一塊,是以在此不對網絡協定的相關東西進行介紹。

先對單工、半雙工、全雙工做一個簡單介紹,假如A與B進行通信:

單工方式:隻能A發送B接收,或者隻能B發送A接收

半雙工方式:可以A發送B接收,也可以B發送A接收,但是二者不能同時進行互相發送

全雙工方式:可以A發送B接收,也可以B發送A接收,并且二者可以同時互相進行發送和接收

(1)UART

序列槽傳輸;三根線傳輸:TX(發送),RX(接收),GND(地線)。全雙工方式,TX和RX要反着接,即A的TX接B的RX,A的RX接B的TX。在單片機和主機使用序列槽進行通信時,需要接一塊電平轉換晶片,将TTL/CMOS(單片機電平)轉換為RS232(PC機電平)。

資料協定:以PC機A給單片機B發資料為例(1為高電平,0為低電平):A.TX到B.RX。剛開始B.RX的端口保持1,當A.TX發來一個0作為起始位告訴B我要發資料了!然後就開始發資料,發多少呢?通常一次是5位、6位、7位、8位,這個雙方事先要用軟體設定好。PC機一般會用序列槽助手設定,單片機會在uart的驅動中設定。一小幀資料發送完了以後,A.TX給個高電平1告訴B.RX我發完了一幀。如果還有資料,就再給個0然後重複上一步。如果雙方約定有校驗位,還要在發停止位1之前發送個校驗位,不過現在一般都不需要校驗位了,因為出錯的機率太小了,而且一般用于調試。

(2)SPI

串行同步外設接口。由摩托羅拉(Motorola)公司開發的全雙工同步串行總線,由SDI(串行資料輸入),SDO(串行資料輸出),SCK(串行移位時鐘),CS(從使能信号)四種信号構成。一主多從。CS決定了唯一的與主裝置通信的從裝置,片選信号低電平有效。

資料協定:資料在時鐘的上升或下降沿由SDO輸出,在緊接着的下降或上升沿被采集讀取,輸入的道理也一樣。這樣經過8/16次時鐘的改變,完成8/16 位資料的傳輸。

(3)IIC

(Inter-Integrated Circuit)總線是由飛利浦(Philips)公司開發的兩線式串行總線。一個時鐘線SCL和一個資料線SDA。半雙工。兩根線上可以挂很多從裝置(各個從裝置的IIC位址不同),可以通過IIC位址來差別各個裝置。

資料協定:假設A給B發資料(這裡A.SCL接B.SCL,A.SDA接B.SDA)。起初SDA和SCL上的電平都為高電平。然後在SCL高電平的時候,将SDA拉低,之後再将SCL拉低(即發送起始位)。SDA發送資料和SCL發送脈沖的要符合的關系是:SDA必須在SCL是高電平時保持有效,在SCL是低電平時發送下一位(SCL會在上升沿對SDA進行采樣)。規定一次必須傳8位資料,8位資料傳輸結束後A釋放SDA,但SCL再發一個脈沖(這是第九個脈沖),這會觸發B通過将SDA置為低電平表示确認(該低電平稱為ACK)。最後SCL先變為高電平,SDA再由低電平變為高電平(即結束标志)。如果B沒有将SDA置為0,則A停止發送下一幀資料。IIC總線(即SDA和SCL)上的每個裝置都有唯一位址,資料包傳輸時先發送位址位,接着才是資料。一個位址位元組由7個位址位(可以挂128個裝置)和1個訓示位組成(7位尋址模式)。訓示位是0表示寫,1表示讀。還有10位尋址模式,使用兩個位元組來儲存位址,第一個位元組的最低兩位和第二個位元組的8位合起來構成10位位址。在時鐘線(SCL)為高電平的時候,一定不能動資料線(SDA)狀态,除非是啟動或者結束總線。

信号類型:

            (1)開始信号START:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送資料

            (2)結束信号STOP:SCL為高電平時,SDA由低電平向高電平跳變,結束傳送資料

            (3)資料傳輸信号:在開始條件以後,時鐘信号SCL的高電平周期期間,當資料線穩定時,資料線SDA的狀态表示資料有效,即資料可以被讀走,開始進行讀操作。在時鐘信号SCL的低電平周期期間,資料線上資料才允許改變。每位資料需要一個時鐘脈沖。

            (4)應答信号ACK:接收資料的IC在接收到8bit資料後,向發送資料的IC發出特定的低電平脈沖,表示已收到資料。CPU向受控單元發出一個信号後,等待受控單元發出一個應答信号,CPU接收到應答信号後,根據實際情況作出是否繼續傳遞信号的判斷。若未收到應答信号,由判斷為受控單元出現故障。

        寫流程:

            (1)Master發起START

            (2)Master發送I2C addr(7bit)和 W操作0(1bit),等待ACK

            (3)Slave發送ACK

            (4)Master發送reg addr(8bit),等待ACK

            (5)Slave發送ACK

            (6)Master發送data(8bit),即要寫入寄存器中的資料,等待ACK

            (7)Slave發送ACK

            (8)第6步和第7步可以重複多次,即順序寫多個寄存器

            (9)Master發起STOP

        讀流程:

            (1)Master發起START

            (2)Master發送I2C addr(7bit)和 W操作0(1bit),等待ACK

            (3)Slave發送ACK

            (4)Master發送reg addr(8bit),等待ACK

            (5)Slave發送ACK

            (6)Master發起START

            (7)Master發送I2C addr(7bit)和 R操作1(1bit),等待ACK

            (8)Slave發送ACK

            (9)Slave發送data(8bit),即寄存器裡的值

            (10)Master發送ACK

            (11)第9步和第10步可以重複多次,即順序讀多個寄存器

            (12)Master發起STOP

接着介紹一下與上述有關的幾種電氣接口等:

(4)TTL

邏輯門電路,有晶體三極管和電阻構成。速度快,傳輸延遲時間短(5-10納秒),但是功耗大。

TTL電平:+5V為邏輯1,0V為邏輯0。

(5)RS232

異步傳輸标準接口。全雙工。電平信号。主要使用三根線:TX、RX、GND。一收一發。

在TxD和RxD上:邏輯1(MARK)=-3V~-15V,邏輯0(SPACE)=+3~+15V。在RTS、CTS、DSR、DTR和DCD等控制線上:信号有效(接通,ON狀态,正電壓)=+3V~+15V,信号無效(斷開,OFF狀态,負電壓)=-3V~-15V。傳輸速率較低,傳輸距離大概15米左右。

(6)RS422

全雙工。差分信号。有五根線:TXA、RXA、TXB、RXB、GND。一發十收。

發送驅動器A、B之間的正電平在+2~+6V,是一個邏輯狀态,負電平在-2~6V,是另一個邏輯狀态。最大傳輸距離為4000英尺(約1219米),最大傳輸速率為10Mb/s。其平衡雙絞線的長度與傳輸速率成反比。

(7)RS485

半雙工。差分信号。有三根線:TX/RX+、TX/RX-、GND。一發多收。

邏輯"1"以兩線間的電壓差為+(2-6)V表示;邏輯"0"以兩線間的電壓差為-(2-6)V表示。最大傳輸距離标準值為4000英尺,實際上可達3000米。

最後再介紹兩種常用的總線:

(8)CAN

(Controller Area Network)控制器區域網路絡。現場總線。包括兩根線CAN_H和CAN_L。串行差分信号。

在CAN_H和CAN_L之間需要接上120歐姆的終端電阻。CAN收發器的作用是負責邏輯電平和信号電平之間的轉換。

是由以研發和生産汽車電子産品著稱的德國BOSCH公司開發的,并最終成為國際标準(ISO-11898),是國際上應用最廣泛的現場總線之一。

CAN總線采用不歸零碼位填充技術,CAN總線上信号有兩種不同的信号狀态,分别是顯性的邏輯0和隐性的邏輯1,信号每一次傳輸完之後不需要傳回到邏輯0的電平。位填充規則:發送器隻要檢測到位流裡有5個連續相同值的位,便自動在位流裡插入補充位。

CAN_H-CAN_L < 0.5V 時候為隐性的,邏輯信号表現為"邏輯1"- 高電平。

CAN_H-CAN_L > 0.9V 時候為顯性的,邏輯信号表現為"邏輯0"- 低電平。

CAN總線是一個廣播類型的總線,在仲裁期間,每一個發送器都對發送的電平與被監控的總線電平進行比較。如果電平相同,則這個單元可以繼續發送。如果發送的是一"隐性"電平而監視到的是一"顯性"電平,那麼這個節點失去了仲裁,必須退出發送狀态。

(9)USB

(Universal Serial Bus)通用串行總線

總線協定是以Intel為主,并有Compaq,Microsoft,IBM,DEC,Northern_Telecom以及日本NEC等共七家公司共同制定的串行接口标準。屬于一種輪詢式總線,主機控制端口初始化所有的資料傳輸。每一總線動作最多傳送三個資料包,包括令牌(Token)、資料(Data)、聯絡(HandShake)。