ATMEGA128單片機的軟件遠程升級
圖3給出了代碼寫入主程序流程圖.當代碼幀下載到基站1的控制單片機ATMEGA128后,當檢測到幀類型為升級代碼幀“Y”時,觸發代碼升級程序,程序由應用程序區段跳轉至bootloader程序區段.在此區段可以對應用程序區段進行讀、寫等操作,同時接收通過USART串口不斷傳來的代碼幀.
在代碼開始寫入前,首先將存于EEPROM中的寫入操作開始標志位置位,然后判斷操作控制字以檢測是要進行哪一種操作.若是進行寫入操作,則調用寫入操作子程序.圖4給出了代碼寫入子程序流程圖.首先將代碼寫入緩沖區,將要寫入的程序代碼的頭兩個字節讀入專用于IAP操作的數據存儲寄存器R0:R1,同時Z寄存器指針的低8位指向代碼將要寫到的指定緩沖區的位置.然后將SPMCR控制寄存器的SPMEN位置1,這樣這兩個字節的代碼就被寫入到緩沖區中指定位置.寫下兩個字節時將Z寄存器指針加2,重復上述操作;依次進行直到將代碼幀中的代碼數據全部寫入緩沖區.然后判斷寫入緩沖區的代碼是否寫滿代碼計數器是否為128.緩沖區寫滿后要執行頁擦除操作.執行頁擦除每次可擦除1頁(128words),將要擦除的頁地址存入Z寄存器高8位,將SPMCR控制寄存器的SPMEN和PGERES位置1,擦除完畢后這兩位會被硬件清0.
執行頁寫操作時每次只可寫入1頁,將Z寄存器指針指向要寫入的應用程序區段代碼頁,將SPMCR控制寄存器的SPMEN和PGWRT位置1.當寫完后這兩位會被硬件清0同時頁緩沖區中內容被清除.
升級代碼傳送全部完成后,監控終端會發出一幀操作控制字為FF的代碼幀,升級節點收到后將存于EEPROM中的寫入操作開始標志位置位清0.退出升級操作,并由bootloader區段返回應用程序區段,完成對該節點軟件的升級.
2 IAP升級可靠性和保密性的考慮
系統在進行IAP升級過程中不免受到外界干擾,如系統突然掉電或線路故障等意外事故而導致代碼傳輸失敗的情況,此時要有一套可靠的軟硬件機制來保障IAP升級的正常運作,以下介紹本系統所采取的一些措施.
(1)消除傳輸過程中產生的誤碼
下載代碼的準確性直接關系到系統能否正常運行.本系統采用大回路比對的方式.這種方式雖然使升級過程時間加長,但可以保證代碼準確無誤,并且回傳的代碼幀同時可作為IAP升級的握手信號.當然也可以采用CRC等其它方式解決.
(2)IAP升級過程中系統掉電情況分析
系統設計必須要避免系統掉電等類似情況所造成的系統運行故障的發生,即使發生了也應將損失降低到最低限度.在IAP升級過程中,可通過軟件方式解決.在應用程序區段,用第一條語句跳轉至bootloader區段,并在bootloader區段的程序中,檢驗寫碼操作開始標志位此標志位被寫入EEPROM中 .如未被置位,則跳轉至應用程序區段繼續運行應用程序區段中的程序,否則繼續守候在bootloader區段直到升級完成.
(3)下載代碼的保密性
為防止沒有寫碼權限的用戶對代碼的操作,實際運用中可對bootloader程序段加入權限校驗程序.根據不同的節點設置了不同的加密碼,以及特權碼(供系統設計或管理人員使用),并將密碼存入EEPROM中,以便隨時更改密碼.
該方案已成功應用于上海地鐵調度指揮系統中,實現了基于ATMEGA128 IAP軟件的升級,并通過上述可靠性和保密性的設計,使IAP軟件升級的可靠性得到了保證.通過該技術大大提高了系統的可維護性,減少了產品開發時間,簡化了產品制造流程,并大大降低了現場升級的困難,實現了在不影響節點正常工作的情況下對該節點的軟件升級.
評論