陳洶,唐凱
(1.東南大學軟件學院,江蘇南京210096;2.國網電力科學研究院穩定技術研究所,江蘇南京210003;3.國電南瑞科技股份有限公司,江蘇南京210016)
電力系統穩定控制裝置的程序大部分都是根據各個客戶的不同要求而進行定制,這樣就存在程序要求不停更改的問題,那么程序更改的方便性就尤為重要。最老一代的穩定控制裝置產品需要將只讀內存(ROM)芯片取下來,利用專門的編程器來燒寫程序,那么現場人員要更改程序時必須攜帶一個專門的編程工具。隨著程序芯片的發展,原來的ROM芯片被Flash芯片所替代,同時程序的更改方法也發生了改變,此時大部分CPU都是利用國際標準測試協議(JTAG)口來燒寫程序,雖然不再需要將程序芯片取下,但是要專用的JTAG下載工具來下載程序。由于每一種CPU的JTAG下載工具不同,因此當裝置上采用不同的CPU時,現場服務人員需要攜帶不同的JTAG專用下載工具,而且如果工程人員沒有帶專用工具,更改程序就不可能進行。以上2種以前的程序改寫方案都存在著下載不方便,需要專用工具,以及專用工具價格不菲等問題。現在很多的設備和儀器都采用系統可編程序(ISP)或在線可編程序(IAP)的程序更改方法,ISP和IAP方案都不需要將程序芯片脫離系統而且不需要專用的下載工具即可方便地下載程序到系統中。所以,在新一代的電力系統穩定控制裝置中,采用了支持IAP功能可以進行在線編程的ST公司的新一代ARM9系列中的STR912控制器和ATMEL公司ARM9系列中的AT91RM9200控制器。而且將單一CPU的IAP方案進行了改進,使整個裝置的所有不同型號不同廠家的CPU都通過一個標準以太網接口加載程序,如果現場需要的話,甚至可以遠程加載程序。這樣現場工程人員不需要任何的專業工具即可完成不同CPU的程序更改,不但降低了成本而且簡化了工作的復雜度。
ISP的實現相對要簡單一些,一般通用做法是內部的存儲器可以由上位機的軟件通過串口來進行改寫。對于單片機來講可以通過SPI或其他串行接口接收上位機傳來的數據并寫入存儲器中。所以,即使將芯片焊接在電路板上,只要留出和上位機接口的這個串口,就可以實現芯片內部存儲器的改寫,而無須再取下芯片。
IAP的實現相對要復雜一些,在實現IAP功能時,單片機內部一定要有2塊存儲區,一般一塊被稱為BOOT區,另外一塊被稱為存儲區。單片機上電運行在BOOT區,如果有外部改寫程序的條件滿足,則對存儲區的程序進行改寫操作。如果外部改寫程序的條件不滿足,程序指針跳到存儲區,開始執行放在存儲區的程序,這樣便實現了IAP功能。
在一般裝置的CPU更改程序時,編程器是必不可少的裝置。仿真、調試完的程序需要借助編程器燒到單片機內部或外接的程序存儲器中。普通的編程器價格從幾百元到幾千元不等,對于一般的單片機用戶來說還是一筆不小的開支。另外,在開發過程中,程序每改動一次就要拔下電路板上的芯片編程后再插上,這樣不但麻煩也很容易對芯片和電路板造成損傷;在程序需要升級做改動時,必須將設備返廠或是技術人員到現場操作,既不方便也造成成本浪費,利用JAG接口除了不需要將程序芯片脫離電路板外,其他的問題全部存在。
ISP技術的優勢是不需要編程器就可以進行程序更改,程序芯片可以直接焊接到電路板上,調試結束即成成品,免去了調試時由于頻繁地插入取出芯片對芯片和電路板帶來的不便。
IAP技術是從結構上將Flash存儲器映射為2個存儲體,當運行一個存儲體上的用戶程序時,可對另一個存儲體重新編程,之后將程序從一個存儲體轉向另一個。
ISP的實現一般需要很少的外部電路輔助實現,而IAP的實現更加靈活,通過專門設計的固件程序來編程內部存儲器,可通過現有的Internet或其他通信方式很方便地實現遠程升級和維護。
老的穩定控制裝置更改程序存在以下幾個缺點。(1)編程工具不統一。每一個種類的CPU都需要一個專用編程工具,而這就限制裝置開發的時候必須盡量地選擇統一的CPU,而不能根據裝置的功能選取最適合的CPU。(2)接口不統一。每一種CPU的JTAG的接口協議都不相同,因此每個CPU都需要一個獨立的下載程序接口,那么裝置的所有具有CPU的模件都需要給出一個獨立的接口為下載程序使用。(3)必須重新開關電。因為每個下載程序的接口需要接專用的編程工具,而有些甚至需要更改硬件環境才能使用,所以裝置必須重新開關電才可以,而這一點在電力系統的保護類裝置上尤為重要,裝置的開關電過程需要嚴格的手續才能進行。ISP和IAP在其他裝置上的應用也有一個問題就是一個CPU要預留一個專門的ISP或IAP接口,同時舊有的裝置在CPU與CPU的通信上采用的都是并行總線的結構,這種接口需要很多的硬件走線配合,比如一個16位數據寬度的總線最少需要35條以上的走線連接才能完成。這些問題在新一代的穩定控制裝置得到了很好地解決。裝置本身具有以太網接口,如果有需要甚至可以遠程更新程序。
新一代的穩定控制裝置采用了意法半導體公司的ARM9系列芯片中的STR912和ATMEL公司ARM9系列中的AT91RM9200。STR912控制器內部具有2塊大小分別為512 KB和32 KB的閃存(Flash),每一塊Flash都可以單獨編程配置為引導區。程序可以從其中的一塊Flash中讀取數據,同時寫數據到另外一塊Flash中去,這樣就為IAP的使用創造了條件。而AT91RM9200控制器同樣可以使用IAP下載程序。裝置由4個CPU協同工作,4個CPU之間互相配合,完成各自的IAP功能。工作原理示意如圖1所示。
裝置由CPU1經過一個標準的以太網接口和PC機相連,通過在PC機上開發的軟件來對裝置的所有CPU進行程序更新。裝置中的CPU1到CPU4的IAP過程全部都是由此接口實現,那么裝置的對外接口即可以統一,而且裝置內部也不需要為IAP留下專用的接口,從而也減少了裝置的硬件開支。

