吳 成
(大慶鉆探工程公司鉆井工程技術(shù)研究院鉆井儀器研究所,黑龍江 大慶 163413)
開發(fā)儀器設(shè)備需要大量的資金、時間和人力等資源。如果開發(fā)的儀器被競爭對手破解甚至復(fù)制,就會嚴(yán)重影響企業(yè)的市場競爭力。由此,企業(yè)的知識產(chǎn)權(quán)保護工作,不應(yīng)停留在法律層面上,還應(yīng)該在開發(fā)的儀器本身采取必要的措施,也就是提高儀器的逆向工程的成本。
因為鉆井儀器需要長時間工作在高溫、高壓、高震動環(huán)境中,所以,儀器的處理器性能較常溫設(shè)備會差一些,儀器通訊設(shè)計也需要考慮從中斷恢復(fù)的問題。
本文將設(shè)計一種通訊協(xié)議,其時序、通訊格式和加密方式與通用的通訊協(xié)議不同。
本設(shè)計使用CPLD處理通訊時序,理由如下:
(1)CPLD 內(nèi)置配置電路的信息不易讀取,而FPGA的外接配置芯片可以直接讀??;
(2)通訊時序的實時性要求較高,單片機和DSP無法勝任;
(3)處理通訊時序所需的資源不多,CPLD 處理通訊時序時,還可以同時完成其他任務(wù)。
主機和從機的通訊,是在同一條線上實現(xiàn)的半雙工通訊,通訊接口外圍電路如圖1所示。需要考慮的實際問題和解決方法有:
圖1 通訊接口外圍電路
(1)信號沖突:如果通訊雙方同時向總線發(fā)送數(shù)據(jù),就會使引腳的電流過大,造成損壞或燒毀芯片。電路設(shè)計時,為通訊引腳串入限流電阻。
(2)通訊線破損:鉆井施工的長時間高震動,會破壞線纜絕緣保護層,導(dǎo)致總線接觸到殼體或其他線纜,導(dǎo)致引腳的電流過大。電路設(shè)計時,為通訊引腳串入限流電阻。
(3)通訊線靠近其他大功率信號線:大功率信號通過容性耦合和感性耦合,在鄰近的其他線纜上產(chǎn)生干擾信號。電路設(shè)計時,使用一階RC網(wǎng)絡(luò)對通訊信號進行平滑濾波??紤]到RC網(wǎng)絡(luò)對信號的延遲,需要根據(jù)電路調(diào)試情況選擇電容。
(4)通訊中斷:鉆井施工的長時間高震動,導(dǎo)致通訊線瞬時接觸不良,將使正在進行的通訊中斷。由于多數(shù)CPU要求芯片引腳不能懸空,所以需要為通訊引腳提供一個確定的狀態(tài)。電路設(shè)計時,使用上拉電阻,使總線和通訊引腳提供默認(rèn)的高電平。
一些標(biāo)準(zhǔn)設(shè)備,如邏輯分析儀,可以很方便地分析和破解標(biāo)準(zhǔn)通訊協(xié)議,例如SCI、SPI和CAN等。儀器自定義通訊協(xié)議,迫使競爭對手投入人力解析,將提高破解成本。
設(shè)計實例中,通訊雙方使用CPLD作為接口芯片,CPLD 的時鐘頻率為12MHz,每50 個時鐘周期進行一次總線信號采樣。通訊格式:
(1)幀起始標(biāo)志:所有的通訊均由主機發(fā)起,幀起始標(biāo)志的時序為200*3個時鐘周期高電平-200*3個時鐘周期低電平-200*3 個時鐘周期高電平-200*3 個時鐘周期低電平;
(2)數(shù)據(jù)位格式:邏輯1的時序,為200個時鐘周期高電平-200 個時鐘周期低電平;邏輯0 的時序,為200個時鐘周期低電平-200個時鐘周期高電平;
(3)應(yīng)答標(biāo)志:僅邏輯1為有效應(yīng)答;
(4)主機向從機發(fā)送命令和數(shù)據(jù)的通訊格式(時序如圖2所示):
圖2 主機向從機傳送命令、數(shù)據(jù)的通訊格式時序圖
①Q(mào)uab1 主機向從機發(fā)送幀起始標(biāo)志,并等待從機應(yīng)答。若從機應(yīng)答超時,則本次通訊失敗。
②從機檢測到有效的幀起始標(biāo)志后,向主機發(fā)送應(yīng)答標(biāo)志。
③主機在規(guī)定的時間內(nèi)檢測到有效的應(yīng)答標(biāo)志后,向從機發(fā)送數(shù)據(jù)。若主機應(yīng)答超時,則本次通訊失敗。
④從機接收數(shù)據(jù),同時進行數(shù)據(jù)位有效性檢查和生成校驗數(shù)據(jù)。并在數(shù)據(jù)接收完成后,發(fā)送應(yīng)答標(biāo)志。
(5)從機向主機發(fā)送校驗結(jié)果的通訊格式(時序如圖3所示):
圖3 從機向主機傳送數(shù)據(jù)校驗結(jié)果的通訊格式時序圖
①從機檢測到有效的幀起始標(biāo)志后,向主機發(fā)送應(yīng)答標(biāo)志。
②從機向主機發(fā)送校驗數(shù)據(jù)。
③主機接收校驗數(shù)據(jù),并確認(rèn)校驗數(shù)據(jù)有效后,發(fā)送應(yīng)答標(biāo)志。若主機應(yīng)答超時,則本次通訊失敗。
④從機在規(guī)定的時間范圍內(nèi)檢測到有效的應(yīng)答標(biāo)志后,將執(zhí)行主機的命令,本次通訊成功完成。若主機應(yīng)答超時,則本次通訊失敗。
(6)若雙方檢測到通訊失敗,將重新發(fā)起通訊。如果出現(xiàn)連續(xù)多次通訊失敗,就可以判定為儀器通訊穩(wěn)定性出現(xiàn)問題。在儀器起鉆后,應(yīng)檢查通訊線的可靠性。
數(shù)據(jù)加密,就是將明文通過密鑰轉(zhuǎn)換成無意義的密文,而接收方將密文解密還原成明文。鉆井儀器工作在高溫環(huán)境中,CPU的性能普遍不高。因此,在設(shè)計通訊協(xié)議時,不能使用復(fù)雜的加密算法。
設(shè)計實例中,通訊加密的步驟如下:
(1)取得預(yù)設(shè)的密鑰:通訊加密預(yù)設(shè)的密鑰是一個字節(jié),8個字位不全為0或全為1,避免降低通訊協(xié)議的破解難度;
(2)加密明文第一個字節(jié):將明文的第一個字節(jié)與密鑰做異或,得到密文的第一個字節(jié);
(3)加密明文其他數(shù)據(jù):將明文的第二個字節(jié)與密文的第一個字節(jié)做異或,得到密文的第二個字節(jié)。與密文的第二個字節(jié)計算方法相同,即可得到密文之后的所有數(shù)據(jù)。
設(shè)計實例中,通訊解密的步驟如下:
(1)取得預(yù)設(shè)的密鑰:通訊解密的密鑰與加密的密鑰相同;
(2)解密密文第一個字節(jié):將密文的第一個字節(jié)與密鑰做異或,得到明文的第一個字節(jié);
(3)解密密文其他數(shù)據(jù):將密文的第二個字節(jié)與密文的第一個字節(jié)做異或,得到明文的第二個字節(jié)。與明文的第二個字節(jié)計算方法相同,即可得到明文之后的所有數(shù)據(jù)。
設(shè)計實例中,校驗數(shù)據(jù)密文的生成步驟如下:
(1)取得預(yù)設(shè)的密鑰:校驗數(shù)據(jù)使用的密鑰與數(shù)據(jù)加密和解密的密鑰不同。校驗數(shù)據(jù)預(yù)設(shè)的密鑰的各數(shù)據(jù)不能是全0或全1,否則將降低通訊協(xié)議的破解難度;
(2)校驗數(shù)據(jù)的明文:將明文逐字節(jié)進行加和計算,將計算結(jié)果的最低字節(jié)作為校驗數(shù)據(jù)的明文;
(3)校驗數(shù)據(jù)的密文:將校驗數(shù)據(jù)的明文與密鑰做異或,得到校驗數(shù)據(jù)的密文。
設(shè)計實例中,校驗數(shù)據(jù)明文是將密文與對應(yīng)的密鑰做異或得到的數(shù)據(jù)。
在調(diào)試過程中,內(nèi)部通訊在接線良好時,通訊穩(wěn)定;在人工模擬通訊干擾時,能很好地完成通訊任務(wù);在人工模擬通訊中斷時,出現(xiàn)了總線沖突,未造成通訊引腳損壞和CPU工作不正常,并且成功地從錯誤中恢復(fù)。
參考本文的設(shè)計思路,也可以設(shè)計出其他的通訊電路和通訊加密方法,為儀器的知識產(chǎn)權(quán)提供一個可行的保護方案。