本發(fā)明涉及串行通信中組幀發(fā)送和幀同步接收技術(shù),是一種能夠避免誤同步的幀結(jié)構(gòu)設計方法。
技術(shù)背景
組幀通信是串行通信的常用策略。串行通信總線協(xié)議有UART,SPI,I2C等。這些通信協(xié)議都是以字節(jié)、或字為傳輸單位的。發(fā)送端和接收端的軟件處理無需考慮字節(jié)邊界。但是需要做到幀同步才能正確通信。
幀同步是串行通信中關(guān)鍵的一步。由于數(shù)據(jù)的隨機性,在每一幀數(shù)據(jù)中,可能出現(xiàn)與同步碼相同的數(shù)據(jù),這會導致誤同步。傳統(tǒng)的組幀方案是加長同步碼,添加幀尾、校驗和等手段,來剔除誤同步幀。這會丟失數(shù)據(jù),并帶來較大的復雜度。傳統(tǒng)的同步方法會出現(xiàn)誤同步情況,而且同步算法相對復雜。采用特殊數(shù)據(jù)作為同步頭又會帶來帶寬浪費的問題。
技術(shù)實現(xiàn)要素:
發(fā)明目的
本發(fā)明針對現(xiàn)有技術(shù),提供一種有效的幀同步方案。
技術(shù)方案
本發(fā)明是一種能夠避免誤同步的幀結(jié)構(gòu)設計方法,其中,包括如下步驟;
步驟1、設定幀數(shù)據(jù)的第一個字為同步碼,
步驟2、設定第二個字最作為輔助同步字,設為A0,若此幀的數(shù)據(jù)中同步碼是惟一的,則使得A0=0,進行步驟5;否則進行步驟3;
步驟3、確定幀數(shù)據(jù)中,其它和同步碼相同的數(shù)據(jù),依次標記為A1,A2,…An,n≥1;其中A1,A2,…An的值均為同步碼,同時使用A1.Index,A2.Index,…An.Index標示上述數(shù)據(jù)在幀數(shù)據(jù)中的位置;
步驟4、修改幀數(shù)據(jù)中和同步碼相同的數(shù)據(jù)的值,使得:
A0=A1.Index;
A1=A2.Index;
……
An-1=An.Index;
An=0;
步驟5、完成幀數(shù)據(jù)編碼。
如上所述的一種能夠避免誤同步的幀結(jié)構(gòu)設計方法,其中,設同步碼所代表的二進制數(shù)為P,設幀數(shù)據(jù)中每個字的位寬為n,則取P>2^(n-1)-1。
有益效果
本方法設計新的組幀方案,使得同步碼是一幀中唯一出現(xiàn)的數(shù) 據(jù),就不會出現(xiàn)誤同步的情況了。
具體實施方式
以下,結(jié)合具體實施方式,對本發(fā)明做進一步的說明。
由于誤同步出現(xiàn)的原因是存在與同步碼相同的數(shù)據(jù),這意味著有信息量可以被壓縮。這就是解決問題的關(guān)鍵。設計新的組幀方案,使得同步碼是一幀中唯一出現(xiàn)的數(shù)據(jù),就不會出現(xiàn)誤同步的情況了。本文就是對幀同步的方案展開討論,并給出一種有效的幀同步方案。
為此本發(fā)明使用如下新組幀方案:
設每個字的位寬為n,設一幀數(shù)據(jù)的長度為L,要求2^(n-1)>=L。每個字的位置依次為0、1、2、3、4、……、L-1。
第一個字為同步碼,同步碼所代表的二進制數(shù)設為P,P>2^(n-1)-1。也就是說P的最高位為1,其他位可以任意設定。
第二個字最作為輔助同步字,設為A0,若一幀的數(shù)據(jù)中同步碼是惟一的,則使得A0=0,否則A0=A1.Index。
其中,A1為有效數(shù)據(jù)中第一個與同步碼相同的數(shù)據(jù)。A1.Index為A1在一幀數(shù)據(jù)中的位置,顯然A1.Index<P。
若一幀中只有一個數(shù)據(jù)與同步碼相同則使得A1=0,否則A1=A2.Index,A2為有效數(shù)據(jù)中第二個與同步碼相同的數(shù)據(jù)。依此類推。
最后得到的一幀數(shù)據(jù)只有第一個字是同步碼,找到同步碼就完成了幀同步。
算法簡單,節(jié)省運算量。解幀過程也同樣簡單。而通信帶寬的利用率決定于幀的長度以及數(shù)據(jù)位寬。以8比特通信為例,若子幀長度為128,則帶寬利用率為126/128=98.4375%。
以上方案已在GPS接收機以及串口上位機上實現(xiàn)。
設數(shù)據(jù)存儲在首地址為data的內(nèi)存上,數(shù)據(jù)長度為L字節(jié),則:
組幀代碼如下:
解幀代碼如下
上述說明并不是對本發(fā)明的限定,在不脫離本發(fā)明的主旨的范圍內(nèi),可以進行各種變形和變更。