王代華,賈鵬程,趙志國,馬竹新
( 1.中北大學 儀器科學與動態測試教育部重點實驗室,太原 030051;2.中北大學 電子測試技術國家重點實驗室,太原 030051;3.晉西工業集團有限責任公司防務裝備研究院,太原 030051)
在航空航天及各類工業作業中,各類信息常需通過串口進行現場傳輸存儲以便后續準確分析[1]。但隨著各類控制系統規模的不斷增大,串口采集的信息種類也越來越多[2]。對大容量多通道串口數據的采集存儲方案也提出了關鍵數據的優先定位和讀取、小體積、低誤碼率及環境適應等要求。
近年來NAND Flash以其非易失性、高可靠性、寬溫度范圍成為大容量存儲介質的首選[3]。通常在Flash作為多通道系統存儲單元的場合中,多通道數據需按照一定的幀格式順序寫入Flash,離線分析時也按此幀格式進行通道區分和處理[4]。這種方法需遍歷存儲器的所有地址數據,在取出數據后再進行二次區分處理。而實際經驗表明:各類信息的數據輸出并非持續整個采集時段,甚至關鍵數據只是全部數據的某一段或幾段;當只有少量通道工作時,幀格式存儲的方案在讀取時仍需遍歷全部地址和數據,造成存儲資源的不均衡使用且降低工作效率;當多通道同時工作時,若因某通道故障或者數據包流速不規則,幀結構存儲方法易造成數據的覆蓋或NAND Flash以默認的高電平邏輯填補,給數據分析造成困擾[5]。
在某機載慣導系統6路RS232串口數據的存儲系統設計中,要求4路波特率為 115 200 bps,2路波特率 230 400 bps,持續采集時長不低于4 h,且需低誤碼率與可選數據段讀取。根據以上要求該系統采取了以FPGA(現場可編程門陣列)為控制核心,以NAND Flash為存儲單元作為實施方案,并設計了以查找頁為核心的讀取方案,用戶只需指定通道和時間區間即可將目標數據取出,給數據的高效處理及目標定位提供下位機方案。
串口數據采集存儲系統主要由接口模塊、FPGA數據處理模塊、存儲模塊組成,系統總體設計如圖1所示。其中接口模塊包括RS232串口與USB接口,RS232串口負責邏輯電平的轉換與數據傳輸,USB接口負責上下位機的通信;FPGA模塊起到數據的串并轉換、通道地址分配、NAND Flash控制和人機交互的作用;存儲模塊以NAND Flash為介質,按采集對象的數據量選取芯片為鎂光公司的MT29F16G08AB,其結構由4 096個連續塊構成,每塊分128頁,單頁可存儲4 kB數據量。
其整體操作流程如下:首先系統安裝并上電,采集存儲系統執行初始化和自檢操作;操作完成后,系統處于待記錄狀態,此時前端多通道串口總線接收的數據由FPGA處理并導入Flash存儲單元;飛行任務結束后,上位機通過USB將數據回讀至計算機。

圖1 系統總體設計框圖
為滿足機載環境下串口數據的可靠性和靈活性要求,本系統主要從軟件層面展開研究,結合FPGA并行處理數據的優勢,從串口數據的采集、傳輸、存儲邏輯和數據段的選讀角度進行關鍵技術設計。
在外界環境擾動的影響下,串行總線上的數據傳輸可能發生誤比特情況,通常這種誤比特表現為總線上串入浪涌或毛刺。在串口數據的捕獲處理上,雖然可在硬件上采取隔離式接口轉換芯片,防范電壓尖峰和接地回路的影響,但保險起見,也需要在軟件設計加入防抖措施,以提高串口的抗干擾能力,降低誤比特率[6]。
如圖2所示,通常串口數據捕獲采用滑窗的形式,即在固定波特率條件下,對總線上流過的每位數據進行判斷采樣[7]。若數據位寬為TW,則采用高出很多倍的采樣時鐘采集該位寬中間的極性電平,并將此電平進行串并轉換解析為易于存儲和傳輸的并行數據。本系統在捕獲單位串口數據時,多次采集并統計所有采集到的電平樣本的數量,通過分析樣本的高低電平分布情況,判斷該數據位為高邏輯電平,還是低邏輯電平。
從統計原理出發,收集的樣本量越大,結論推斷的可置信程度越高。同理,在采樣系統中,若提高了接口的采樣率,增加單位時間內接口采樣的樣本數,通過樣本數的概率分布情況就可以很有效地揭示數據的真實性,準確判斷串口極性電平[8]。

