基于fifo模式的串行通信總線數據智能糾錯方法
【專利摘要】本發明涉及一種基于FIFO模式的串行通信總線數據智能糾錯方法,采用FIFO(First?In?First?Out)模式,處理器在接收完一個完整8位字符后,將其先存入FIFO緩存中,當接收的數據累計到一定程度后通知處理器一次性響應,發送采用類似形式,一次性將多個8位字符存入FIFO緩存中逐個發送。很明顯,這樣節省了處理器的開銷,提高了通信效率,讓處理器不用頻繁的響應通信任務,從而提高了系統的整體效率。本發明克服目前現有技術中存在的不足,提高了串行通信總線在FIFO這種低系統開銷的工作模式下接收端接收數據的可靠性。
【專利說明】基于FIFO模式的串行通信總線數據智能糾錯方法
【技術領域】
[0001]本發明涉及一種基于FIFO模式的串行通信總線數據智能糾錯方法【背景技術】
[0002]隨著計算機系統的應用和微機網絡的發展,復雜系統之間的數據通信功能顯得越來越重要。串口是計算機上一種非常通用的設備通信協議,串口通訊對嵌入式系統而言意義重大,不但可以實現將數據傳輸到上位機,而且也能實現上位機對其的指令控制。
[0003]串口通信所需電纜線根數少,在遠距離通信中可以節約通信成本,盡管比按字節傳輸的并行通信慢,但是串口可以在使用一根線發送數據的同時用另一根線接收數據,其接線簡單并且能夠實現遠距離通信。比如IEEE488定義并行通行狀態時,規定設備線總長不得超過20m,并且任意兩個設備間的長度不得超過2m ;而對于串口而言,其通信長度可達1200mo
[0004]RS-232、RS-422與RS-485都是串行數據標準接口。RS422總線與RS485和RS232的電路原理基本相同,都是以差動方式發送和接收,不需要數字地線。RS-422總線為全雙工工作模式,四線接口采用獨立的發送和接收通道,不必控制數據傳輸方向,各通信裝置之間任何必須的信號交換均可以按軟件(X0N/X0FF握手)或硬件(一對單獨的雙絞線)的方式實現。
[0005]標準串行通信模式為查詢或中斷方式:處理器每接收完一個完整8位字符后,即對其進行處理,發送采用類似形式。如果接收或發送的字符比較多的話,很明顯,處理器要不斷地去響應處理數據。因此,處理器的開銷就大大增加,降低了處理器執行效率。
[0006]常見的串行通信總線數據傳輸過程采用數據通信幀格式,即將若干實際需要傳輸的數據結合一定的通信幀頭(X個8位數據)、幀尾(Y個8位數據)和幀校驗(Z個8位數據),組成一巾貞有效的串行總線傳輸巾貞格式傳輸,這種巾貞格式的通信總線傳輸格式可以有效的保證數據的完整性和有效性,提高通信可靠性。
[0007]目前在串行通信FIFO的普遍應用中,因為接受與發送控制器端不可能保證兩者同時開啟工作,發送端先于接收端開啟的情況是完全有可能存在。因此當串行通信發送端先開啟,接收端后開啟時,會存在接受到的數據幀格式錯位,而FIFO接受過程中僅僅根據接收到的數據個數觸發響應,并不對其內容校驗,因此處理器接收到的數據格式不對,導致通信故障。
【發明內容】
[0008]要解決的技術問題
[0009]為了避免現有技術的不足之處,本發明提出一種基于FIFO模式的串行通信總線數據智能糾錯方法,能夠在隨機初始狀態下,提高串行通信總線接收端收到數據在FIFO這種低系統開銷的工作模式下的可靠性。
[0010]技術方案[0011]一種基于FIFO模式的串行通信總線數據智能糾錯方法,其特征在于步驟如下:
[0012]步驟1:當處理器FIFO緩沖存儲單元接收到X個8位數據一組的串行通信總線數據幀后,觸發串行通信總線數據處理任務響應,處理器將FIFO緩沖存儲單元中的數據逐位存入接收數據處理數組Temp [13]中;
[0013]步驟2:對接收數據處理數組Temp [N]中的數據逐位進行檢測,得到X個8位數據中貞頭在數據處理數組Temp[N]中的起始位置Temp[i],其中:i〈N ;
[0014]步驟3:對起始位置Temp [i]進行判斷:
[0015]當X個8位數據巾貞頭在數據處理數組Temp[N]中的起始位置Temp[i]中i = O,則判定接收到的數據幀未發生錯位,數據幀符合傳輸協議,將數據處理數組Temp[N]中的數據逐位賦給接收數組ReceiveData [N],返回步驟2進行下一個步巾貞校驗;
[0016]當X個8位數據巾貞頭在數據處理數組Temp[N]中的起始位置Temp[i]中i古O,判定接收到的數據幀發生錯位,進行步驟4 ;
[0017]步驟4:將本幀數據中各個8位數據以出現Temp [i]中i古O的位置分為兩部分,前i位8位數據(Temp[O]-Temp[1-Ι])為一幀符合傳輸協議8位數據的后半部分,后N_i位數據(Temp [i]-Temp [N-1])為一幀符合傳輸協議8位數據的前半部分;
[0018]步驟5:將本幀中有效數據幀的Temp [i]-Temp [N-1]逐位賦給錯位接收緩沖數據ReceiveTemp[N~i]中;
[0019]步驟6:將前一次錯位接收緩沖數據ReceiveTemp [N_i]中的一巾貞符合傳輸協議8位數據的前半部分逐位賦給接收ReceiveData[N]的前N_i位,并將本巾貞接收到的一巾貞符合傳輸協議8位數據的后半部分位賦給接收ReceiveData[N]的后i位,組成符合傳輸協議的數據幀,返回步驟2進行下一個步幀校驗。
[0020]有益效果
[0021]本發明提出的一種基于FIFO模式的串行通信總線數據智能糾錯方法,采用FIFO (First InFirst Out)模式,處理器在接收完一個完整8位字符后,將其先存入FIFO緩存中,當接收的數據累計到一定程度后通知處理器一次性響應,發送采用類似形式,一次性將多個8位字符存入FIFO緩存中逐個發送。很明顯,這樣節省了處理器的開銷,提高了通信效率,讓處理器不用頻繁的響應通信任務,從而提高了系統的整體效率。
[0022]本發明克服目前現有技術中存在的不足,提高了串行通信總線在FIFO這種低系統開銷的工作模式下接收端接收數據的可靠性。
【專利附圖】
【附圖說明】
[0023]圖1:基于FIFO模式的串行通信總線數據智能糾錯方法的流程
[0024]圖2:以13個8位數據一組的串行通信總線數據幀為例
【具體實施方式】
[0025]現結合實施例、附圖對本發明作進一步描述:
[0026]由于存在串行通信總線發送端與接收端不同步的情況,接收到的一幀數據中各個數據位置錯位,本幀數據不能通過串口通信總線傳輸協議的校驗。通過分析,我們可以知道,處理器接收到的一幀數據,是由前一次發送數據的后半段和該次發送數據的前半段組成。可以看出,處理器讀取的這幀數據,雖然數據相對位置不符合協議要求,但本楨所含數據彼此之間的位置是正確的,即部分整體相對前移或后移了若干位,是具有規律性的。
[0027]當處理器FIFO緩沖存儲單元接收到設定數量的數據位后,觸發串行通信總線數據處理任務響應,處理器將FIFO緩沖存儲單元中的數據逐位存入接收數據處理數組Temp[N] (Temp[O]-Temp[N-1])中,對存入接收數據處理數組Temp[N]中的數據進行分析,根據不同的情況分別給予相應的處理方式,具體操作流程如下:
[0028](I)如果接收數據處理數組Temp [N]中的數據逐位進行檢測,判斷出X個8位數據中貞頭在數據處理數組Temp [N]中的起始位置Temp [i] (i〈N)。
[0029](2)如果X個8位數據幀頭在數據處理數組Temp [N]中的起始位置Temp [i]中i =0,則可判定接收到的數據幀未發生錯位,數據幀符合傳輸協議,將數據處理數組Temp [N]中的數據逐位賦給接收數組ReceiveData[N],進行下一步幀校驗后對數據解析。
[0030](3)如果X個8位數據幀頭在數據處理數組Temp[N]中的起始位置Temp[i]中i^O,則可判定接收到的數據幀發生錯位,因此本幀數據中各個8位數據可分為兩部分,前i位8位數據(Temp [O]-Temp [1-Ι])為一幀符合傳輸協議8位數據的后半部分,后N_i位數據(Temp [i]-Temp [N-1])為一幀符合傳輸協議8位數據的前半部分。由此可將本幀中有效數據幀的Temp[i]-Temp[N-1]逐位賦給錯位接收緩沖數據ReceiveTemp[N_i]中。
[0031](4)當判定接收到的數據幀發生錯位時,將前一次錯位接收緩沖數據ReceiveTemp [N_i]中的一幀符合傳輸協議8位數據的前半部分逐位賦給接收ReceiveData[N]的前N_i位,并將本幀接收到的一幀符合傳輸協議8位數據的后半部分位賦給接收ReceiveData[N]的后i位,由此組成的數據幀符合傳輸協議,進而進行下一步中貞校驗后對數據解析。
[0032]具體實施實例:
[0033]如圖1,為基于FIFO模式的串行通信總線數據智能糾錯方法的流程
[0034]如圖2,以13個8位數據一組的串行通信總線數據幀為例,幀頭為兩個8位數據OxEB和0x90,當處理器FIFO緩沖存儲單元接收到13個8位數據一組的串行通信總線數據幀后,觸發串行通信總線數據處理任務響應,處理器將FIFO緩沖存儲單元中的數據逐位存入接收數據處理數組Temp[13]中,右側數組為基于FIFO模式的串行通信總線接收到的原始數據幀,對存入接收數據處理數組Temp [13]中的數據進行分析,可以看出接收到的各個8位數據錯位,智能糾錯過程如下:
[0035](I)通過對接收數據處理數組Temp[13]中的數據逐位進行檢測,判斷出,數據幀頭OxEB和0x90在數據處理數組Temp [13]中的起始位置Temp [6]。
[0036](2)由上可知數據幀頭在數據處理數組Temp[13]中的起始位置Temp[6]中,則可判定接收到的數據幀發生錯位,因此本幀數據中各個8位數據可分為兩部分,前6位8位數據(Temp[0]-Temp[5])為一幀符合傳輸協議8位數據的后半部分,后7位數據(Temp [6]-Temp [12])為一幀符合傳輸協議8位數據的前半部分。由此可將本幀中有效數據中貞的Temp[6]-Temp[12]逐位賦給錯位接收緩沖數據ReceiveTemp[7]中。
[0037] (3)將前一次錯位接收緩沖數據ReceiveTemp [7]中的一幀符合傳輸協議8位數據的前半部分逐位賦給接收ReceiveData[13]的前7位,并將本幀接收到的一幀符合傳輸協議8位數據的后半部分位賦給接收ReceiveData[13]的后6位,由此組成的數據幀符合傳輸協議,進而進行下一步幀校驗后對數據解析。
[0038]如圖2中,左側數組為采用智能糾錯算法后的數組,數據幀符合傳輸協議,在FIFO這種低系統開銷的工作模式下串行通信總線接收端可靠性得到了提高。
【權利要求】
1.一種基于FIFO模式的串行通信總線數據智能糾錯方法,其特征在于步驟如下: 步驟1:當處理器FIFO緩沖存儲單元接收到X個8位數據一組的串行通信總線數據幀后,觸發串行通信總線數據處理任務響應,處理器將FIFO緩沖存儲單元中的數據逐位存入接收數據處理數組Temp [13]中; 步驟2:對接收數據處理數組Temp [N]中的數據逐位進行檢測,得到X個8位數據幀頭在數據處理數組Temp[N]中的起始位置Temp[i],其中:i〈N ; 步驟3:對起始位置Temp [i]進行判斷: 當X個8位數據巾貞頭在數據處理數組Temp [N]中的起始位置Temp [i]中i = 0,則判定接收到的數據幀未發生錯位,數據幀符合傳輸協議,將數據處理數組Temp [N]中的數據逐位賦給接收數組ReceiveData [N],返回步驟2進行下一個步巾貞校驗; 當X個8位數據巾貞頭在數據處理數組Temp[N]中的起始位置Temp[i]中i古O,判定接收到的數據幀發生錯位,進行步驟4 ; 步驟4:將本幀數據中各個8位數據以出現Temp [i]中i古O的位置分為兩部分,前i位8位數據(Temp[O]-Temp[1-Ι])為一幀符合傳輸協議8位數據的后半部分,后N_i位數據(Temp[i]-Temp[N-1])為一幀符合傳輸協議8位數據的前半部分; 步驟5:將本幀中有效數據幀的Temp[i]-Temp[N-l]逐位賦給錯位接收緩沖數據ReceiveTemp[N~i]中; 步驟6:將前一次錯位接收緩沖數據ReceiveTemp [N_i]中的一巾貞符合傳輸協議8位數據的前半部分逐位賦給接收ReceiveData[N]的前N_i位,并將本巾貞接收到的一巾貞符合傳輸協議8位數據的后半部分位賦給接收ReceiveData[N]的后i位,組成符合傳輸協議的數據幀,返回步驟2進行下一個步幀校驗。
【文檔編號】G06F11/07GK104008023SQ201410257554
【公開日】2014年8月27日 申請日期:2014年6月11日 優先權日:2014年6月11日
【發明者】張震, 馬瑞卿, 白浩, 劉亞兵 申請人:西北工業大學