楊玉春,蘇燕辰,伍川輝,燕春光
(1.西南交通大學 機械工程學院,成都 610031;2.中車唐山機車車輛有限公司,唐山 063035)
近年來,高速列車集成了越來越多的電子設備,例如車載視頻監控、故障診斷設備、失穩平穩監控設備、弓網監控設備等。當前電子設備軟件升級是通過以太網、CAN總線、串口等通信接口實現在線升級,同濟大學石盼等人提出基于以太網接口的 IAP(In Application Programming)遠程升級技術[1],該技術優點是傳輸速度快;南京郵電大學王琦和李龍光等人提出基于CAN總線的程序在線升級技術[2-3];東南大學提出基于串口的應用程序在線升級技術[4]。以上技術均是在線升級技術,需要攜帶電腦和專用通信線纜,連接設備和電腦后在線完成設備升級,該類方式操作不夠便捷,且串口和CAN的實際數據傳輸速率相對較低。由于列車車載設備數量眾多、操作環境復雜、不便拆卸等原因,這種在線升級的方式對工作人員來說無疑是一件繁重的工作。本文以STM32F407為主控芯片,進行基于USB的列車車載設備軟件升級的技術研究,提出一種傳輸速率更快的,基于USB 2.0通信的離線升級技術,利用便攜式U盤對多個車載電子設備進行軟件升級,工作人員只需攜帶裝有bin文件的U盤,插入對應主機上,便可實現對整列車的同系列設備的軟件升級。
STM32F407芯片是32位低功耗、高性能的處理器,該處理器基于ARM Cottex–M4內核,集成FPU和DSP指令,支持浮點運算,其CPU工作頻率達168 MHz,Flash為1 024 K,SRAM為192 K,具有豐富的資源(定時器、內部存儲、CAN、485、USB、以太網、串口等)。該處理器使用新內核的Thumb–2指令集,使設計人員可以把代碼容量降低45%,把應用軟件所需內存容量降低了近一半[5]。STM32F407內部自帶USB OTG FS控制器和USB OTG HS控制器,支持高速HS(USB2.0,傳輸速率480 Mbps)、全速FS(USB1.1,傳輸速率12 Mbps)和低速(USB1.0,傳輸速率1.5 Mbps)傳輸。
USB是一種串行總線通信方式,具有速率高、支持熱插拔、性能可靠、價格低廉和易于擴展等特點[6]。(1)速率高,目前的USB 2.0標準支持傳輸速率達到480 Mbps,能很好地滿足大部分的接口需求;(2)支持熱插拔,即插即用;(3)易于擴展,通過USB集線器,1個USB主控制器上最多可以連接126個外設;(4)性能可靠,USB系統通過規范的硬件設計和USB協議中完善的數據錯誤檢測機制來確保數據準確無誤地發送和接收[7]。
USB外接設備從插入主機到拔出的整個過程中,共有6種狀態,包括:連接態、上電態、缺省態、地址態、配置態、掛起態[8],這個過程稱為枚舉過程。
當一個USB外接設備被掛接到總線上時,主機通過枚舉過程識別和管理新加入的設備,這個過程使得USB外接設備支持熱插拔[9]。圖1展示了枚舉過程的轉換流程及轉化條件,狀態切換的因素包括硬件電平變化和設備軟件或主機軟件的設置[10]。

圖1 外接設備枚舉轉換過程示意圖
(1)連接狀態,USB外接設備通過USB接口連接主機或Hub,進而改變總線電平,總線由此判斷有新設備接入。
(2)上電狀態,USB外接設備連接后,總線給其供電,但由于設備未被分配地址,尚不能進行通信,該狀態稱為供電狀態。
(3)缺省狀態,USB外接設備插入接口等待100 ms,待供電穩定后,主機給端口發送復位命令,完成寄存器復位后,給設備分配地址0,該地址為USB總線公共地址,稱為缺省地址。此時,USB外接設備可通過該地址與主機通信,完成設備配置。
(4)地址狀態,主機通過缺省地址0與USB外接設備通信,獲取設備描述符、配置參數、配置通道,同時配一個總線地址,之后各種數據傳輸都是通過該地址。USB外接設備獲得唯一地址的狀態稱為地址狀態。
(5)配置狀態,主機獲得設備描述符之后,開始配置USB外接設備,此時設備處于配置狀態。
(6)掛起狀態,當總線無任何活動的時間達到3 ms,USB外接設備將自動切換為低功耗掛起狀態,此時,USB接口處電流小于0.5 mA,USB接口保持其地址信息和配置信息,等待總線活動將其喚醒。
主機與USB外接設備通信是通過端點和管道來實現的,主機緩沖區和設備端點間的通信數據形成通信流。USB通信流如圖2所示。
(1)端點:USB外接設備端點是設備的標識。設備端點號有多個,設備地址只有一個。端點按種類分為輸入、輸出端點;按功能分為0端點和非0端點。
(2)管道:管道是主機存儲緩沖器與設備端點間進行數據傳輸的通道[11]。主機與設備0端點進行通信的管道稱為缺省管道。
很多車載監控設備需進行高速數據傳輸,故選用USB OTG HS通信模式,外接PHY芯片。本文選用USB 3300芯片作為USB通信的物理芯片,該芯片兼容USB 2.0協議,傳輸速率最高達480 Mbps,采用并行接口與STM32F407連接,可實現數據快速交互;外接24 MHz晶振,將DP和DM引腳連接至USB–A型接口完成數據傳輸。USB電路設計如圖3所示。

