王廣君,謝巧靈
(1. 中國地質大學(武漢)自動化學院,湖北 武漢 430074;2. 復雜系統(tǒng)先進控制與智能自動化湖北省重點實驗室,湖北 武漢 430074;3. 中國地質大學(武漢)機械與電子信息學院,湖北 武漢 430074)
虛擬儀器(virtual instruments)是一種集計算機技術、微電子技術、嵌入式技術和數(shù)字信號處理技術于一體的新型儀器[1-2]。其系統(tǒng)采用軟件控制硬件的工作模式,在儀器工業(yè)中占有重要的地位。
隨著技術的不斷發(fā)展,虛擬儀器對數(shù)據(jù)傳輸速率提出了更高的要求[3]。以100 kHz 最小頻率分辨率、100 幀/s處理速率的頻譜分析儀為例,如果要求在8 位1 GHz采樣速率AD 的硬件條件下實現(xiàn),那么根據(jù)奈奎斯特采樣定理的要求,每幀數(shù)據(jù)的個數(shù)需達到104。每幀數(shù)據(jù)大小則需達到8×104位。數(shù)據(jù)傳輸速率則要求高達8 Mbit/s 以上。若需進一步提高頻率分辨率或是顯示幀率,數(shù)據(jù)傳輸速率還需進一步提高。目前,采用藍牙[4]、ZigBee[5]進行通信的無線虛擬儀器只能進行低速數(shù)據(jù)傳輸。Wi-Fi 通信技術雖然占用空間資源少、數(shù)據(jù)傳輸速率高,并在測量儀器的數(shù)據(jù)傳輸中有廣泛的應用[6],但是通過Wi-Fi 連接的前端硬件大多采用串口方式[7],傳輸速率仍難以滿足高速數(shù)據(jù)傳輸?shù)囊蟆?/p>
為此,筆者利用μC/OS-II 多任務編程接口,設計了一種結合緩沖池機制和多任務機制的Socket 通信方法,實現(xiàn)無線虛擬儀器的高速無線數(shù)據(jù)通信。
無線虛擬儀器系統(tǒng)主要由數(shù)據(jù)采集與預處理模塊、無線控制模塊、Wi-Fi 通信模塊、虛擬儀器上位機模塊組成,如圖1 所示。數(shù)據(jù)采集與預處理模塊由現(xiàn)場可編程邏輯門陣列(FPGA)控制,用于數(shù)據(jù)的采集與處理,并根據(jù)接收的指令將數(shù)據(jù)通過串行外設接口(SPI)傳出;無線控制模塊由ARM 處理器控制,用于協(xié)調虛擬儀器模塊和Wi-Fi 通信模塊的數(shù)據(jù)傳輸;Wi-Fi 通信模塊完成數(shù)據(jù)鏈路層和物理層的工作,對封包好的無線數(shù)據(jù)進行收發(fā);虛擬儀器上位機模塊由計算機控制,對接收到的無線數(shù)據(jù)分別進行存儲、分析、顯示等處理。無線控制模塊和Wi-Fi 通信模塊是設計的重點。

