串行通信數據總線 SPI UART I2C

前言:

      計算機與計算機之間或者計算機與外部設備之間的信息交換稱爲通信。計算機的通信有兩種方式:並行通信和串行通信。在通信的過程中,如果能夠同時傳送數據的所有位(位數由機器的字長決定),就稱爲並行通信;如果數據是逐位順序傳送,則稱爲串行通信。計算機與外設間的接口按照通信 方式的不同,相應地分爲並行接口和串行接口。並行通信和串行通信是指接口與外部設備一側的通信方式,與CPU之間的通信都是並行通信的。

    一、並行通信

            並行接口的特點:

        由於多數的I/O設備,特別是系統基本的I/O設備都採用並行數據傳送,因此並行接口的應用十分普遍。一般來講,並行接口有如下特點。

        (1)以數據字節或字爲單位進行數據傳輸,兩個功能模塊間有多位數據同時進行數據傳送,速度快、效率高。

         (2)適合近距離傳送。由於並行通信需要的數據線路比較多,造價高,且容易產生干擾。因此並行通信通常都用於近距離、高速數據交換的場合。

          (3)並行傳送中,8位、16位或4字節的數據是同時傳輸的,因此在並行接口與外部設備進行數據交換時,即使之需要傳送一位,也是一次輸入/輸出8位、16位或4字節。

           (4)串行傳送的信息有固定格式要求,並行傳送的信息不要求固定格式。

二、串行通信

        串行通信是指兩個功能模塊只通過一條或兩條數據線進行數據交換。發送方將數據分解爲二進制位,一位接一位地順序通過單條數據線發送,接收方則一位一位地從單條數據線上接收,並將其重新組裝成一個數據。串行通信數據線路少,造價低,適合於遠距離傳送。但由於數據是一位一位傳送的,故速度慢。

    1.串行數據傳送方式

        串行通信是一位一位通過同一信號線進行數據傳送的方式。按照數據流的方向可分爲3種基本傳送方式:全雙工、半雙工和單工。

    如果串行通信的通路只有一條,此時發送信息和接收信息就不能同時進行,只能採用分時使用線路的方法。比如A在發送信息時,B只能接收;而當B發送信息時,則A只能接收。這種串行通信的工作方式稱爲半雙工通信方式。

    如果有兩條通路,則發送信息和接收信息就可以同時進行,當A發送信息、b接收信息,b也能夠同時利用另一條通路發送信息而由A接收。這種通信的方式稱爲全雙工。

    除了半雙工和全雙工外,還有一種單工的通信方式,它只允許一個方向傳送信息,而不允許反向傳輸。這種方式在實際應用中較少見。

    2.調製與解調

    計算機在通信時發送接收的信息均是數字信號,其佔用的頻帶很寬,約爲幾MHZ甚至更高;但目前長距離通信時採用的傳統電話線路頻帶很窄,大約僅有4KHZ。直接傳送必然會造成信號的嚴重畸變,大大降低了通信的可靠性。所以在長距離通信時,爲了確保數據的正常傳送,一般都要在傳送之前把信號轉換成適合傳送的形式,傳送到目的地後再恢復成原始信號。這個轉換工作可利用調制解調器(MODEM)來實現。

    在發送站,調制解調器把“1”和“0”的數字脈衝信號調製在載波信號上;承載了數字信號的載波信號在普通電話網絡系統中傳送;在目的站,調制解調器把承載了數字信息的載波信號再恢復成原來的“1”和“0”數字脈衝信號。

    信號的調製方法主要有三種:調頻、調幅和調相。當調製信號爲數字信號時,這三種調製方法又分別稱爲頻移鍵控法FSK(frequency shift keying)、幅度鍵控法ASK(Amplitude shift keying)和相移鍵控法PSK(phase shift keying)。

        (1)調頻就是把數字信號的“1”和”0“調製成不同頻率的模擬信號,例如用1200HZ的信號表示”0“,用2400HZ的信號表示”1“。接收方根據載波信號的頻率就可知道傳輸的信息是”1“還是”0“。

        (2)調幅就是把數字信號的“1”和“0”調製成不同幅度的模擬信號,但頻率保持不變。例如把載波信號的幅度大於8V時表示“0”,載波信號的幅度小於3V時表示“1”。

        (3)調相就是把數字信號的“1”和“0”調製成不同相位的模擬信號,但頻率和幅度均保持不變。例如把載波信號的相位爲0°時表示“0”,載波信號的相位爲180°時表示“1”。

    3.同步通信和異步通信

        串行通信的數據是逐位傳送的,發送方發送的每一位都具有固定的時間間隔,這就要求接收方也要按照發送方同樣的時間間隔來接收每一位。不僅如此,接收方還要確定一個信息組的開始和結束。爲此,串行通信對數據格式做了嚴格的規定。不同的串行通信方式具有不同的數據格式。

    1)同步通信

    所謂同步通信,是指在約定的通信速率下,發送端和接收端的時鐘信號頻率和相位始終保持一致(同步)。這就保證了通信雙方在發送和接收數據時具有完全一致的定時關係。

    

    2)異步通信

    異步通信是指通信中兩個字符之間的時間間隔是不固定的,而在一個字符內各位的時間間隔是固定的。

    異步通信規定字符有 起始位(start bit)、數據位(data bit)、奇偶校驗位(parity)、停止位(stop bits)組成。

    由於CPU與接口之間按並行方式傳輸,接口與外設之間按串行方式傳輸,因此,在串行接口中,必須要有“接收移位寄存器”(串→並)和“發送移位寄存器”(並→串)。

 

 