圖2 USB通信流示意圖

圖3 USB電路設計圖
IAP技術將F1ash映射為System Memory和User Flash Memory 2個存儲體。當運行System Memory存儲體上的IAP程序時,可對User Flash Memory存儲體重新燒寫[12],這樣做是方便在使用一段時間后,通過預留的接口(USB、CAN、USART等)對產品進行升級。實現IAP時,需要設計2個程序,即IAP程序和App程序,IAP程序通過特定通信方式接收App程序,將App程序存儲到指定位置,實現程序更新;App程序是功能程序,用于實現設備的功能。
程序一般存放在STM32內部Flash中,IAP程序從最低位置(0X08000000)開始存放,App程序通過USB接口讀入并存儲在IAP程序的后面。加載IAP程序后,程序運行流程如圖4所示。STM32F407控制器復位后,從0X08000004處取出IAP復位中斷向量的地址,如標號①所示,并跳轉到IAP復位中斷服務程序執行;執行完后,跳轉到0X08000004+N的位置執行IAP中main函數,如標號②所示;IAP中main函數讀取App更新標志,如標號③所示,并判斷是否需要升級,若需要升級,則讀取IAP升級程序,并存儲到Flash的0X08010000位置[13],如果不需要,則直接執行App程序,如標號④所示;從0X08000004+N+M位置讀取App復位中斷向量的地址,并跳轉到對應復位中斷服務程序執行,之后跳轉到App main函數執行用戶程序,如標號⑤所示[14]。在App main函數執行過程中,如果接收到1個中斷請求,PC指針強制跳轉到0X08000004中斷向量表位置,如標號⑥所示,之后程序再根據App程序偏移量,跳轉到對應中斷服務程序,如標號⑦所示[15]。中斷服務程序執行結束后,返回到App main函數繼續執行應用程序,如標號⑧所示。
在車載設備的IAP設計過程中,采用USB接口進行通信。(1)執行IAP程序中的USB驅動程序,初始化USB接口,并連接U盤;(2)掛載FAT32文件系統,實現對U盤的讀寫操作,并檢測U盤中是否存在bin文件;(3)IAP程序通過USB接口讀取提前配置并存儲在U盤中的升級程序,將升級程序存儲到Flash的0X08010000位置,升級后IAP跳轉到App程序位置開始執行新版App。
以上過程中,若存在U盤連接失敗、文件系統掛載失敗、bin文件讀取失敗或校驗不通過等情況,則視為升級失敗,執行系統復位;若U盤中不存在bin文件,則會跳到Flash0x08010000位置繼續執行舊版應用程序。具體升級過程如圖5所示。

圖4 加載IAP后程序運行流程圖
底包程序采用Keil 5開發平臺搭建,Keil 5一般生成hex文件,但系統升級需使用bin文件。bin文件生成需3個步驟,包括:配置升級程序起始地址、配置中斷向量表偏移量、運行fromelf.exe。
4.2.1 升級程序起始地址設置方法
升級程序偏移地址設置過程為,打開Options for Target 配置軟件,點擊Target 選項卡,軟件界面如圖6所示,在該界面設置App程序起始地址為0X08010000,即偏移量為0X10000。STM32F4系列芯片內部Flash大小為1 024 KB,留給App的存儲空間為0X08010000~0X08100000(960 KB);留給IAP的存儲空間為:0X08000000~0X0800FFFF(64 KB)。

圖5 車載設備軟件升級流程圖

圖6 升級程序起始地址設置界面示意圖
4.2.2 中斷向量表偏移量設置方法
(1)中斷向量表設置函數
NVIC_SetVectorTable(uint32 NVIC_VecTab,uint32 Offset)
(2)IAP中斷向量表設置
NVIC_SetVectorTable(0x08000000,0x00)
//IAP偏移量為0
(3)App中斷向量表設置

(1)軟件升級完成時,在從IAP程序跳轉到App程序之前,必須復位嵌套向量中斷控制器(NVIC,Nested Vectored Interrupt Controller ),防止跳轉過程中出現中斷,導致應用程序運行失敗。
(2)在App程序初始化時需正確設置NVIC向量表,將NVIC向量表映射到App程序起始地址;
(3)實現IAP程序過程中,必須正確處理計時器的清零操作,特別是在bin文件讀和寫、Flash擦除和編程過程中,要充分考慮計時器清零時間,在程序關鍵位置清零,一般在while循環函數中進行計時器清零操作。
本文詳細分析了IAP和USB通信協議的技術要點,實現了基于USB通信的車載設備軟件升級程序,通過裝有bin文件的U盤,就可完成整列車同系列產品的軟件升級任務,顯著降低了工作量。自帶USB協議接口的電子設備使用該技術不需要增加額外成本,只需通過軟件的更改,就可實現產品的升級和功能的修復。目前,該技術已應用于走行部故障診斷、平穩失穩在線監測等車載設備的系統升級。未來可探索該技術在智能家居、消費電子等更廣泛的物聯網應用場所的應用。