圖2 串口數據捕獲處理示意圖
6通道波特率最高為230 400 bps,20 MHz的主控時鐘下Flash的全速寫入速度為4.07~10.11 MB/s,遠高于6路RS232串口的數據量115 KB/s。但為避免多個串口主動同時“搶占”Flash接口而導致數據丟幀,本文引入2級緩存結構,將主動“搶占”轉換為被動入棧方式。
在FPGA內部有豐富的塊RAM資源和IP核供使用,利用IP核生成FIFO(先入先出的雙端口緩沖器)有助于提高代碼的穩定性和效率[9]。二級FIFO緩存結構如圖3所示,各級FIFO深度為8k,分配工作如下:各通道第1級FIFO緩存來自串并轉化后的8位并行數據,當有第1級FIFO空間半滿時,將該FIFO內4k數據全部取出并寫入第2級FIFO緩存。在Flash處于可頁編程狀態時,數據立即寫入Flash,2級FIFO清空。由于Flash頁編程繁忙時間tPROG為200~600 μs,FIFO的半滿操作可保證在寫入Flash期間不會有任何一級FIFO溢出,避免了競爭,實現了Flash寫操作的緩存處理。

圖3 二級FIFO緩存結構示意圖
針對多通道數據的讀寫與Flash管理機制,系統主要從以下三方面展開對NAND Flash存儲邏輯設計。
1) Flash地址指定通道方法。如表1所示,該方法將通道號與頁地址建立映射,并將頁地址指定給通道,即一頁只存儲一個通道的數據,可以形象的描述為按“頁格式”進行存儲。在寫操作時,當二級FIFO接收到某通道的4K數據時,FPGA按此格式進行頁地址指定。在讀操作時,單通道數據可根據該映射關系從對應空間內取出。MT29F16G08AB內每塊分128頁,每8頁即可完成一個循環,單塊構成16次循環,按此方式便將塊內地址劃分為6個空間,各通道數據互不影響,相當于每個通道都有一個獨立的空間[10]。

表1 頁查找
2) 數據附屬信息記錄。在多路數據按對應空間讀寫時,為保證可靠性和靈活性,分空間內的數據起始位置、空間大小以及Flash壞塊信息等作為附屬信息也需一并記錄。由于Flash第一塊在出廠時認定合格,故將該塊單獨設置為標記塊以記錄數據附屬信息。當第一塊因多次擦除成為無效塊時,則尋找下一個好塊設為標記塊。系統中NAND Flash操作流程如圖4所示。

圖4 Flash操作流程框圖
當存儲系統進入上電準備狀態時,需執行必要的復位和初始化操作,隨后FPGA讀出標記塊內的附屬信息,Flash進入工作狀態并等待指令。在自檢命令下達后,執行無效塊檢測、擦除操作與更新壞塊信息。在讀寫操作時,數據需經過ECC校驗處理后方可寫入Flash;讀寫結束后,各通道附屬信息開始更新。
3) 地址更新控制。由于NAND Flash讀寫操作以頁為基礎單位、擦除操作以塊為單位,系統針對不同需求建立了Flash的地址更新控制器,圖5為地址更新控制器結構框圖,主要由頁地址控制、塊地址控制、和壞塊判斷構成。

