異步串行通信協(xié)議的設(shè)計與實現(xiàn)
引言
在單片機控制系統(tǒng)中,CPU和外部通信主要有兩種方 式:并行通信和串行通信。并行通信,即數(shù)據(jù)的各位同時傳 送;串行通信,即數(shù)據(jù)按位次序傳送。串行通信能夠節(jié)省傳 輸線,特別是數(shù)據(jù)位數(shù)很多和傳輸距離較遠時,這一優(yōu)點更 為突出。現(xiàn)在流行的高級語言一般都支持對串口直接操作, 常用的單片機也把串行通訊口作為一個標準接口集成在單片 機內(nèi),串行通訊接口的開發(fā)具有開發(fā)周期短、開發(fā)簡單等特 點。目前異步串行通信已廣泛用于微機之間的通信、工業(yè)控 制系統(tǒng)中的數(shù)據(jù)采集與控制、遠程數(shù)據(jù)的傳送等領(lǐng)域。
1 串口通信的基本原理
在嵌入式系統(tǒng)中,串口是一種重要的數(shù)據(jù)通信接口, 其本質(zhì)功能是,在CPU和串行設(shè)備間進行編碼轉(zhuǎn)換。當CPU 通過串行端口發(fā)送數(shù)據(jù)時,字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位串;接 收數(shù)據(jù)時,串行的位串被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。應(yīng)用程序使用串 口進行通信,必須在使用之前向操作系統(tǒng)提出資源申請要求 (打開串口),通信完成后必須釋放資源(關(guān)閉串口)。
典型地,串口用于ASCII碼字符的傳輸。通信使用3根線完成:(1)地線;(2)發(fā)送數(shù)據(jù)線;(3)接收數(shù)據(jù)線。串口通
圖1 通信命令格式
圖2 通信時序
信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗。對于兩個互相通信的端口,這些參數(shù)必須一致:波特率衡量通 信速度,表示每秒鐘傳送的bit的個數(shù);數(shù)據(jù)位衡量通信中 實際數(shù)據(jù)位寬,標準值是5、7和8位。如何設(shè)置取決于具體 需求;停止位用于表示單個包的最后一位,典型值為1,1.5 和2位,停止位不僅僅表示傳輸?shù)慕Y(jié)束,還能提供計算機校 正時鐘同步的機會;奇偶校驗位是串口通信中一種簡單的檢 錯方式,有四種檢錯方式——偶、奇、高和低,也可以沒有 校驗位。
2 異步串行通信協(xié)議的設(shè)計
通信協(xié)議是通信雙方共同遵守的約定,對同步方式、 傳送速度、傳送步驟及檢糾錯方式定義等問題做出統(tǒng)一規(guī) 定。
在 控 制 系 統(tǒng) 中 , 單 片 機 間 通 信 一 般 采 用 異 步 串 行 通 信,傳統(tǒng)的異步串行通信協(xié)議一般采用如圖1所示的命令格 式,命令消息括幀頭(命令碼)、 數(shù) 據(jù) 場 、 校 驗 場 ;響應(yīng)消息為ACK信號 ( A C K 取 不 同 的 值 , 例 如 : 正 確 響應(yīng) ACK = 0x55; 錯 誤 響 應(yīng) A C K =0 x A A ) 。 由 于 串 口 通信存在很多不可靠因素,例如由
表1 通信命令
電磁干擾造成幀字節(jié)丟失、 傳輸誤碼, 以及因主從單片機處理繁忙而造成響應(yīng)延遲等。傳統(tǒng)的通信協(xié)議難以克服由單片機處理
繁忙造成的響應(yīng)延遲現(xiàn)象。如圖2所示,當主芯片發(fā)送[命令1]后,當超過響應(yīng)等待時間而沒有得到ACK時,主芯片發(fā)送[命令2],在下一個響應(yīng)等待時間內(nèi)將收到兩次[ACK],這種
圖4 響應(yīng)處理程序
圖5 整體軟件設(shè)計
現(xiàn)象將導致主芯片做出錯誤判斷,調(diào)用錯誤的程序分支,嚴 重影響系統(tǒng)的正常運行。因此,本文在通信協(xié)議的設(shè)計中, 采用響應(yīng)消息加權(quán)的方法,提高了通信的可靠性,保證系統(tǒng) 正常運行。
本 文 設(shè) 計 的 響 應(yīng) 消 息 加 權(quán) 式 通 信 協(xié) 議 , 實 現(xiàn) 方 式 如 下:通信協(xié)議采用如圖3所示的格式,命令消息和響應(yīng)消息 采用相同的幀格式,包括幀頭(命令碼)、數(shù)據(jù)場、校驗場; 其中響應(yīng)消息幀頭 = 命令消息幀頭的加權(quán)(RPS = CMD | 0x80 或RPS = CMD | 0xC0),主控芯片通過對響應(yīng)消息的處理, 識別出響應(yīng)的類型。通信協(xié)議各數(shù)據(jù)場的定義如表1所示, 本協(xié)議由nByte(n是用戶自定義的任意正整數(shù))構(gòu)成,D1[7:6]為通信類型,D1[5:0]為指令碼,D2~Dn-1為數(shù)據(jù)場,Dn為校驗場。
程序處理過程如圖4所示,當接收到響應(yīng)時,響應(yīng)處理 程序?qū)憫?yīng)消息幀頭進行0xC0位與運算,還原并判斷響應(yīng) 類型;同時對幀頭進行0x3F位與運算,還原出當前響應(yīng)對應(yīng) 的命令消息,然后調(diào)用相應(yīng)的應(yīng)用程序執(zhí)行。例如,主芯
圖6 硬件原理框圖
片發(fā)送命令消息,命令消息幀頭D1=0x02,從芯片正常接收 并進行加權(quán)響應(yīng),響應(yīng)消息幀頭D1=0x82,主芯片再經(jīng)過位 與運算判斷響應(yīng)類型并還原出與之相對應(yīng)的命令消息幀頭
0x02。然后調(diào)用相應(yīng)的程序執(zhí)行,完成一次通信周期。
3 程序設(shè)計
在設(shè)計通信程序時充分考慮了主從單片機在通信過程 中的不確定因素,因此通信協(xié)議采用加權(quán)響應(yīng)式通信協(xié)議, 克服主從單片機處理繁忙而造成的響應(yīng)延遲;對于通信過程 中因干擾而導致通信數(shù)據(jù)丟失、傳輸誤碼等現(xiàn)象,可以在程 序設(shè)計時采用超時定時、計數(shù)重發(fā)等方法,保證通信的準確 性。軟件程序設(shè)計中,主控芯片采用芯片內(nèi)部的串口2,通信波特率為9600 bit /s,8 位數(shù)據(jù),1位停止位。軟件編寫嚴格按照異步通信的時序進行,其響應(yīng)處理程序流程如圖4。
4 系統(tǒng)的實現(xiàn)及應(yīng)用
本協(xié)議的設(shè)計初衷是用于一款內(nèi)嵌DTMB接收功能的便 攜式DVD產(chǎn)品的操作控制芯片與DTV解碼芯片間的通信服 務(wù)。該產(chǎn)品為商業(yè)性產(chǎn)品,質(zhì)量是產(chǎn)品的生命。為保證產(chǎn)品 質(zhì)量,提高通信的可靠性,在設(shè)計異步串行通信時采用本文 的響應(yīng)加權(quán)式通信協(xié)議。系統(tǒng)通信控制實現(xiàn)如圖5。
硬件系統(tǒng)由主控芯片和DTV解碼芯片構(gòu)成,原理框圖如圖6所示。主控芯片內(nèi)部串口2的收發(fā)引腳與DTV解碼芯片 的收發(fā)引腳相連接。主控芯片在整個通信過程中起主導作用,用于發(fā)起通信與判斷DTV解碼芯片的響應(yīng)。DTV解碼芯片接收主控芯片發(fā)送的命令,解析后進行相關(guān)的動作。
5 結(jié)束語
本協(xié)議的設(shè)計初衷是為了克服主從單片機處理繁忙而 造成的響應(yīng)延遲現(xiàn)象,同時又具有可擴展性,其中數(shù)據(jù)場的 字節(jié)長度可以由用戶自行定義。將本協(xié)議應(yīng)用到DVD產(chǎn)品的通信控制時,經(jīng)過測試,在波特率9600bit/s下可以成功通信;并且本協(xié)議能保證主控 端正確識別響應(yīng)類型以及還原出當前響應(yīng)相對應(yīng)的命令消 息,保證主控芯片做出正確的處理,從而保證整個系統(tǒng)的正 確運行。
評論