0 引言 分散型控制系統中的現場終端一般由控制器和各檢測模塊構成,它們之間通過一定的通信網絡建立數據的交換鏈路。這種系統具有高可靠、開放性、靈活性、協調性、易維護等優點。然而,該分散型系統也具有終端數量多、分布范圍廣的特點。一旦終端系統軟件存在缺陷或用戶提出新的功能和指標要求時,其升級、維護的工作量和成本都非常大。本文針對上述情況,設計了一種方便、靈活、快速及穩定地對MCU節點進行在線更新的機制。基于LPC11C24微控制器組成的CAN網絡,采用IAP編程技術(In Application Programming),實現了對目標節點MCU的軟件更新功能。 1 LPC11C24單片機和CAN總線 恩智浦半導體(NXP)推出業界首款內嵌易用型片上CANopen驅動,集成高速CAN物理層收發器的微控制器LPC11C22和LPC11C24。作為一種獨特的系統級封裝解決方案,LPC11C22和LPC11C24集成了TJF1051CAN收發器,在低成本LQFP48封裝中實現了完整的CAN功能。 控制器局域網絡(Controller Area Network,CAN)是由研發和生產汽車電子產品著稱的德國BOSCH公司開發了的,并最終成為國際標準(ISO11898)。它是國際上應用最廣泛的現場總線之一。近年來,其所具有的高可靠性和良好的錯誤檢測能力受到重視,被廣泛應用于汽車計算機控制系統和環境溫度惡劣、電磁輻射強和振動大的工業環境。 2 在線更新機制架構 系統架構主要由2部分組成:由各個MCU組成的CAN網絡;安裝在PC機上的USB-CAN通信卡,可以使PC機連上CAN網絡,進行數據通信,系統構架如圖1所示。軟件也包括2部分:運行在PC機的上位機軟件,提供用戶操作界面,將應用程序代碼通過CAN總線發送給節點;運行在節點的啟動程序,主要是響應下載命令,接受代碼,把代碼寫入FLASH,引導應用程序。 3 在線更新機制的設計 3.1 IAP編程技術 IAP是應用在FLASH程序存儲器的一種編程模式,即在某段程序的控制下完成對FLASH的讀/寫操作,可以控制對某段、某頁、甚至某個字節的讀寫操作。 LPC11C24單片機支持并提供9條IAP命令: ①準備寫操作的扇區; ②將RAM內容復制到FLASH; ③擦除扇區; ④扇區查空; ⑤讀器件ID; ⑥讀Boot代碼版本; ⑦比較; ⑧重新調用ISP; ⑨讀UID。 3.2 FLASH空間分配 LPC11C24有32KB的FLASH空間,共分為8個扇區,每個扇區的大小為4KB。為了使程序更新和應用程序更加獨立,本文將FLASH空間分為3個區,分別為啟動程序區,應用程序區,用戶數據區。 其中①啟動程序是一段特定的駐留代碼,專門用于接收來自主機新的代碼,將其燒寫到相應的FLASH空間,完成后跳轉到應用代碼區去執行新的程序,代碼比較少,編譯生成的映像文件小于4KB,每次系統上電或重啟后先執行啟動程序。 ②應用程序是真正實現用戶功能的代碼。 ③用戶數據區是用于存儲應用程序的一些設置和數據。 3.3 中斷向量表重映射與復制 LPC11C24支持32個向量中斷,中斷向量表默認位于FLASH的第一個4KB空間,地址從0x00000000~0x00000079。按照前面的設計,啟動程序占用第一個4KB的空間,當跳轉到應用程序時,實際的中斷向量表是位于0x00001000~0x00001079的空間。但LPC11C24系列的單片機不支持自定義中斷向量表的地址,只支持將中斷向量表從FLASH重映射到RAM。 為了能讓應用程序實現正常的中斷處理,啟動程序在跳轉到應用程序之前還需要將應用程序的中斷向量表復制并映射到RAM[10]。 代碼實例如下: 3.4 啟動程序和應用程序的設計與固化 程序都在Keil for ARM集成環境下編寫并編譯。 首先在Keil軟件下新建基于LPC11C24的工程,并配置FLASH和SRMA的起始地址和大小。具體如表2所示。 3.5 啟動程序與應用程序之前的跳轉 在啟動程序中定義應用程序的地址,#defineAPP_CODE_ADDR (0x00001000),程序跳轉的代碼采用匯編語言編寫,代碼實例如下: 3.6 啟動代碼的實現流程當用戶需要更新應用代碼時,PC的上位機軟件通過CAN總線向各種終端發送升級命令。而終端開機后自動運行啟動程序,啟動程序會檢測沒有升級命令,如果有的話,則接收應用程序代碼,直到完成整個升級。如果沒有,則運行應用程序。實現的流程圖如圖2,圖3所示。 4 結語 本文設計的在線更新機制結合了IAP編程技術和CAN通信技術,在單片機內部采用了靈活的FLASH空間架構,實現了CAN總線的在線更新機制。該設計方案已經成功應用到實際項目中,實踐證明,該方法操作簡便、靈活、可靠,具有一定的實際價值。 |