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