圖1 工作原理示意
CPU1和CPU2之間通過全雙工的LVDS接口相連,CPU2和CPU3、CPU4之間通過SPI串行接口相連。裝置CPU與CPU之間摒棄了原先的并行總線的連接方案,使它們之間的互聯接線變得簡單,如CPU1和CPU2之間的LVDS接口只有4條連接線,而CPU2和CPU3或CPU4之間的SPI接口也同樣只有4條連接線,而且SPI接口就是直接2個CPU相連,連物理芯片都可以不要。這樣就降低了內部通信故障的概率。同時,每個CPU之間的通信回路全部是兩回,互為熱備用,當有一路出現問題時,另外一路的數據備用,因此其可靠性也是并行總線的2倍。
速度方面以太網通信速度為10/100 Mbps,裝置中CPU1和CPU2之間的LVDS接口收發可以同時進行,單向速率最快可達32 Mbps;而CPU2和CPU3、CPU4之間SPI串行接口速率最大可以達到4 Mbps。裝置的速度瓶頸是4 Mbps,以此速度計算,每秒可以傳輸400 KB的程序代碼,一般情況下程序量不會超過256 KB,即正常的加載程序時間在1s內即可完成,速度大大滿足使用要求。
IAP在電力系統的其他設備中早已得到了很多應用,但一直在保護類設備中沒有大范圍使用,原因就是擔心IAP方案的可靠性。在程序正常運行的情況下非法進入IAP程序會導致裝置的程序被非法更新,以至引起裝置的誤動或拒動,從而引發大事故。新一代的穩定控制裝置為了防止這個問題的發生,對IAP程序的執行除了軟件上的嚴格協議外,在硬件上還進行了特殊狀態的處理,如圖2所示,在每個CPU的外圍都有一個可編程的邏輯器件復雜可編程邏輯器件(CPLD)或現場可編程門列陣(FPGA),這個芯片上的2個管腳和CPU的2個IO接口相連,當要執行IAP程序時,這2個管腳必須滿足一定的狀態,否則IAP過程無法進行,而這2個管腳不受CPU的控制,只有CPLD/FPGA接收到指定的通信命令后才會改變這2個管腳的狀態。因此,即使程序因為某種原因進入了非法狀態而進入了IAP程序的執行過程,但因為外部的2個不受CPU控制的管腳狀態不滿足,所以不會執行IAP程序。

圖2 裝置的特殊處理
裝置的IAP軟件根據不同的CPU,設計也相應不同,這里可區分為2類:CPU1和CPU2的IAP程序相同,它們除了自己的程序IAP外同時還要根據通信協議的內容來相應地給它們下一級的CPU下發程序,配合下一級的IAP過程;CPU3和CPU4的IAP過程相同,只需要處理進入IAP狀態,執行IAP程序即可。
IAP程序本身又可以分為2個部分,第一部分為IAP下載程序(如圖3所示),程序存在于BOOT Flash中。CPU上電或復位后進入BOOT區的Flash,如果不滿足IAP條件(程序和硬件),那么執行重新映射Flash的指令然后跳轉進入工程程序區的Flash執行;若CPU在上電或復位后監測到了通信口有IAP下載指令同時2個指定的IO口狀態為IAP使能,那么就會進入IAP下載程序過程,當程序下載結束后CPLD/FPGA也會根據通信指令改變2個IO管腳狀態為IAP禁止,而CPU也會執行重映射Flash的指令然后跳轉進入工程程序區執行新的工程程序。第二部分為IAP引導程序(如圖4所示),這段程序在工程程序代碼中執行,也就是在工程程序Flash區執行。當正常的工程程序執行時,IAP引導程序監測通信口是否有IAP下載指令,如果有IAP下載指令,就直接向CPLD/FPGA發送復位指令,使CPU重新復位進入BOOT區Flash中執行IAP下載程序。如果是CPU1和CPU2,因為可能不是自己需要IAP而是下一級需要IAP,所以對于CPU1和CPU2還可能是執行轉發數據指令而不是執行IAP過程。

圖3 IAP下載程序

圖4 IAP引導程序
IAP加載程序的方法不需要專用工具,甚至可以通過網絡遠程更新程序,它將是以后設備、儀表等裝置更新程序的最常用方法,文中把此方法利用到了新一代多CPU的電力系統穩定控制裝置中,同時解決了多CPU統一IAP和IAP方案加載不可靠的問題。
[1] STR9 In Application Programming Using UART[M].America:ST,2007.
[2] STR91x編程參考手冊V1.0[S].上海:上海沁科信息技術有限公司,2006.
[3] 姜曉梅,李祥和,任朝榮.基于ARM的IAP在線及遠程升級技術[J].計算機應用,2008,28(2):519-521.
[4] 肖瑩瑩,殷瑞祥,鄭于樺,等.單片機ISP/IAP系統設計[J].電子與封裝,2006,6(3):29-32.
[5] 余新拴,李建忠.C51與匯編語言混合編程在單片機IAP中的應用[J].現代電子技術,2005,28(23).