胡琪 顏科峰 蔣國軍
(第七一五研究所,杭州,310023)
陣列信號(hào)處理是現(xiàn)代信號(hào)處理的重要分支,它被廣泛應(yīng)用于雷達(dá)、移動(dòng)通信、聲吶、地震勘探、射電天文、電子醫(yī)療等多個(gè)領(lǐng)域。陣列信號(hào)源包含多個(gè)按一定空間規(guī)則排布的信號(hào)產(chǎn)生單元,通過控制每個(gè)單元的信號(hào)延時(shí)產(chǎn)生不同形狀的波束。基于這個(gè)目的,陣列信號(hào)源有時(shí)被設(shè)計(jì)成為“一個(gè)主控,多個(gè)陣元”的結(jié)構(gòu)。主控是指上位計(jì)算機(jī),陣元即信號(hào)產(chǎn)生單元。信號(hào)產(chǎn)生單元通常以MCU或DSP為核心,獨(dú)立產(chǎn)生信號(hào)和計(jì)算延時(shí)。這樣的硬件組成可以提供更靈活多樣的輸出,但通常會(huì)增加軟硬件維護(hù)的復(fù)雜性和備件成本,尤其在信號(hào)陣元數(shù)量很大時(shí),所以,研究一種適用于這種系統(tǒng)結(jié)構(gòu)的固件維護(hù)與升級(jí)方法具有重要意義。
陣列信號(hào)源可抽象為圖1所示。其中用戶通過上位機(jī)生成指令,指令通過通信節(jié)點(diǎn)進(jìn)行協(xié)議或接口轉(zhuǎn)換,然后被送到各個(gè)信號(hào)產(chǎn)生單元生成信號(hào)。本文描述的陣列信號(hào)源系統(tǒng)中,信號(hào)產(chǎn)生單元的核心是Freescale公司的MCF52259,這是一款32位MCU,主頻最高可達(dá)80 MHz,片上包含64 kB的RAM和512 kB的Flash ROM,接口包含UART、I2C、SPI等[1]。這款芯片可以在程序中對Flash ROM進(jìn)行讀寫操作,而且程序可以運(yùn)行在RAM或Flash ROM中,這些特性將被用于這個(gè)設(shè)計(jì)中。上位機(jī)與通信節(jié)點(diǎn)間使用LAN網(wǎng)絡(luò)通信,通信節(jié)點(diǎn)與信號(hào)產(chǎn)生單元間使用UART接口通信。上位機(jī)對各個(gè)信號(hào)產(chǎn)生單元進(jìn)行程序更新。
圖 1 陣列信號(hào)源架構(gòu)圖
信號(hào)產(chǎn)生單元的固件更新,實(shí)質(zhì)上就是將在上位機(jī)編譯產(chǎn)生的目標(biāo)程序燒錄到信號(hào)產(chǎn)生單元MCU的Flash指定空間上。MCF52259的目標(biāo)文件是標(biāo)準(zhǔn)格式的S19文件,這是一個(gè)ASCII碼文件,需要將內(nèi)容轉(zhuǎn)換成十六進(jìn)制進(jìn)行傳輸。根據(jù)文件結(jié)構(gòu)定義,S19文件分為若干個(gè)固定大小的幀,每幀內(nèi)容包括幀頭、長度、目標(biāo)地址、有效數(shù)據(jù)與校驗(yàn)和[2]。在程序更新前,上位機(jī)將對S19文件進(jìn)行預(yù)處理,給每幀添加一個(gè)編號(hào)。信號(hào)產(chǎn)生單元可以通過編號(hào)判斷文件中幀的完整性,通過校驗(yàn)和判斷幀內(nèi)數(shù)據(jù)的完整性,如圖2所示。
圖 2 S19文件結(jié)構(gòu)
程序更新過程中,上位機(jī)與節(jié)點(diǎn)板之間進(jìn)行多次數(shù)據(jù)傳輸,每次傳送一個(gè)幀。節(jié)點(diǎn)板將內(nèi)容轉(zhuǎn)發(fā)給各個(gè)信號(hào)產(chǎn)生單元。信號(hào)產(chǎn)生單元接收到數(shù)據(jù)后需要進(jìn)行校驗(yàn)與反饋,僅當(dāng)校驗(yàn)通過才能執(zhí)行寫入操作,對校驗(yàn)失敗的幀應(yīng)進(jìn)行重發(fā),確保固件的完整性。圖3是上位機(jī)工作流程圖。
圖 3 上位機(jī)工作流程圖
信號(hào)產(chǎn)生單元工作流程如圖4(a)所示,正常的更新過程流程如圖4(b)所示。對信號(hào)產(chǎn)生單元而言,整個(gè)操作流程涉及到Flash擦寫操作,如果操作過程中某個(gè)環(huán)節(jié)出問題,比如上位機(jī)發(fā)送過程中出錯(cuò)且無法恢復(fù)時(shí),將會(huì)使所有信號(hào)源的固件失效。這里采用備份最小系統(tǒng)的方法來加強(qiáng)系統(tǒng)的可靠性。信號(hào)產(chǎn)生單元通過串口接收到更新指令后進(jìn)入更新模式。更新模式過程中,首先備份一個(gè)最小系統(tǒng)到SRAM 中,然后執(zhí)行具體的更新操作。最小系統(tǒng)代碼中包含了必要的硬件初始化設(shè)置、串口收發(fā)等操作,能獨(dú)立完成程序更新任務(wù),更重要的是,它也能實(shí)現(xiàn)自我備份和還原,防止最小系統(tǒng)在更新過程中遭到破壞。當(dāng)更新操作中檢測到不可恢復(fù)錯(cuò)誤時(shí),比如主機(jī)失去響應(yīng),看門狗程序?qū)⒈患せ睿钚∠到y(tǒng)被寫回Flash中,系統(tǒng)下次加電時(shí)直接啟動(dòng)最小系統(tǒng),避免系統(tǒng)因更新失敗而無法啟動(dòng)。正常更新過程中,因?yàn)镕lash會(huì)被擦除,所以期間需要運(yùn)行的代碼應(yīng)該被拷貝到內(nèi)存上,然后通過修改程序指針的方法從內(nèi)存中運(yùn)行代碼[2-3],完成擦寫Flash、與主機(jī)通信接收新程序段等任務(wù)。接收過程中,程序?qū)⑼瓿尚r?yàn)和比對、幀序號(hào)比對,一旦比對出錯(cuò)將生成信息反饋到主機(jī)。
圖 4(a) 信號(hào)產(chǎn)生單元工作流程
圖 4(b) 更新操作流程
實(shí)際測試中,我們對六路信號(hào)產(chǎn)生單元同時(shí)進(jìn)行了固件更新,其中S19文件大小為183.8 kB,每幀長度為138 byte,由于每個(gè)字符的ASCII碼占用8 bit,轉(zhuǎn)換為十六進(jìn)制數(shù)后空間減半,算出實(shí)際幀數(shù)為682幀。最小系統(tǒng)在其中占用了約40幀空間,即 5 kB左右大小,相對于 512 kB大小的 Flash ROM來說完全可以接受。
傳輸速率方面,為保證上位機(jī)發(fā)送數(shù)據(jù)后信號(hào)產(chǎn)生單元有足夠時(shí)間進(jìn)行處理,每幀發(fā)送結(jié)束后上位機(jī)都進(jìn)行延時(shí)。起始幀因?yàn)橐却鼺lash擦寫完成還要額外延時(shí)5 s,其余每幀發(fā)送完畢后延時(shí)20 ms,總耗時(shí)小于20 s。
本文方法在線進(jìn)行,無需外加電路,僅通過已有的硬件鏈路就可完成,避免用仿真器對硬件進(jìn)行逐個(gè)操作,它能將本來需要幾個(gè)小時(shí)甚至數(shù)天才能完成的大量繁瑣工作在幾分鐘內(nèi)完成,節(jié)省時(shí)間、人力和硬件資源。在燒寫過程中備份最小系統(tǒng)的設(shè)計(jì)能增強(qiáng)可靠性,有效降低系統(tǒng)升級(jí)維護(hù)風(fēng)險(xiǎn)。這種方法已在工程項(xiàng)目中得到應(yīng)用,并適用于具有類似架構(gòu)的其他大型系統(tǒng)。
[1] Freescale. MCF52259 ColdFire Integrated Microcontroller Reference Manual[M].2009.
[2] Freescale. Implement UART Boot-loader On Coldfire V1 Products[M].2010
[3]Freescale.TN259:Placing Varibles and Code in ROM Using the Codewarrior Linker Configuration File for ColdFire Architecture[M].2008.
[4] Freescale. ColdFire編程參考手冊[M].2009.
[5]諶利. 深入淺出ColdFire系列32位嵌入式微處理器[M].北京: 北京航空航天大學(xué)出版社,2009.