圖1 系統(tǒng)總體設計框圖
無線控制模塊采用意法半導體公司的STM32F407VET6 作為主控芯片;Wi-Fi 芯片選用Marvell 公司的88W8801 芯片。高速數(shù)據(jù)傳輸采用傳輸控制協(xié)議(TCP),通過μC/OS-II 實時操作系統(tǒng)實現(xiàn)。控制軟件包含系統(tǒng)任務、網(wǎng)卡任務、TCP/IP 協(xié)議棧任務、傳輸控制任務,借助于μC/OS-II 實時操作系統(tǒng)可裁剪的、搶占式的實時多任務內核,軟件部分得以在實時性和小型化之間得以均衡[8],既能保證4 項任務間的實時切換,又能保證整個系統(tǒng)的高效運轉。
控制軟件設計包括Wi-Fi 驅動移植和傳輸控制兩部分。
Wi-Fi 驅動移植分為TCP/IP 協(xié)議棧移植、無線網(wǎng)卡驅動移植。
2.1.1 TCP/IP 協(xié)議棧移植
選用lwIP 協(xié)議棧實現(xiàn)TCP/IP 協(xié)議棧移植。lwIP為了適應不同的操作系統(tǒng),在lwIP 和操作系統(tǒng)之間增加了一個操作系統(tǒng)仿真層[9]。操作系統(tǒng)仿真層為操作系統(tǒng)的定時、進程同步和消息傳遞提供了一個統(tǒng)一的接口。
將lwIP 移植到μC/OS-II,需要對以下幾個文件進行編寫:
(1)cc.h:該文件需要定義平臺無關的數(shù)據(jù)類型、臨界保護區(qū)和編譯器特定符號,并調試輸出。
(2)perf.h:該文件定義與性能測量相關的內容,但本設計未涉及,故為空。
(3)sys_arch.c:該文件需要為協(xié)議棧提供μC/OS-II 多任務相關機制,主要包括消息郵箱機制、同步機制(信號量)、內核任務創(chuàng)建、時間管理機制(延時、獲取運行時間)。
(4)sys_arch.h:該文件與sys_arch.c 配套使用,除需要對sys_arch.c 中函數(shù)進行聲明外,還需定義消息郵箱的參數(shù)。
2.1.2 無線網(wǎng)卡驅動移植
無線網(wǎng)卡驅動移植涉及大量的寄存器操作。為了編寫的方便,通過移植Linux 下的驅動實現(xiàn)無線網(wǎng)卡驅動程序的編寫。這一過程主要是修改Linux 驅動以適應μC/OS-II 的要求,具體工作如下:
(1)為了節(jié)省空間,對無線網(wǎng)卡驅動中不常用的緩沖區(qū)(如事件緩沖區(qū)、掃描得到的信標信息緩沖區(qū)等)進行了縮減;
(2)將驅動程序里的時間管理代碼替換為μC/OS-II 的形式;
(3)將驅動程序里的信號量代碼替換為μC/OS-II的形式;
(4)網(wǎng)卡采用安全數(shù)字輸入輸出(secure digital input and output,SDIO)接口,所以需編寫SDIO 驅動;
(5)Linux 中使用sk_buff 結構體管理TCP/IP 中的數(shù)據(jù)[10],而lwIP 使用pbuf 結構體來管理[11],所以需編寫sk_buffer.c 文件完成兩者之間的轉換。
傳輸控制部分借助μC/OS-II 實時操作系統(tǒng)的多任務實現(xiàn)。數(shù)據(jù)的接收和發(fā)送之間公用一個緩沖池,利用直接內存存取(DMA)傳輸數(shù)據(jù)時不占用CPU 時間的特點[12],再結合緩沖池機制和多任務機制,即可有效提升數(shù)據(jù)傳輸速率。
通過SPI 接收數(shù)據(jù)的速率較快,在STM32F407上可達42 MHz,而通過TCP 發(fā)送數(shù)據(jù)的速率因為要處理協(xié)議棧相關內容則相對較慢。為了協(xié)調高速與低速接口,常采用緩沖池的方法。大多數(shù)嵌入式系統(tǒng)通常采用靜態(tài)內存塊池的方法[13],將系統(tǒng)空余的內存統(tǒng)一管理,生成一系列的大小固定的內存塊池,在實際操作中對這一整個內存塊進行操作。高速無線數(shù)據(jù)通信方案中的緩沖池也采用類似的結構。
緩沖池由N 個相同大小的緩沖區(qū)組成,每個緩沖區(qū)包含緩沖區(qū)編號、狀態(tài)位和數(shù)據(jù)字段3 部分,如圖2所示。緩沖區(qū)編號具有唯一性,用來標識當前緩沖區(qū)在緩沖池中的位置;狀態(tài)位為0 表示對應數(shù)據(jù)字段為空,狀態(tài)位為1 表示對應數(shù)據(jù)字段為滿。操作系統(tǒng)每次傳輸完成后,記錄下上一次讀寫操作完成的緩沖池編號。數(shù)據(jù)的接收從上一次操作的緩沖池開始,依次向下檢索接下來的緩沖區(qū),滿足條件即進行對應的讀寫操作。

