基于nRF905的無線數(shù)據(jù)傳輸系統(tǒng)
本文引用地址:http://www.ex-cimer.com/article/158046.htm
為了避免陷入死循環(huán),在單片機程序中專門設(shè)計了中斷子程序,用于處理此類情況。中斷子程序采用的中斷源是TMR1定時器。一旦死循環(huán)運行超時,就會觸發(fā)TMR1中斷,程序跳轉(zhuǎn)到中斷子程序。中斷子程序的任務(wù)是打破當前的僵局,使雙方的程序運行都能回到正常的軌道上。考慮到S系統(tǒng)此時處于接收模式,正在等待來自M系統(tǒng)的指令,所以,M系統(tǒng)在中斷子程序中重發(fā)上一條指令,然后返回主程序中,繼續(xù)查詢CD/AM/DR信號的狀態(tài),等待來自S系統(tǒng)的數(shù)據(jù)。而S系統(tǒng)收到該指令后判斷是否是S端協(xié)議內(nèi)容。通過M端重發(fā)指令的方式,使雙方再建立一次通信,跳出上一次的死循環(huán)。如果本次通信仍然不成功,那么單片機程序會遵循中斷一重發(fā)機制運行,直到通信成功為止。當然,如果通信雙方的距離已經(jīng)超出了信號的有效覆蓋范圍,通信是不會成功的。
3.2.2 S端協(xié)議設(shè)計
S端的協(xié)議處于從控位置,相對簡單。設(shè)計中,仍然通過查詢nRF905的CD/AM/DR狀態(tài)接收指令,關(guān)鍵要解決指令的判讀問題,即分清是正常流程內(nèi)指令還是重發(fā)指令。這一問題在沖擊波存儲測試系統(tǒng)的工作參數(shù)設(shè)定階段不存在,因為每一個參數(shù)設(shè)定指令都不一樣,S端第一次收到某個指令肯定是正常流程內(nèi)指令,第二次收到該指令則肯定是重發(fā)的指令。但在讀數(shù)階段就不同了,因為存儲數(shù)據(jù)可能有幾兆字節(jié),如此大的數(shù)據(jù)量需要拆成無數(shù)個包才能發(fā)送,而M端不可能每讀一次都使用不同的指令。為此,S端協(xié)議采用兩個讀數(shù)指令K1和K2,循環(huán)發(fā)送。K1之后收到K2或K2之后收到K1均為正常,S端協(xié)議從測試系統(tǒng)讀取存儲數(shù)據(jù)并緩存到內(nèi)部寄存器,然后無線發(fā)送出去。若連續(xù)收到兩個相同的指令,說明M端沒有收到剛才的數(shù)據(jù),此時,S端從內(nèi)部寄存器中讀取剛才的數(shù)據(jù),進行無線重發(fā),而不再從測試系統(tǒng)中讀取。S端的協(xié)議流程如圖3所示。
4 結(jié)束語
系統(tǒng)調(diào)試成功后,進行了多次數(shù)據(jù)傳輸實驗,從實驗數(shù)據(jù)可得,無線信號在室內(nèi)傳輸環(huán)境下的損耗要遠大于室外街道環(huán)境;在同等條件下,誤碼率主要與距離延伸有關(guān);過往車輛對數(shù)據(jù)傳輸影響不大。該無線數(shù)據(jù)傳輸系統(tǒng)已成功應用于多個存儲測試系統(tǒng)中。實現(xiàn)了控制指令和測試數(shù)據(jù)的無線傳輸
評論