1. 硬件層協(xié)議
通訊協(xié)議主要是實(shí)現(xiàn)兩個(gè)設(shè)備之間的數(shù)據(jù)交換功能,通訊協(xié)議分硬件層協(xié)議和軟件層協(xié)議。硬件層協(xié)議決定數(shù)據(jù)如何傳輸問(wèn)題,比如要在設(shè)備1向設(shè)備2發(fā)送0x63,0x63的二進(jìn)制數(shù)為0110 0011,這8個(gè)二進(jìn)制數(shù)從設(shè)備1傳輸?shù)皆O(shè)備2,涉及到1怎么傳,0怎么傳的問(wèn)題,這就是硬件層要解決的問(wèn)題。
硬件層協(xié)議目前比較多見(jiàn)的有RS-232、RS-485、SPI、IIC等。RS-232規(guī)定,線上的電壓為x伏都表示傳輸?shù)氖?,y伏傳輸?shù)膭t是1。再者,比如要選擇多少條線傳輸數(shù)據(jù),選擇什么材質(zhì)的線傳輸輸入,這些也屬于硬件層協(xié)議約束的。
2. RS-485通訊協(xié)議
MCU管腳輸出TTL電平,TTL電平的意思是,當(dāng)MCU管腳輸出0電平時(shí),一般情況下電壓是0V,當(dāng)MCU管腳輸出1電平時(shí),電壓是5V。因TTL電平的是由一條信號(hào)線,一條地線產(chǎn)生,信號(hào)線上的干擾信號(hào)會(huì)跟隨有效信號(hào)傳送到接收端,使得有效信號(hào)受到干擾,485通訊實(shí)際上是把MCU出來(lái)的TTL電平通過(guò)硬件層的一個(gè)轉(zhuǎn)換器芯片進(jìn)行轉(zhuǎn)換:
把MCU出來(lái)的一條的TTL信號(hào)經(jīng)過(guò)芯片轉(zhuǎn)換為兩根線(線A、線B)上的信號(hào)。當(dāng)MCU給轉(zhuǎn)換器輸入低TTL電平時(shí),轉(zhuǎn)換器會(huì)使得B的電壓比A的電壓高,反之,A的電壓比B的電壓高。
485協(xié)議規(guī)約兩條電平線上差值為多少表示0或者1,電壓是通過(guò)儀表可以測(cè)量得到的,所以說(shuō)RS-485是硬件層協(xié)議。
485協(xié)議的接收端可能是另一個(gè)MCU,MCU管腳也只接受TTL電平,轉(zhuǎn)換芯片過(guò)來(lái)的是兩條線的電壓,所以需要對(duì)此兩條線差分電壓轉(zhuǎn)換為TTL電平。
把TTL轉(zhuǎn)為485,實(shí)質(zhì)是一個(gè)集成芯片,其間無(wú)任何程序代碼,純粹硬件邏輯。同理,將485電平轉(zhuǎn)為TTL也是如此。現(xiàn)在很多芯片把接收和轉(zhuǎn)換都集成到一塊IC,注意,轉(zhuǎn)換器和接收器依舊是沒(méi)有同時(shí)工作的,常見(jiàn)的轉(zhuǎn)換芯片是MAX485。
可以這樣理解,硬件層協(xié)議是公路,路的目的是為了讓車輛能夠過(guò)去。
3. 半雙工通訊
首先了解什么是單工通訊,單工通訊是指數(shù)據(jù)只能朝著一個(gè)方向傳輸?shù)耐ㄓ嵎绞?。而半雙工通訊則是指對(duì)于通訊兩端,不能同時(shí)相對(duì)方法發(fā)送數(shù)據(jù),必須錯(cuò)開(kāi)時(shí)間段發(fā)送。
RS-485的通訊線只有2條,且這兩條通訊線在一次傳輸中都需要用到,因此485只可實(shí)現(xiàn)半雙工通訊。485實(shí)現(xiàn)半雙工通訊,會(huì)遇到一個(gè)問(wèn)題,MCU1向MCU2發(fā)數(shù)據(jù)時(shí),并不知道線上是否正傳來(lái)MCU2數(shù)據(jù),因?yàn)闆](méi)有其他線可用來(lái)判斷對(duì)方的收發(fā)狀態(tài),那么可能也會(huì)導(dǎo)致數(shù)據(jù)沖突。因此,RS-485要實(shí)現(xiàn)半雙工通訊,就需要上層的軟件協(xié)議加以規(guī)約,也就是做到”不能你想發(fā)數(shù)據(jù)就發(fā)數(shù)據(jù)”??梢岳斫?,軟件層協(xié)議就好像交通規(guī)則,它能讓數(shù)據(jù)有序傳輸。