圖2 緩沖池設計框圖
無線數(shù)據(jù)傳輸流程如圖3 和4 所示。

圖3 數(shù)據(jù)接收任務

圖4 數(shù)據(jù)發(fā)送任務
接收數(shù)據(jù)時,依次檢索緩沖池,當檢測到緩沖區(qū)為空時,通過SPI 發(fā)送DMA 請求。當數(shù)據(jù)接收完成時,將其存入緩沖區(qū),并更新緩沖池狀態(tài)。
發(fā)送數(shù)據(jù)時,依次檢索緩沖池,當檢測到緩沖區(qū)為滿時,通過Wi-Fi 接口將緩沖區(qū)的數(shù)據(jù)發(fā)送至上位機,并更新緩沖池狀態(tài)。
在操作SPI 或Wi-Fi 收發(fā)數(shù)據(jù)時,采用了DMA技術。此時,數(shù)據(jù)傳輸只占用數(shù)據(jù)總線而不占用CPU。利用這一特性,在此時切換至另一任務進行數(shù)據(jù)處理,可以有效提高CPU 的利用率,從而提高數(shù)據(jù)傳輸速率。
利用由數(shù)據(jù)采集與預處理模塊、無線控制模塊、Wi-Fi 通信模塊搭建的測試平臺(如圖5 所示)進行了數(shù)據(jù)傳輸測試,考察數(shù)據(jù)傳輸?shù)恼_性、穩(wěn)定性和傳輸速率。測試情況通過Wireshark 抓包得到。

圖5 測試平臺實物圖
對于無線數(shù)據(jù)傳輸而言,傳輸正確是最基本的要求。測試時,發(fā)送內容在0~255 之間循環(huán)遞增的數(shù)據(jù)包,上位機進行接收并統(tǒng)計。表1 是數(shù)據(jù)正確性測試結果。數(shù)據(jù)傳輸中雖有少量丟包,但TCP 丟包后的重傳確保了數(shù)據(jù)傳輸?shù)恼_性。

表1 傳輸正確性測試
因為采用多任務和公用緩沖池的設計為系統(tǒng)引入了競爭冒險,所以進行數(shù)據(jù)傳輸穩(wěn)定性測試尤為重要。測試時,由數(shù)據(jù)采集與預處理模塊產(chǎn)生測試數(shù)據(jù),無線控制模塊控制Wi-Fi 通信模塊進行數(shù)據(jù)轉發(fā),上位機進行接收并統(tǒng)計。穩(wěn)定性測試時間為3 600 s,在測試過程中,數(shù)據(jù)傳輸速率穩(wěn)定在16.0 Mbit/s,如圖6 所示。

圖6 穩(wěn)定性測試速率圖
對采用順序設計和本文提出的多任務設計的數(shù)據(jù)傳輸速率進行了比較測試。測試時,由數(shù)據(jù)采集與預處理模塊產(chǎn)生測試數(shù)據(jù),無線控制模塊控制Wi-Fi 通信模塊進行數(shù)據(jù)轉發(fā),上位機進行接收并統(tǒng)計。測試時間約600 s,測試結果如圖7 所示。

圖7 順序設計和多任務設計的速率對比
從圖7 可以看到,采用順序設計的數(shù)據(jù)傳輸平均速率為12.4 Mbit/s;而采用多任務設計的數(shù)據(jù)傳輸平均速率為16.0 Mbit/s。多任務設計方案較前者傳輸速率提高了約29%。
本文設計了結合緩沖池機制和多任務機制的無線數(shù)據(jù)傳輸控制方案,很好地滿足了無線虛擬儀器系統(tǒng)對高速無線數(shù)據(jù)通信的要求。測試表明,該方案正確可行、控制軟件穩(wěn)定可靠。