串口通信(Serial Communications)的概念非常簡單,串口按位(bit)發送和接收字節。盡管比按字節(byte)的并行通信慢,但是串口可以在使用一根線發送數據的同時用另一根線接收數據。它很簡單并且能夠實現遠距離通信。比如IEEE488定義并行通行狀態時,規定設備線總長不得超過20米,并且任意兩個設備間的長度不得超過2米;而對于串口而言,長度可達1200米。典型地,串口用于ASCII碼字符的傳輸。通信使用3根線完成,分別是地線、發送、接收。由于串口通信是異步的,端口能夠在一根線上發送數據同時在另一根線上接收數據。其他線用于握手,但不是必須的。串口通信最重要的參數是波特率、數據位、停止位和奇偶校驗。對于兩個進行通信的端口,這些參數必須匹配。
串口通信指串口按位(bit)發送和接收字節。盡管比按字節(byte)的并行通信慢,但是串口可以在使用一根線發送數據的同時用另一根線接收數據。
常見的串行通信協議
1.UART
UART是通用異步收發傳輸器,使用RxD和TxD兩根線實現異步全雙工通信;為確保通信可靠,可以在通信兩邊接共地;因此,完整的UART通信只需最少3根線即可。
RxD是發送數據線,TxD是接收數據線,通信雙方使用交叉互聯,RxD接對方TxD,TxD接對方RxD。UART使用標準的TTL/CMOS電平(0~5V,0~3.3V,0~2.5V,0~1.8V)來表示數據,高電平表示1,低電平表示0.為了增強抗干擾能力,提高傳輸長度,可將TTL/CMOS 電平轉換為RS232電平邏輯電平,3~12V表示0,-3~-12V表示1(RS232為負邏輯)
1)UART平時處于空閑狀態,邏輯1狀態。
2)當有數據發送時,先發送起始位,即將TxD拉低并維持1位時間,接收方在檢測到起始位下降沿,等待1.5位后開始一位一位檢測數據。
3)發送數據,UART數據一幀可以是5,6,7,8位等,一般是8bit,一個字節。數據發送是先發送低位,依次發送,直到最高位。
4)可以使用0或者1bit的校驗位,校驗位可以是奇校驗或者偶檢驗。奇校驗:數據加校驗位中1的個數為奇數;偶校驗:數據加校驗位中1的個數為偶數。
5)最后是停止位,數據線恢復到空閑狀態,停止位可以是1,1.5,2位。
1位時間由波特率決定,在UART通信中,波特率(一秒鐘傳輸的符號數)等于比特率(一秒鐘傳輸的字符數),通信雙方使用約定的一致的波特率進行通信,常見的波特率有4800,9600,115200等。
2.I2C
與UART不同,I2C 是同步半雙工通信協議。I2C使用SCL,SDA兩根雙向數據線進行通信,同時為了支持線與邏輯,需要使用開漏輸出,同時使用上拉電阻;上拉電阻大小常見的有1.8K,4.7K,10K;在低速場合,為了降低功耗,可以使用10K上拉電阻,1.8K的上拉電阻具有最好的性能,可滿足較高速的應用。I2C常見的通信速率有普通:100K,快速:400K,高速:3.4M。I2C最大的從機數量受從機地址和最大總線電容400pF電容的限制。I2C的數據幀格式如下:
開始位 | 7bit從機地址 | 1bit讀寫方向位(0寫,1讀) | 1bit應答 | 8bit數據1 | 1bit應答1| 。.. | 8bit數據N |1bit非應答N | 停止位 。
空閑狀態:空閑時,SCL,SDA同時處于高電平。此時,各器件的輸出場效應管處于截止狀態,釋放總線,總線信號由上拉電阻上拉至高電平。
開始START:SCL為高電平時,SDA有下降沿。
數據傳輸:數據傳輸已字節為單位,第一個字節表示從機地址+讀寫方向,后續數據格式由器件自己定義。數據傳輸中,SDA的只能在SCL低電平時變化,并在SCL上升沿進行數據采樣。
應答:每發送一個字節后,接收方必須回應答信號ACK,但發送最后一個字節后,回非應答信號NACK。
停止STOP :SCL為高電平時,SDA有上升沿。
握手機制:I2C提供握手機制,當主機速度太快而從機無法滿足快速通信時,從機可以拉低SCL來與主機握手,從而延長SCL低電平的時間。(SCL高電平由所有器件發出最短的高電平決定,低電平則有低電平最長的決定)。
仲裁:SDA是線與邏輯,因此,只要有一端輸出低,總線就為低電平,因此是低電平優先仲裁。仲裁規則是發送低電平個數多的主機獲得總線權。
由于I2C通信的方向性,在一次通信中不能改變數據流方向,因此讀過程中需要一次dummy寫過程:
dummy寫完后,在restart,然后將數據流方向改為讀,接著就可以讀取從機數據內容了。
3.SPI
SPI是同步全雙工串行通信協議。SPI定義了4根信號線:
SCK:時鐘線,主機提供
MISO:主入從出
MOSI:主出從入
SS:片選。
片選信號可選,因此通信最少需要3根信號線。SPI在時鐘上升沿下進行雙向數據交換,主機在輸出的同時,也會接收到從機的數據。在設計上,主機從機均需要一個移位寄存器。SPI不區分讀寫方向,只進行數據交換,要讀也必須寫,才能將數據交換過來。
SPI通過時鐘極性和時鐘相位定義了4種通信模式:
時鐘極性CPOL:0:空閑時SCK為0,1:空閑時SCK為1.
時鐘相位CPHA:0:數據在第一個時鐘跳沿采樣(可能是上升沿,可能是下降沿,與CPOL有關),1:數據在第二個時鐘跳沿采樣(可能是上升沿,可能是下降沿,與CPOL有關)。
若在上沿采樣,則數據在下沿輸出,因此數據能夠穩定的被采樣。
SPI時序圖如下:
評論
查看更多