段學松,劉童瑤,繆程澳,曲中水
(哈爾濱理工大學 計算機科學與技術(shù)學院,黑龍江 哈爾濱150080)
近場通信(Near Field Communication,NFC)作為一種由RFID 技術(shù)演變而來新興的技術(shù),可以在彼此靠近的情況下低功耗進行數(shù)據(jù)交換。利用NFC 配合藍牙無線傳輸技術(shù)實現(xiàn)對電子設(shè)備的非實時非在線維護是一種新的數(shù)據(jù)維護方式,具有較高的工程應(yīng)用價值。
空中下載技術(shù)(Over The Air Technology,OTA)是一種無線升級技術(shù),常用于Android 手機等嵌入式設(shè)備的系統(tǒng)升級上。首先通過運營商提供的數(shù)據(jù)流量或者Wifi等方式把系統(tǒng)升級包下載至本地手機,然后通過解壓縮系統(tǒng)升級包到特定目錄來修復設(shè)備或者更新系統(tǒng)。
隨著科技的發(fā)展,越來越多的嵌入式設(shè)備都支持ISP(In System Programing)在系統(tǒng)編程技術(shù)。ISP 技術(shù)能夠做到無需取下電路板上的器件的情況下對器件編程。ISP 技術(shù)一般由上位機以有線的方式對下位機的器件進行編程,因此需要在設(shè)計電路的時候預留相關(guān)的接口。ISP 技術(shù)無論是在各種單片機還是在FPGA 上都有比較廣泛地應(yīng)用。
NFC 用于P2P 數(shù)據(jù)交換時,采用的是簡單NDEF 交換協(xié)議(simple NDEF exchange protocol,SNEP)[1]。兩個NFC 設(shè)備進行通信前,要把數(shù)據(jù)封裝為NDEF 格式[1],才能通過SNEP 協(xié)議進行通信。
整個系統(tǒng)由硬件系統(tǒng)與軟件系統(tǒng)兩部分組成。
硬件系統(tǒng)的主控板采用ARM 公司的STM32 開發(fā)板,但是考慮到不同的電子設(shè)備的功耗要求以及數(shù)據(jù)修改量,硬件系統(tǒng)分為兩種方案來實現(xiàn)。
4.1.1 針對功耗要求苛刻、少量數(shù)據(jù)修改的電子設(shè)備的硬件系統(tǒng)實現(xiàn)方案(方案一)
電子設(shè)備對功耗要求比較苛刻,而對數(shù)據(jù)僅有少量的修改的情況比較常見,對于這種情況,數(shù)據(jù)傳輸應(yīng)當選擇傳輸功耗較低,數(shù)據(jù)傳輸速度也很低的NFC 模塊PN532 作為數(shù)據(jù)傳輸控制的硬件設(shè)備。硬件系統(tǒng)通過數(shù)據(jù)維護接口實現(xiàn)對電子設(shè)備內(nèi)存儲設(shè)備進行修改,實現(xiàn)無線數(shù)據(jù)維護的功能。由于對傳輸?shù)乃俾室筝^低,因此用單片機的片內(nèi)RAM 即可實現(xiàn)數(shù)據(jù)的臨時存儲,無需采用多余的存儲模塊,降低了成本。
4.1.2 針對功耗要求不高、大量數(shù)據(jù)修改的電子設(shè)備的硬件系統(tǒng)實現(xiàn)方案(方案二)
當電子設(shè)備對功耗要求不是十分嚴格時,為了提高傳輸效率,達到功耗與數(shù)據(jù)傳輸速率的平衡,采用藍牙實現(xiàn)無線數(shù)據(jù)傳輸,通過把藍牙的配置信息以及配對PIN寫入NFC 標簽的方式加速藍牙連接,實現(xiàn)NFC 技術(shù)與藍牙技術(shù)融合[2]。藍牙模塊采用HC05[5]藍牙模塊。硬件系統(tǒng)同樣通過數(shù)據(jù)維護接口實現(xiàn)對電子設(shè)備內(nèi)存儲設(shè)備進行修改。當需要大量的數(shù)據(jù)修改時,需要用存儲設(shè)備作為緩沖區(qū)來臨時存儲接收到的數(shù)據(jù)。考慮到價格以及可拓展性等因素,采用SD 卡作為數(shù)據(jù)緩沖區(qū),上位機通過掃描帶有藍牙配對信息的NFC 標簽并獲得藍牙HC05 模塊的配置信息以及配對的PIN 后,直接連接到HC05 模塊,與上位機通信收到的數(shù)據(jù)都會先被臨時存儲到SD卡內(nèi),通過數(shù)據(jù)維護接口寫入要維護的電子設(shè)備中。
圖1 MMHF 的協(xié)議規(guī)范
圖2 Android 讀取NFC 標簽和NFCP2P 通信的樣例代碼
4.2.1 NFC 傳輸協(xié)議定義
上位機主要通過NFC 實現(xiàn)與下位機的數(shù)據(jù)交互??紤]到NFC 傳輸速度較慢,同時為了方便發(fā)送和接受數(shù)據(jù)包,可以把NDEF 協(xié)議再一次封裝為MMHF(Memory Maintenance Hex File)協(xié)議。該協(xié)議是適用于本系統(tǒng)手機到下位機數(shù)據(jù)傳輸?shù)膶S脜f(xié)議。下位機可根據(jù)本協(xié)議的修改記錄對EEPROM 修改指定地址的數(shù)據(jù)。MMHF 的協(xié)議規(guī)范如圖1 所示。
MMHF 的協(xié)議字段具體含義如下:
Header (4Byte):大小為4 字節(jié)的固定字符串“MMHF”,是識別傳輸協(xié)議的頭部。
Type(6Byte):大小為6Byte 用來記錄的是下位機存儲芯片的型號的字符串。
Check(16Byte):大小為16Byte 的字符串,是一個校驗碼,用于確保和驗證該數(shù)據(jù)是維護人員發(fā)出的,增加了一定安全性,該值由開發(fā)人員自主設(shè)定,如果下位機校驗Check 字段不是設(shè)定的值,會把發(fā)來的數(shù)據(jù)丟棄。
BodyCnt(1Byte):BodyCnt 是一個大小為1Byte 數(shù),記錄了需要傳輸?shù)拇螖?shù)。
Body(大小不固定):多條修改記錄的集合,其大小不固定。
AllRecordSize(1Byte):大小為1Byte 的數(shù),記錄所在的Body 中修改記錄的總字節(jié)大小。由于下位機數(shù)據(jù)存儲大小有限,因此單次傳輸一個Body 中的所有修改記錄的總大小不能超過115B。Android 解析本文件的時候會檢查記錄的總大小,如果超過115B 會報錯。
RecordCnt(1Byte):大小為8bit 的數(shù),記錄的是本文件中修改記錄的數(shù)量。
Record(大小不固定):一條EEPROM 的修改記錄,包含地址和數(shù)據(jù)。
4.2.2 藍牙傳輸協(xié)議定義
上位機主要通過藍牙來實現(xiàn)與下位機的數(shù)據(jù)交互,為了方便接收和發(fā)送數(shù)據(jù)包,可以在藍牙SSP 協(xié)議的基礎(chǔ)上,繼續(xù)封裝協(xié)議,命名為SSP+協(xié)議。協(xié)議分為6 段。其中,START1 段為一個字節(jié)大小的固定16 進制數(shù):0x0A,START2 段為一個字節(jié)大小的固定16 進制數(shù)0xFA,這兩個字節(jié)作為數(shù)據(jù)包的包頭,用來識別數(shù)據(jù)包是基于SSP+協(xié)議的。
圖3 通過MAC 地址直接連接已經(jīng)配對的藍牙設(shè)備樣例程序代碼
Count 段大小是一個兩個字節(jié),表示要接收的字節(jié)流的長度。Data[]段大小為Count 字節(jié),表示數(shù)據(jù)傳輸?shù)恼鎸崝?shù)據(jù)。END1 段是一個字節(jié)大小的固定16 進制數(shù)0x00,END2 段是一個字節(jié)大小的固定16 進制數(shù)0x0B,這兩個字節(jié)作為數(shù)據(jù)包的包尾,用來作為識別數(shù)據(jù)包結(jié)束。
Android[6]是一套真正意義上的開發(fā)性的移動設(shè)備綜合平臺,它包括操作系統(tǒng)、中間件和一些關(guān)鍵的平臺應(yīng)用。安卓系統(tǒng)具有開放性、豐富的硬件、大量的開發(fā)商等特點。安卓系統(tǒng)是開放免費的,并且Android 手機本身普遍具有NFC 和藍牙兩種功能,因此上位機采用Android系統(tǒng)的智能手機來實現(xiàn)比較合適。
4.3.1 Android 下NFC 通信[3]的實現(xiàn)
Android 中用NdefMessage 和NdefRecord 兩個類來表示NFC 標簽中的信息。NFC 標簽的識別實時過程是由硬件實現(xiàn)的,當硬件發(fā)現(xiàn)有NFC 標簽的時候,會對已經(jīng)注冊NFC 權(quán)限[3]的Activity 產(chǎn)生一個onNewIntent()的調(diào)用。在Android 系統(tǒng)中用SNEP 協(xié)議實現(xiàn)兩個NFC 設(shè)備的通信,要用到兩個API 接口,分別是當與支持NFCP2P的設(shè)備接觸時,發(fā)送含有多個NFC 標簽的消息到設(shè)備的setNdefPushMessage()和產(chǎn)生一個消息發(fā)送成功回調(diào)的setNdefPushMessageCallback()。Android 利用NFC 通信的代碼如圖2 所示。
4.3.2 Android 下藍牙通信[4]的實現(xiàn)
Android 同樣也采用適配器管理類來操作藍牙設(shè)備。獲取藍牙適配器,同樣僅需一行語句:BluetoothAdaptermBluet oothAdapter=BluetoothAdapter.getDefaultAdapter(this)。得到適配器之后通過BluetoothDevice 類來獲得藍牙設(shè)備。藍牙通信與NFC 不同的是,藍牙通信需要建立連接,因此藍牙有專用的BluetoothSocket 類。代碼如圖3 所示。
本文設(shè)計基于NFC 無線通信的電子設(shè)備非實時維護系統(tǒng),該系統(tǒng)是一種具有實用價值的創(chuàng)新性的系統(tǒng)維護方式,利用現(xiàn)代移動設(shè)備的便利性、普及性,對于非聯(lián)網(wǎng)設(shè)備的維護給出了一種新的解決方案,不僅節(jié)省了設(shè)備異地維護過程的人力物力,也提高了解決問題的效率。