常见的硬件数据通信协议
常見通信協(xié)議
- 通信協(xié)議介紹
- 1、串口通信
- 2、IIC通信
- 3、SPI通信
- 總結(jié)
通信協(xié)議介紹
在做各種課題設(shè)計(jì)時(shí)候,經(jīng)常會(huì)用到的就是使用“**通信”進(jìn)行傳輸。最開始一直是處于一臉懵的狀態(tài)。編寫程序時(shí)候百思不得其解,怎么編寫這個(gè)通信協(xié)議?
后來花了很長時(shí)間去弄清楚了這些概念,結(jié)果在做設(shè)計(jì)時(shí)候一問組員都是一臉懵,根本不清楚通信協(xié)議是用來干什么的。所以自己整理了一遍思路,也方便自己加深理解。
在硬件上,我們經(jīng)常需要多個(gè)設(shè)備之間相互進(jìn)行通信。這些設(shè)備之間的相互通訊,一定都是按照一個(gè)統(tǒng)一規(guī)定的協(xié)議進(jìn)行傳輸?shù)摹Q句話說,也就是規(guī)定了兩個(gè)設(shè)備之間的傳輸是怎么開始的,怎么結(jié)束的,哪些是通信的內(nèi)容,怎么檢驗(yàn)通信過程是否出錯(cuò)等等問題。
具體的通信協(xié)議都是通過對應(yīng)的編程語言寫入對應(yīng)的硬件設(shè)備中,就像往兩個(gè)設(shè)備中放了兩個(gè)守門員,對于傳輸?shù)臄?shù)據(jù)進(jìn)行把關(guān),從而建立通信進(jìn)行傳輸。
這里介紹幾個(gè)硬件上常用的通信協(xié)議:
- IIC通信
- 串口通信
- SPI通信
1、串口通信
串口是計(jì)算機(jī)設(shè)備,多種儀器設(shè)備等上常用的協(xié)議。
在并行通信中,一個(gè)字節(jié)(8位)數(shù)據(jù)是在8條并行傳輸線上同時(shí)由源傳到目的地。因此這樣的傳輸方式傳輸速度更快,傳輸效率高,但是占用資源也多。
而在串行通信方式中,數(shù)據(jù)是在單條1位寬的傳輸線上一位接一位地順序傳送。這樣一個(gè)字節(jié)的數(shù)據(jù)要分8次由低位到高位按順序一位位地傳送。這樣的傳輸方式雖然成本低但是傳輸速度慢。
(從其他地方down的圖)
在串行通信中,又分為幾種不同的傳輸方式:
單工、半雙工、全雙工
單工意味著信息只能單向傳遞,而半雙工則是信息可以雙向傳輸?shù)遣荒芡瑫r(shí)雙向傳輸,全雙工指的是信息可以同時(shí)雙向傳輸。
在時(shí)序上,串行通信又分為兩種方式:同步通訊、異步通訊
下面介紹具體的通信過程:(以單工為例)
在兩個(gè)設(shè)備進(jìn)行相互通信時(shí),以一幀數(shù)據(jù)為單位進(jìn)行傳輸。而一幀數(shù)據(jù)中包含起始位、數(shù)據(jù)位、校檢位、停止位組成。
其中,校檢位分為奇校檢和偶校檢:
- 奇校驗(yàn)
將最高位作為數(shù)據(jù)的奇偶校驗(yàn)位,所謂奇校驗(yàn),就是保證一個(gè)字節(jié)的數(shù)據(jù)中1的個(gè)數(shù)必須是奇數(shù),若不為奇數(shù),則在最高位添1.,保證1的總是為奇數(shù) - 偶校驗(yàn)
若一個(gè)字節(jié)中的1不為偶數(shù),則在最高位添1,保證1的總數(shù)為偶數(shù)
校檢位不是必須有的,可以根據(jù)具體情況進(jìn)行設(shè)定。
開始傳輸時(shí),傳輸線拉低作為起始位,拉低一個(gè)單位時(shí)間后就開始傳輸數(shù)據(jù)。一般的數(shù)據(jù)位為八位,待數(shù)據(jù)發(fā)送完成后,進(jìn)行校檢位傳輸并進(jìn)行驗(yàn)證。接著接收高電平停止位(停止位都是1),根據(jù)設(shè)定的停止位持續(xù)時(shí)長進(jìn)行判定,比如設(shè)定停止位為保持高電平1.5個(gè)時(shí)間單位。
每幀數(shù)據(jù)之間相隔若干個(gè)不定時(shí)間長度,空閑時(shí)間傳輸線一直保持高電平狀態(tài)。
2、IIC通信
IIC通信一般用于主從通信,即由主控制器發(fā)起,從設(shè)備進(jìn)行響應(yīng)的通信過程。該通信方式可以通過總線連接多個(gè)分立設(shè)備,通過唯一的地址與主機(jī)進(jìn)行通信。
IIC通信共用到了兩根線,一根是SDA數(shù)據(jù)線,另一根是SCL時(shí)鐘線。在SDA數(shù)據(jù)線上,只負(fù)責(zé)傳輸來往的數(shù)據(jù)信息,至于對傳輸過程的控制,由SCL時(shí)鐘線進(jìn)行控制。
具體的通信過程:
時(shí)鐘線SCL在空閑時(shí)間為高電平,SDA數(shù)據(jù)線為高電平。
開始通信:
需要開始通信時(shí),在SCL為高電平期間,若SDA從高電平跳變到了低電平,則意味著通信開始,此時(shí)時(shí)鐘線SCL開始進(jìn)行傳輸控制,數(shù)據(jù)線上的數(shù)據(jù)傳輸依據(jù)SCL時(shí)鐘進(jìn)行傳輸。
結(jié)束通信:
結(jié)束通信時(shí),將SCL時(shí)鐘線再次拉高,在SCL保持高電平的狀態(tài)下,若SDA從低電平跳變?yōu)楦唠娖?#xff0c;則通信結(jié)束。此時(shí)SCL恢復(fù)為低電平狀態(tài)。
前面說了IIC通信主要用于主從通信,即開始通信和結(jié)束通信都是由主控制器發(fā)起,從設(shè)備接收到信息后進(jìn)行應(yīng)答。
IIC通信中由于是單個(gè)總線進(jìn)行通信,連接總線的可能有多個(gè)從設(shè)備,所以通信內(nèi)容必須包含唯一明確的通信地址才可以保證通信的順利進(jìn)行。
因此,在起始信號發(fā)起后,接著就是七位的從設(shè)備地址,第八位則規(guī)定了通信方向。即“1”代表主機(jī)接收數(shù)據(jù),從設(shè)備發(fā)送數(shù)據(jù),而“0”代表主機(jī)發(fā)送數(shù)據(jù),從設(shè)備接收數(shù)據(jù)。
每次傳輸數(shù)據(jù)位完成后,從設(shè)備需要產(chǎn)生應(yīng)答信息,即從設(shè)備的SDA線產(chǎn)生一個(gè)單位時(shí)間的低電平表示應(yīng)答,而高電平則表示非應(yīng)答。
3、SPI通信
SPI通信也分為主從模式,不同的是SPI一共有四根線。其中兩根數(shù)據(jù)線MOSI以及MISO,一根時(shí)鐘線SCK,一根片選CS線。
兩個(gè)數(shù)據(jù)線分別為主機(jī)接收(MISO)、主機(jī)發(fā)送(MOSI)兩路數(shù)據(jù)。
SPI通信也存在著一個(gè)主機(jī),多個(gè)從設(shè)備相互通信的情況,所以在主機(jī)與指定的從設(shè)備進(jìn)行通信時(shí),需要對從設(shè)備進(jìn)行選定。片選CS即是為了選定某一個(gè)從設(shè)備,從而讓主機(jī)單獨(dú)的與該從設(shè)備進(jìn)行通信。
時(shí)鐘線SCK依然像其他的時(shí)鐘一樣,做傳輸控制。
當(dāng)開始進(jìn)行通信時(shí),先選定與主機(jī)進(jìn)行通信的從設(shè)備,拉低該設(shè)備的CS線,表示該設(shè)備與主機(jī)通信。
有一點(diǎn)需要注意的是,在SPI通信中,沒有特定的讀寫操作。主從設(shè)備進(jìn)行的是數(shù)據(jù)交換,主機(jī)發(fā)送出數(shù)據(jù)就必然會(huì)接收到數(shù)據(jù),主機(jī)想要接受到數(shù)據(jù)就必須向從機(jī)發(fā)送數(shù)據(jù)。
主機(jī)與從機(jī)中都有一個(gè)移位寄存器,主機(jī)向它的寄存器寫入一個(gè)字節(jié)來發(fā)起一次傳輸。寄存器通過 MOSI 數(shù)據(jù)線將信號傳送給從機(jī),從機(jī)也將自己寄存器中的內(nèi)容通過 MISO 信號線返回給主機(jī)。這樣,兩個(gè)主從設(shè)備間就完成了一次信息傳輸,讀寫操作是同步完成的。
SPI有四種傳輸模式,通過CPOL(時(shí)鐘極性)和CPHA(時(shí)鐘相位)來控制。
CPOL時(shí)鐘極性:用來設(shè)定SCLK的電平狀態(tài)為有效
CPHA時(shí)鐘相位:用來設(shè)定數(shù)據(jù)采樣在SCL哪個(gè)跳變
則根據(jù)兩個(gè)控制信息產(chǎn)生出四種傳輸模式:
- Mode0:CPOL=0,CPHA=0
- Mode1:CPOL=0,CPHA=1
- Mode2:CPOL=1,CPHA=0
- Mode3:CPOL=1,CPHA=1
Mode0:SCK處于低電平為空閑態(tài),數(shù)據(jù)采樣在上升沿,數(shù)據(jù)發(fā)送在下降沿。
Mode1:SCK處于低電平為空閑態(tài),數(shù)據(jù)采樣在下降沿,數(shù)據(jù)發(fā)送在上升沿。
Mode2:SCK處于高電平為空閑態(tài),數(shù)據(jù)采樣在上升沿,數(shù)據(jù)發(fā)送在下降沿。
Mode3:SCK處于高電平為空閑態(tài),數(shù)據(jù)采樣在下降沿,數(shù)據(jù)發(fā)送在上升沿。
在通信過程中,通信雙方必須工作在同一種模式下,而且SPI通信沒有了IIC通信中從機(jī)應(yīng)答的環(huán)節(jié),比IIC通信要簡單。
總結(jié)
上面寫的三種通信協(xié)議都是大體介紹了概念,能弄清楚各種通信協(xié)議的具體方式和過程就好,至于具體通信時(shí)的各種細(xì)節(jié),就需要在編寫程序時(shí)認(rèn)真的思考每一個(gè)變量,每一個(gè)時(shí)鐘的作用,認(rèn)真分析時(shí)序。
本文中引用的圖也是從其他帖子上down下來的,這里我分別找了三種通信協(xié)議的具體詳細(xì)說明:
1、SPI通信
2、IIC通信
3、串口通信
【注】個(gè)人學(xué)習(xí)筆記,請不吝賜教!
總結(jié)
以上是生活随笔為你收集整理的常见的硬件数据通信协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 西游记中孙悟空大闹天宫时玉帝为什么不亲自
- 下一篇: win7怎么设置热点让手机连接?热点共享