圖5 地址更新控制器結構框圖
頁地址控制主要用于數據與附屬信息的讀寫,無論是記錄附屬信息還是讀寫數據,初始地址都為上電時設置的對應頁。在讀寫階段,若當前頁操作完畢,則準備好下一個對應頁繼續執行; 塊地址控制用于塊地址更新,在自檢階段需順序檢測、擦除所有塊;在Flash讀寫階段,若當前塊操作完畢后,則順序開辟下一個好塊以做準備。壞塊判斷作用于塊地址需要更新的場合,讀寫階段的每一塊都需要與讀出的壞塊表進行對比,直到判斷為好塊方可繼續執行。
為實現關鍵數據的快速定位與靈活讀取,除按通道順序讀數外,系統另設計了數據包尋址法和頁地址直接尋址法作為數據段的快速選讀手段。數據的讀取流程如圖6所示,在每次數據回讀時,存儲系統都會判斷所選讀取方式和通道,再通過計算起始頁地址將對應數據段導出。

圖6 數據段讀取流程框圖
數據快速選讀的核心為根據回讀參數計算關鍵數據的起始頁地址。如圖7串口數據讀取軟件所示,在數據包尋址法中,需輸入數據包的波特率、容量、頻率和起始時間參數,其中波特率、包容量、頻率可計算出平均寫入速率,結合輸入的起始時間便可得出起始地址。在頁地址直接尋址法中,直接輸入起始地址即可將對應地址的數據段讀出。

圖7 串口數據讀取軟件
多通道寫入功能測試是為驗證各通道的數據寫機制是否正常,同時也是對系統設計原理以及地址指定通道邏輯的綜合考量。在多通道數據寫入機制測試中,用FPGA分頻得出的相應波特率發送正弦波數字信號(16位)、用系統6通道同時記錄該信號并順序從第一頁開始讀出,結果如圖8所示: 其中CH1~CH4數據一致,CH5與CH6波形一致且數據量為前4通道的兩倍,符合波特率設定。在地址指定通道的方式下,各通道各司其職,Flash地址空間分區正常,數據存儲機制按表1格式正常執行。

圖8 寫入機制測試結果曲線
在驗證各通道數據存儲系統數據的完整性實驗過程中,為清晰檢測數據存儲和傳輸過程的丟幀現象,用FPGA循環生成1~255遞增隨后遞減至1的508bytes數字鋸齒波傳輸給6各通道并寫入Flash,并用USB接口將第1通道數據讀出。打開上位機接收到的數據,圖9為某塊前兩頁的鋸齒波形,圖10為該波形在跨頁銜接部分的數據,可知:在單位頁的空間內,該函數共產生8個周期余32byte,地址為與理論計算結果一致;且數據的跨頁銜接未發生溢出或丟失現象,數據完整可靠。

圖9 局部鋸齒波形
整體數據檢驗測試是測試存儲系統全通道長時間工作的整體誤碼率,同時也是對采集存儲系統可靠性與穩定性的綜合考量。為達到驗證目的,搭建了如圖11所示的測試平臺:其中PC端與采集存儲系統的某通道采用串口總線連接,PC端調試助手以4 096字節為一組不斷向采集存儲系統發送隨機數據。采集系統其他通道按該隨機數據自發送與自接收。數據發送停止后,調試助手同樣以4 096字節為一組讀取任一通道存儲單元內數據,并與預置隨機數據對比。

圖10 鋸齒波數據完整性分析界面

圖11 測試實驗平臺示意圖
為對照測試結果,調試助手保留了源隨機數據記錄,并與讀出數據進行對比分析,圖12為某頁測試結果。可知:采集系統經長時間工作后,源數據與接收數據仍保持一致,該通道無出現誤比特的現象,滿足了預期要求,達到多路串口同時采集及存儲的目的,并驗證了存儲模型的正確性。

圖12 整體數據檢驗測試界面
本系統以多通道串口系統的新存儲要求展開研究,以FPGA為主控核心設計了6通道RS232串口數據的采集、緩存及存儲系統。同傳統寫入方法相比,系統通過地址指定通道的思想將單片Flash空間分區,實現了各通道地址上的相互獨立。最后通過數據寫入機制測試、完整性測試和整體數據檢驗測試驗證了存儲模型的可行性,測試結果表明該系統采集和存儲數據的準確率高,處理多通道大容量數據靈活、簡便。