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