usart協議
1. 怎麼寫串口通信協議
串口按位(bit)發送和接收位元組。盡管比按位元組(byte)的並行通信慢,但是串口可以在使用一根線發送數據的同時用另一根線接收數據。
什麼是串口
串口是計算機上一種非常通用的設備通信協議(不要與通用串列匯流排Universal SerialBus或者USB混淆)。大多數計算機包含兩個基於RS232的串口。串口同時也是儀器儀表設備通用的通信介面;很多GPIB兼容的設備也帶有RS-232口。同時,串口通信協議也可以用於獲取遠程採集設備的數據。
串口通信的概念非常簡單,串口按位(bit)發送和接收位元組。盡管比按位元組(byte)的並行通信慢,但是串口可以在使用一根線發送數據的同時用另一根線接收數據。它很簡單並且能夠實現遠距離通信。比如IEEE488定義並行通行狀態時,規定設備線總長不得超過20米,並且任意兩個設備間的長度不得超過2米;而對於串口而言,長度可達1200米。
典型地,串口用於ASCII碼字元的傳輸。
通信使用3根線完成:
(1)地線,
(2)發送,
(3)接收。由於串口通信是非同步的,埠能夠在一根線上發送數據同時在另一根線上接收數據。其他線用於握手,但是不是必須的。串口通信最重要的參數是比特率、數據位、停止位和奇偶校驗。對於兩個進行通信的埠,這些參數必須匹配:
a,比特率:這是一個衡量通信速度的參數。它表示每秒鍾傳送的bit的個數。例如300波特表示每秒鍾發送300個bit。當我們提到時鍾周期時,就是指比特率,例如如果協議需要4800波特率,那麼時鍾是4800Hz。這意味著串口通信在數據線上的采樣率為4800Hz。通常電話線的比特率為14400,28800和36600。比特率可以遠遠大於這些值,但是波特率和距離成反比。高比特率常常用於放置的很近的儀器間的通信,典型的例子就是GPIB設備的通信。
b,數據位:這是衡量通信中實際數據位的參數。當計算機發送一個信息包,實際的數據不會是8位的,標準的值是5、7和8位。如何設置取決於你想傳送的信息。比如,標準的ASCII碼是0~127(7位)。擴展的ASCII碼是0~255(8位)。如果數據使用簡單的文本(標准ASCII碼),那麼每個數據包使用7位數據。每個包是指一個位元組,包括開始/停止位,數據位和奇偶校驗位。由於實際數據位取決於通信協議的選取,術語「包」指任何通信的情況。
c,停止位:用於表示單個包的最後一位。典型的值為1,1.5和2位。由於數據是在傳輸線上定時的,並且每一個設備有其自己的時鍾,很可能在通信中兩台設備間出現了小小的不同步。因此停止位不僅僅是表示傳輸的結束,並且提供計算機校正時鍾同步的機會。適用於停止位的位數越多,不同時鍾同步的容忍程度越大,但是數據傳輸率同時也越慢。
d,奇偶校驗位:在串口通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當然沒有校驗位也是可以的。對於偶和奇校驗的情況,串口會設置校驗位(數據位後面的一位),用一個值確保傳輸的數據有偶個或者奇個邏輯高位。例如,如果數據是011,那麼對於偶校驗,校驗位為0,保證邏輯高的位數是偶數個。如果是奇校驗,校驗位為1,這樣就有3個邏輯高位。高位和低位不真正的檢查數據,簡單置位邏輯高或者邏輯低校驗。這樣使得接收設備能夠知道一個位的狀態,有機會判斷是否有雜訊干擾了通信或者是否傳輸和接收數據是否不同步。串口通訊協議是指通信雙方的一種約定。約定包括對數據格式、同步方式、傳送速度、傳送步驟、檢糾錯方式以及控制字元定義等問題做出統一規定,通信雙方必須共同遵守。因此,也叫做通信控制規程,或稱傳輸控制規程,它屬於ISO'S OSI七層參考模型中的數據鏈路層。
2. 串口通訊協議是什麼
串口通訊都是傳遞數字或字元的ASCII碼。具體可以參考《VB與RS232串口通訊》之類的資料。
至於數據格式,都是不一定的,沒款MCU有它自己的數據格式。
3. 串口通信用的是什麼協議
就是RS-232的串口通信協議。一個TX端,一個RX端,分別用於發送和接收數據。
具體如下:
串列通信協議分同步協議和非同步協議。
(1)非同步通信協議的實例——起止式非同步協議
圖3
特點與格式:
起止式非同步協議的特點是一個字元一個字元傳輸,並且傳送一個字元總是以起始位開始,以停止位結束,字元之間沒有固定的時間間隔要求。其格式如圖3所示。每一個字元的前面都有一位起始位(低電平,邏輯值0),字元本身有5~7位數據位組成,接著字元後面是一位校驗位(也可以沒有校驗位),最後是一位,或意味半,或二位停止位,停止位後面是不定長度的空閑位。停止位和空閑位都規定為高電平(邏輯值),這樣就保證起始位開始處一定有一個下跳沿。
從圖中可以看出,這種格式是靠起始位和停止位來實現字元的界定或同步的,故稱為起始式協議。傳送時,數據的低位在前,高位在後,圖4表示了傳送一個字元E的ASCAII碼的波形1010001。當把它的最低有效位寫到右邊時,就是E的ASCII碼1000101=45H。
圖4
起/止位的作用:起始位實際上是作為聯絡信號附加進來的,當它變為低電平時,告訴收方傳送開始。它的到來,表示下面接著是數據位來了,要准備接收。而停止位標志一個字元的結束,它的出現,表示一個字元傳送完畢。這樣就為通信雙方提供了何時開始收發,何時結束的標志。傳送開始前,發收雙方把所採用的起止式格式(包括字元的數據位長度,停止位位數,有無校驗位以及是奇校驗還是偶校驗等)和數據傳輸速率作統一規定。傳送開始後,接收設備不斷地檢測傳輸線,看是否有起始位到來。當收到一系列的「1」(停止位或空閑位)之後,檢測到一個下跳沿,說明起始位出現,起始位經確認後,就開始接收所規定的數據位和奇偶校驗位以及停止位。經過處理將停止位去掉,把數據位拼裝成一個並行位元組,並且經校驗後,無奇偶錯才算正確的接收一個字元。一個字元接收完畢,接收設備有繼續測試傳輸線,監視「0」電平的到來和下一個字元的開始,直到全部數據傳送完畢。
由上述工作過程可看到,非同步通信是按字元傳輸的,每傳輸一個字元,就用起始位來通知收方,以此來重新核對收發雙方同步。若接收設備和發送設備兩者的時鍾頻率略有偏差,這也不會因偏差的累積而導致錯位,加之字元之間的空閑位也為這種偏差提供一種緩沖,所以非同步串列通信的可靠性高。但由於要在每個字元的前後加上起始位和停止位這樣一些附加位,使得傳輸效率變低了,只有約80%。因此,起止協議一般用在數據速率較慢的場合(小於19.2kbit/s)。在高速傳送時,一般要採用同步協議。
(2)面向字元的同步協議
特點與格式:這種協議的典型代表是IBM公司的二進制同步通信協議(BSC)。它的特點是一次傳送由若干個字元組成的數據塊,而不是只傳送一個字元,並規定了10個字元作為這個數據塊的開頭與結束標志以及整個傳輸過程的控制信息,它們也叫做通信控制字。由於被傳送的數據塊是由字元組成,故被稱作面向字元的協議。
特定字元(控制字元)的定義:由上面的格式可以看出,數據塊的前後都加了幾個特定字元。SYN是同步字元(synchronous Character),每一幀開始處都有SYN,加一個SYN的稱單同步,加兩個SYN的稱雙同步設置同步字元是起聯絡作用,傳送數據時,接收端不斷檢測,一旦出現同步字元,就知道是一幀開始了。接著的SOH是序始字元(Start Of Header),它表示標題的開始。標題中包括院地址、目的地址和路由指示等信息。STX是文始字元(Start Of Text),它標志著傳送的正文(數據塊)開始。數據塊就是被傳送的正文內容,由多個字元組成。數據塊後面是組終字元ETB(End Of Transmission Block)或文終字元ETX(End Of Text),其中ETB用在正文很長、需要分成若干個分數據塊、分別在不同幀中發送的場合,這時在每個分數據塊後面用文終字元ETX。一幀的最後是校驗碼,它對從SOH開始到ETX(或ETB)欄位進行校驗,校驗方式可以是縱橫奇偶校驗或CRC。另外,在面向字元協議中還採用了一些其他通信控制字,它們的名稱如下表所示:
數據透明的實現:面向字元的同步協議,不象非同步起止協議那樣,需要在每個字元前後附加起始和停止位,因此,傳輸效率提高了。同時,由於採用了一些傳輸控制字,故增強了通信控制能力和校驗功能。但也存在一些問題,例如,如何區別數據字元代碼和特定字元代碼的問題,因為在數據塊中完全有可能出現與特定字元代碼相同的數據字元,這就會發生誤解。比如正文有個與文終字元ETX的代碼相同的數據字元,接收端就不會把它當作為普通數據處理,而誤認為是正文結束,因而產生差錯。因此,協議應具有將特定字元作為普通數據處理的能力,這種能力叫做「數據透明」。為此,協議中設置了轉移字元DLE(Data Link Escape)。當把一個特定字元看成數據時,在它前面要加一個DLE,這樣接收器收到一個DLE就可預知下一個字元是數據字元,而不會把它當作控制字元來處理了。DLE本身也是特定字元,當它出現在數據塊中時,也要在它前面加上另一個DLE。這種方法叫字元填充。字元填充實現起來相當麻煩,且依賴於字元的編碼。正是由於以上的缺點,故又產生了新的面向比特的同步協議。
(3)面向比特的同步協議
特點與格式:面向比特的協議中最具有代表性的是IBM的同步數據鏈路控制規程SDLC(Synchronous Data Link Control),國際標准化組織ISO(International Standard Organization)的高級數據鏈路控制規程HDLC(High Level Data link Control),美國國家標准協會(Americal National Standard Institute)的先進數據通信規程ADCCP(Advanced Data Communication Control Procere)。這些協議的特點是所傳輸的一幀數據可以是任意位,而且它是靠約定的位組合模式,而不是靠特定字元來標志幀的開始和結束,故稱「面向比特」的協議。這中協議的一般幀格式如圖5所示:
圖5
幀信息的分段:由圖5可見,SDLC/HDLC的一幀信息包括以下幾個場(Filed),所有場都是從有效位開始傳送。
(1)SDLC/HDLC標志字元:SDLC/HDLC協議規定,所有信息傳輸必須以一個標志字元開始,且以同一個字元結束。這個標志字元是 01111110,稱標志場(F)。從開始標志到結束標志之間構成一個完整的信息單位,稱為一幀(Frame)。所有的信息是以幀的形傳輸的,而標志字元提供了每一幀的邊界。接收端可以通過搜索「01111110」來探知幀的開頭和結束,以此建立幀同步。
(2)地址場和控制場:在標志場之後,可以有一個地址場A(Address)和一個控制場C(Control)。地址場用來規定與之通信的次站的地址。控制場可規定若干個命令。SDLC規定A場和C場的寬度為8位或16位。接收方必須檢查每個地址位元組的第一位,如果為「0」,則後面跟著另一個地址位元組;若為「1」,則該位元組就是最後一個地址位元組。同理,如果控制場第一個位元組的第一位為為「0」,則還有第二個控制場位元組,否則就只有一個位元組。
(3)信息場:跟在控制場之後的是信息場I(Information)。I場包含有要傳送的數據,並不是每一幀都必須有信息場。即數據場可以為0,當它為0時,則這一幀主要是控制命令。
(4)幀校驗信息:緊跟在信息場之後的是兩位元組的爭校驗,幀校驗場稱為FC(Frame Check)場或稱為幀校驗序列FCS(Frame check Squence)。SDLC/HDLC均採用16位循環冗餘校驗碼CRC(Cyclic Rendancy Code)。除了標志場和自動插入的「0」以外,所有的信息都參加CRC計算。
實際應用時的兩個技術問題:
(1)「0」位插入/刪除:如上所述,SDLC/HDLC協議規定以01111110為標志位元組,但在信息場中也完全有可能有同一種模式的字元,為了把它與標志區分開來,所以採取了「0」位插入和刪除技術。具體作法是發送端在發送所有信息(除標志位元組外)時,只要遇到連續5個「1」,就自動插入一個「0」,當接收端在接收數據時(除標志位元組)如果連續收到5個「1」,就自動將其後的一個「0」刪除是,以恢復信息的原有形式。這種「0」位的插入和刪除過程是由硬體自動完成的。
(2)SDLC/HDLC異常結束:若在發送過程中出現錯誤,則SDLC/HDLC協議常用異常結束(Abort)字元,或稱為失效序列使本幀作廢。在HDLC規程中,7個連續的「1」被作為失效字元,而在SDLC中失效字元是8個連續的「1」。當然在試銷序列中不使用「0」位插入/刪除技術。SDLC/HDLC協議規定,在一幀之內不允許出現數據間隔。在兩幀之間,發送器可以連續輸出標志字元序列,也可以輸出連續的高電平,它被稱為空閑(Idle)信號。
4. 串口通信協議有哪些
I2C匯流排是內部匯流排,用來連接內部系統內的晶元。比如mcu和存儲器、鍵盤現實晶元、ad轉換等等專。 串口通信是用來屬和系統外部的設別通信的。比如設備和設備之間通信。 I2C和串口在通信協議上可以做到一樣,也可做到不一樣,這取決與具體的情況。 mcu和2402通信,mcu和電腦通信它們之間的協議軟體可以做到完全一樣 比如mcu發送1 2402和電腦發送2。
5. 串口通信協議(急)
上位機來和下位機通過串口通自訊協議來對接收到的數據進行處理,以數據幀的形式為例,$XXXX DDDD GGGG*CRCH CRCL, $表示開始,*表示結束,CRC為校驗。只有上下位機以一定協議來對接收到的數據進行解析,才能獲得有效數據。詳情請參閱<Visual C++_Turbo C串口通信編程實踐>,裡面有詳細介紹。
6. 串口通訊協議的含義和區別
通信協議:各計算機之間進行相互會話所使用的共同語言,兩台計算機在進行通信時,必須使用的通信協議,它也指通信雙方的一種約定,約定包括對數據格式、同步方式、傳送速度、傳送步驟、檢糾錯方式以及控制字元定義等問題做出統一規定,通信雙方必須共同遵守。串口通信協議是計算機上一種非常通用設備通信的協議,同時也是通信設備通用的通信協議,可以用於獲取遠程採集設備的數據。而串口通信協議主要有RS232、RS422 、RS485。
最開始出現的串口通信協議是RS232,1962年發布的。由於其傳輸速度、單向傳遞、傳輸距離短等多方面的制約,因此使用受到限制。於是人們在RS232的基礎上做了相應的改進,提高了相應的傳輸速度、傳輸距離,於是出現了RS422的雛形,並在工業上得到了相應的應用。但由於任然是單向傳輸的,使構成的網路只能是單向的。既只能是主機給從機發送指令或數據,從機只能接受並處理相應的消息,不能反映相應的結果。於是人們又做了相應的調整。最後於1983年發布了RS485通信協議。
RS232協議是一種簡單的串口通信協議,也是最基本的。一般用在實驗室等短距離、對傳輸速度等要求不高的場合,並且與TTL電平不兼容。RS422有了相應的提高。是一種單機發送,多機接收的平衡通信協議介面,傳輸速度最高可以達到10Mbps,傳輸距離最遠可達到4000英尺,並且在這條平衡匯流排上能最多帶10個從機,但是任然是單向的傳輸,RS485是一種多點,雙向通信的平衡通信協議介面。再RS422的基礎上增加了網路中接點(多機)的數量和雙向通信能力,同時還增加了驅動器的傳輸能力和沖突保護特性,擴展了匯流排共模範圍。傳輸速度最高可以達到10Mbps,標准距離可以達到4000英尺,實際能達到3000米,並且在這條線上最多可以帶128個收發器。RS-485標準是半雙工通信協議, RS-485適用於收發雙方共享一對線進行通信,也適用於多個點之間共享一對線路進行匯流排方式聯網,但通信只能是半雙工的。
所謂的全雙工通信協議指在通信的任意時刻,線路上存在A到B和B到A的雙向信號傳輸。在全雙工方式下,通信系統的每一端都設置了發送器和接收器,因此,能控制數據同時在兩個方向上傳送。全雙工方式無需進行方向的切換,因此,沒有切換操作所產生的時間延遲,這對那些不能有時間延誤的互動式應用(例如遠程監測和控制系統)十分有利。這種方式要求通訊雙方均有發送器和接收器,同時,需要2根數據線傳送數據信號。(可能還需要控制線和狀態線,以及地線)。
全雙工(Full Duplex)是指在發送數據的同時也能夠接收數據,兩者同步進行,這好像我們平時打電話一樣,說話的同時也能夠聽到對方的聲音。目前的網卡一般都支持全雙工。全雙工乙太網使用兩對電纜線,而不是像半雙工方式那樣使用一對電纜線。全雙工方式在發送設備的發送方和接收設備的接收方之間採取點到點的連接,這意味著在全雙工的傳送方式下,可以得到更高的數據傳輸速度。
現在的傳輸設備光端機,如PCM,PC等通訊設備基本上都有這幾種協議的應用。在沒有開發出新的通訊協議的情況下,仍將占據一份市場,更多詳情可查看訊維~網頁鏈接
7. 串口協議
協議一般要包含:起始符、、數據、校驗碼、結束符,5個部分的定義。
其中 起始符、結束符,不能與其他數據重碼。
如只要傳輸字母與數字,可以看下ASCII碼表,使用非數字和字母的符號做起始結束符即可,如{};
數據長度碼即表示此串數據包的數據長度,如果傳輸的數據串長度固定可省去;
校驗碼相當於對此串數據正確性的校驗,和奇偶校驗效果類似,一般是和校驗,即將數據全部累加得到一個和值當校驗碼,接收方收到數據也做一樣的運算與收到的檢驗碼比較,相等就說明正確接收。
如要發{1234567890 }
換成16進制即:7B 10 31 32 33 34 35 36 37 38 39 30 25 7D;31~30是數據,
7B,7D分別為起始和結束符,10為數據長度的BCD碼,25是校驗碼,是31~30的和模100後的BCD碼,轉成BCD碼是為了避免與 起始和結束符重碼。
8. 什麼是串口通信協議
串口通信指l兩個或兩個以上的設備使用串口按位(bit)發送和接收位元組。可以在使用一根線發送數據的同時用另一根線接收數據。 串口通信協議就是串口通訊時共同遵循的協議。 協議的內容是每一個bit 所代表的意義。 常用的串口通信協議 有以下幾種
1 RS-232(ANSI/EIA-232標准) 只支持 點對點, 最大距離 50英尺。最大速度為128000bit/s, 距離越遠 速度越慢。 支持全雙工(發送同時也可接收)。
2 RS-422(EIA RS-422-AStandard),支持點對多一條平衡匯流排上連接最多10個接收器 將傳輸速率提高到10Mbps,傳輸距離延長到4000英尺(約1219米),所以在100kbps速率以內,傳輸距離最大。支持全雙工(發送同時也可接收)。
RS-485(EIA-485標准)是RS-422的改進, 支持多對多(2線連接),從10個增加到32個,可以用超過4000英尺的線進行串列通行。速率最大10Mbps。支持全雙工(發送同時也可接收)。2線連接時 是半雙工狀態。
廣義上來說USB 協議 sata 硬碟 PCI_E 也是串列通信的范疇. 更為復雜
9. 串口通信協議的握手
RS-232通信方式允許簡單連接三線:Tx、Rx和地線。但是對於數據傳輸,雙方必須對數據定時採用使用相同的波特率。盡管這種方法對於大多數應用已經足夠,但是對於接收方過載的情況這種使用受到限制。這時需要串口的握手功能。在這一部分,我們討論三種最常用的RS-232握手形式:軟體握手、硬體握手和Xmodem。
a,軟體握手:我們討論的第一種握手是軟體握手。通常用在實際數據是控制字元的情況,類似於GPIB使用命令字元串的方式。必須的線仍然是三根:Tx,Rx和地線,因為控制字元在傳輸線上和普通字元沒有區別,函數SetXModem允許用戶使用或者禁止用戶使用兩個控制字元XON和XOFF。這些字元在通信中由接收方發送,使發送方暫停。
例如:假設發送方以高波特率發送數據。在傳輸中,接收方發現由於CPU忙於其他工作,輸入buffer已經滿了。為了暫時停止傳輸,接收方發送XOFF,典型的值是十進制19,即十六進制13,直到輸入buffer空了。一旦接收方准備好接收,它發送XON,典型的值是十進制17,即十六進制11,繼續通信。輸入buffer半滿時,LabWindows發送XOFF。此外,如果XOFF傳輸被打斷,LabWindows會在buffer達到75%和90%時發送XOFF。顯然,發送方必須遵循此守則以保證傳輸繼續。
b,硬體握手:第二種是使用硬體線握手。和Tx和Rx線一樣,RTS/CTS和DTR/DSR一起工作,一個作為輸出,另一個作為輸入。第一組線是RTS(Request to Send)和CTS(Clear toSend)。當接收方准備好接收數據,它置高RTS線表示它准備好了,如果發送方也就緒,它置高CTS,表示它即將發送數據。另一組線是DTR(DataTerminal Ready)和DSR(Data SetReady)。這些線主要用於Modem通信。使得串口和Modem通信他們的狀態。例如:當Modem已經准備好接收來自PC的數據,它置高DTR線,表示和電話線的連接已經建立。讀取DSR線置高,PC機開始發送數據。一個簡單的規則是DTR/DSR用於表示系統通信就緒,而RTS/CTS用於單個數據包的傳輸。
在LabWindows,函數SetCTSMode使能或者禁止使用硬體握手。如果CTS模式使能,LabWindows使用如下規則:
當PC發送數據:
RS-232庫必須檢測CTS線高後才能發送數據。
當PC接收數據:
如果埠打開,且輸入隊列有空接收數據,庫函數置高RTS和DTR。
如果輸入隊列90%滿,庫函數置低RTS,但使DTR維持高電平。
如果埠隊列近乎空了,庫函數置高RTS,但使DTR維持高電平。
如果埠關閉,庫函數置低RTS和DTR。
c,XModem握手:最後討論的握手叫做XModem文件傳輸協議。這個協議在Modem通信中非常通用。盡管它通常使用在Modem通信中,XModem協議能夠直接在其他遵循這個協議的設備通信中使用。在LabWindows中,實際的XModem應用對用戶隱藏了。只要PC和其他設備使用XModem協議,在文件傳輸中就使用LabWindows的XModem函數。函數是XModemConfig,XModemSend和XModemReceive。
XModem使用介於如下參數的協議:start_of_data、end_of_data、neg_ack、wait_delay、start_delay、max_tries、packet_size。這些參數需要通信雙方認定,標準的XModem有一個標準的定義:然而,可以通過XModemConfig函數修改,以滿足具體需要。這些參數的使用方法由接收方發送的字元neg_ack確定。這通知發送方其准備接收數據。它開始嘗試發送,有一個超時參數start_delay;當超時的嘗試超過max_ties次數,或者收到接收方發送的start_of_data,發送方停止嘗試。如果從發送方收到start_of_data,接收方將讀取後繼信息數據包。包中含有包的數目、包數目的補碼作為錯誤校驗、packet_size位元組大小的實際數據包,和進一步錯誤檢查的求和校驗值。在讀取數據後,接收方會調用wait_delay,然後向發送方發送響應。如果發送方沒有收到響應,它會重新發送數據包,直到收到響應或者超過重發次數的最大值max_tries。如果一直沒有收到響應,發送方通知用戶傳輸數據失敗。
由於數據必須以pack_size個位元組按包發送,當最後一個數據包發送時,如果數據不夠放滿一個數據包,後面會填充ASCII碼NULL(0)位元組。這導致接收的數據比原數據多。在XModem情況下一定不要使用XON/XOFF,因為XModem發送方發出包的數目很可能增加到XON/OFF控制字元的值,從而導致通信故障。