康瑞航,嚴 宇,劉 奇,郝 飛,申港港,倪 新
(陜西萬方汽車零部件有限公司,陜西 西安 710200)
硬件電路檢測是電器產品生產過程中的重要環節,可以在產品外殼裝配環節前檢測出硬件電路甚至芯片或者電阻級別的質量問題,避免問題件被深度加工。
硬件電路檢測軟件主要功能有開關電路檢測(高有效、低有效)、ADC信號采集電路、系統電壓采集電路(主系統電壓和各分系統電壓)、系統喚醒源(CAN、LIN、硬線)電路、半橋/全橋驅動電路、驅動電路、驅動電路的輸出反饋電路、驅動電路的輸出上拉電路以及各種通信接口電路(CAN、LIN、串口)等等。
硬件檢測軟件功能需求除了基本的硬件電路檢測以外,還需要人機交互、檢測結果數據傳輸功能、按照功能模塊化劃分,具體系統功能組件如圖1所示。

圖1 系統功能組件圖
按照功能進行軟件代碼分層設計,將系統由外設驅動層(PD)外設抽象層(PAL)、中間件層(Middleware)、應用層、狀態機調度層分為5層。每個層級又分為多個單獨的模塊,模塊間相互獨立,被上次系統逐級調用,軟件分層如圖2所示。

圖2 軟件分層圖
PD層組件通過調用對外設寄存器操作的硬件訪問(一般為宏定義或者static函數),讀寫MCU底層硬件外設模塊的寄存器,完成對外設功能配置和狀態讀取實現軟硬件交互,由于PD層代碼直接操作寄存器,所以其效率很高,但不能跨平臺使用[1]。
PD層組件提供了豐富的API接口,支持對外設寄存器進行直接讀寫操作,其API函數以
在PD層的基礎上,封裝一個外設抽象層,將能夠實現相同功能的外設PD組件封裝為一個PAL功能組件,PAL抽象對上層級提供統一的API函數,便于上層對于相同功能模塊的統一化處理。
PAL層組件對PD層組件功能進行了抽象和封裝,提供了相對較少但功能強大的API接口,其API函數以
定時器中斷服務函數void ftmTimerISR(void)
代碼如下:

用于產生時間標志用于驅動調度機制運轉,以及指示燈閃爍,便于使用者觀察[2]。
一般中間件包括軟件協議棧(CAN,LIN)USB及文件系統,外圍復雜芯片驅動。S32 SDK 提供了PD,PAL,Middle-ware,可以通過NXP公司的桌面可視化配置工具完成配置,配置方法參考的是官方說明文檔,也可參考官方代碼自行完成PD層和PAL層設計[3]。
本設計PD層和PAL層用NXP提供的SDK配置,Middle-ware使用協議棧生成CAN,LIN通訊協如圖3所示。

圖3 CAN協議棧代碼
定義狀態數據的枚舉類型



本設計應用層主要是調用狀態機調度層,實現不同模塊的硬件狀態檢測,此外應用層還有個重要任務是將檢測結果通過CAN總線或者LIN總線或者串口傳輸出去,檢測結果輸出方式可靈活配置選擇某種方式也可以三種方式同時輸出,便于上位機或者顯示屏等使用,檢測結果通過 CAN總線如圖4所示。

圖4 檢測結果通過CAN總線外發
分層架構設計的硬件檢測軟件和老版本的硬件檢測軟件在檢測效率和誤檢率上的比較數據,如表1所示。

表1 分層架構后檢測時間和誤檢數對比(每100個)
本文介紹的分層設計,逐級調用的硬件檢測軟件已經在檢測臺架上使用,并明顯提高了檢測效率,降低了誤檢率。在硬件檢測軟件的設計中,這樣設計有如下優點:
(1)提高軟件質量,縮短產品開發周期,在各模塊算法軟件實現的時候,能調用統一的底層軟件提高代碼復用性,避免重復去實現相似的函數,減少工作量提高代碼運行效率。
(2)可配置的檢測結果輸出方式,方便后期檢測臺架升級,狀態機清晰的程序結構和統一接口可有效避免軟件代碼問題,提高產品的穩定性。
(3)代碼的分層設計,便于后期針對需求對部分軟件進行調整而不影響其他沿用軟件,簡化程序的升級和維護。