在數據輸入過程中,數據1位1位地從外設進入接口的“接收移位寄存器”,當“接收移位寄存器”中已接收完1個字符的各位後,數據就從“接收移位寄存器”進入 “數據輸入寄存器”。CPU從“數據輸入寄存器”中讀取接收到的字符。(並行讀取,即D7~D0同時被讀至累加器中)。“接收移位寄存器”的移位速度由“ 接收時鐘”確定。
在數據輸出過程中,CPU把要輸出的字符(並行地)送入“數據輸出寄存器”,“數據輸出寄存器”的內容傳輸到“發送移位寄存器”,然後由“發送移位寄存器”移位,把數據1位1位地送到外設。“發送移位寄存器”的移位速度由“發送時鐘”確定。
接口中的“控制寄存器”用來容納CPU送給此接口的各種控制信息,這些控制信息決定接口的工作方式。
“狀態寄存器”的各位稱爲“狀態位”,每一個狀態位都可以用來指示數據傳輸過程中的狀態或某種錯誤。例如,用狀態寄存器的D5位爲“1”表示“數據輸出寄存器”空,用D0位表示“數據輸入寄存器滿”,用D2位表示“奇偶檢驗錯”等。
能夠完成上述“串<- ->並”轉換功能的電路,通常稱爲“通用異步收發器”(UART:Universal Asynchronous Receiver and Transmitter),典型的芯片有:Intel 8250/8251,16550.
UART總線是異步串口,因此一般比前兩種同步串口的結構要複雜很多,一般由波特率產生器(產生的波特率等於傳輸波特率的16倍)、UART接收器、UART發送器組成,硬件上由兩根線,一根用於發送,一根用於接收。
    顯然,如果用通用IO口模擬UART總線,則需一個輸入口,一個輸出口。
 SPI(serial peripheral interface)總線由三條信號線組成:串行時鐘(SCLK)、串行數據輸出(SDO)、串行數據輸入(SDI)。SPI總線可以實現多個SPI設備互相連接。提供SPI串行時鐘的SPI設備爲SPI主機或主設備(Master),其他設備爲SPI從機或從設備(Slave)。主從設備間可以實現全雙工通信,當有多個從設備時,還可以增加一條從設備選擇線。
 如果用通用IO口模擬SPI總線,必須要有一個輸出口(SDO),一個輸入口(SDI),另一個口則視實現的設備類型而定,如果要實現主從設備,則需輸入輸出口,若只實現主設備,則需輸出口即可,若只實現從設備,則只需輸入口即可。
 
串行外圍設備接口SPI(serial peripheral interface)總線技術是Motorola公司推出的一種同步串行接口。Motorola公司生產的絕大多數MCU(微控制器)都配有SPI硬件接口,如68系列MCU。SPI總線是一種三線同步總線,因其硬件功能很強,所以,與SPI有關的軟件就相當簡單,使CPU有更多的時間處理其他事務。
IIC總線是荷蘭飛利浦PHILIPS開發的一種高效,實用,可靠的雙向二線制(也有3線制,家電很少用)串行數據傳輸結構總線,該總線使各電路分割成各種功能的模塊,並進行軟件化設計,各個功能模塊電路內都有集成一個IIC總線接口電路,因此都可以掛接在總線上,很好的解決了衆多功能IC與CPU之間的輸入輸出接口,使其連接方式變得十分簡單。
IIC總線上的器件分爲主控器和被控器兩大類它們之間只要在正常工作,總有一個IIC在總線上發送信息數據(一般是在開機後cpu首先像各個功能模塊電路發出自檢信號,得到各個功能模塊電路正常反饋的數據信號後機器才進入正常工作狀態)。

 串行外圍設備接口SPI(serial peripheral interface)總線技術是Motorola公司推出的一種同步串行接口

 USART (Universial Serial Asynchronous Receive Transmit)通用串行異步接受/發送,其實它就是UART。
 兩者都是串行口線。但不同的是,SPI總線似乎是分爲SD(DATA)I和SC(CONTROL)I兩種。SPI是同步的,需要額外的同步脈衝,速率可以很高,有些器件甚至超過20M。SDI有一條數據線,雙向傳輸,方向靠命令字來區別,SPI爲三線:SO、SI、SCK,SO、SI均爲單向傳輸,其中SCK爲同步時鐘,其傳輸速率可變,可以軟件模擬實現;而SCI,有兩條數據線,分別是輸入輸出。SPI 均有一條時鐘線。但是SPI如果應用與高速場合,只能在板級使用,不宜傳輸過遠,我們平時看到的SPI和IIC一般都是芯片之間的接口,很少看到有長電纜使用。
 而USART是沒有時鐘線,數據線有兩條。波特率在收發兩端分別設置,51的串口就屬於這一類。UART是異步的,不需要時鐘,波特率相對不高;鑑於此,uart因爲格式個波特率是雙方協商好的,而且速率不高,所以可以在傳輸線上傳輸,加上其他的轉換還可以變成差動的傳輸更遠距離。
 而UART要達到某一固定波特率對晶振有要求,比如說24M的晶振可以用T2實現9600BAUD,但不能用T1來交替實現19200和9600BAUD。 

 

I2C總線是雙向、兩線(SCL、SDA)、串行、多主控(multi-master)接口標準,具有總線仲裁機制,非常適合在器件之間進行近距離、非經常性的數據通信。在它的協議體系中,傳輸數據時都會帶上目的設備的設備地址,因此可以實現設備組網。
 如果用通用IO口模擬I2C總線,並實現雙向傳輸,則需一個輸入輸出口(SDA),另外還需一個輸出口(SCL)。

 wKiom1MlKfyD8SkGAACjQ_3o-6E649.jpg

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章