<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ATMEGA128單片機的軟件遠程升級

ATMEGA128單片機的軟件遠程升級

作者: 時(shí)間:2013-12-28 來(lái)源:網(wǎng)絡(luò ) 收藏

ATMEGA128單片機的軟件遠程升級

  圖3給出了代碼寫(xiě)入主程序流程圖.當代碼幀下載到基站1的控制后,當檢測到幀類(lèi)型為升級代碼幀“Y”時(shí),觸發(fā)代碼升級程序,程序由應用程序區段跳轉至bootloader程序區段.在此區段可以對應用程序區段進(jìn)行讀、寫(xiě)等操作,同時(shí)接收通過(guò)USART串口不斷傳來(lái)的代碼幀.

  在代碼開(kāi)始寫(xiě)入前,首先將存于EEPROM中的寫(xiě)入操作開(kāi)始標志位置位,然后判斷操作控制字以檢測是要進(jìn)行哪一種操作.若是進(jìn)行寫(xiě)入操作,則調用寫(xiě)入操作子程序.圖4給出了代碼寫(xiě)入子程序流程圖.首先將代碼寫(xiě)入緩沖區,將要寫(xiě)入的程序代碼的頭兩個(gè)字節讀入專(zhuān)用于IAP操作的數據存儲寄存器R0:R1,同時(shí)Z寄存器指針的低8位指向代碼將要寫(xiě)到的指定緩沖區的位置.然后將SPMCR控制寄存器的SPMEN位置1,這樣這兩個(gè)字節的代碼就被寫(xiě)入到緩沖區中指定位置.寫(xiě)下兩個(gè)字節時(shí)將Z寄存器指針加2,重復上述操作;依次進(jìn)行直到將代碼幀中的代碼數據全部寫(xiě)入緩沖區.然后判斷寫(xiě)入緩沖區的代碼是否寫(xiě)滿(mǎn)代碼計數器是否為128.緩沖區寫(xiě)滿(mǎn)后要執行頁(yè)擦除操作.執行頁(yè)擦除每次可擦除1頁(yè)(128words),將要擦除的頁(yè)地址存入Z寄存器高8位,將SPMCR控制寄存器的SPMEN和PGERES位置1,擦除完畢后這兩位會(huì )被硬件清0.

  執行頁(yè)寫(xiě)操作時(shí)每次只可寫(xiě)入1頁(yè),將Z寄存器指針指向要寫(xiě)入的應用程序區段代碼頁(yè),將SPMCR控制寄存器的SPMEN和PGWRT位置1.當寫(xiě)完后這兩位會(huì )被硬件清0同時(shí)頁(yè)緩沖區中內容被清除.

  升級代碼傳送全部完成后,監控終端會(huì )發(fā)出一幀操作控制字為FF的代碼幀,升級節點(diǎn)收到后將存于EEPROM中的寫(xiě)入操作開(kāi)始標志位置位清0.退出升級操作,并由bootloader區段返回應用程序區段,完成對該節點(diǎn)軟件的升級.

  2 IAP升級可靠性和保密性的考慮

  系統在進(jìn)行IAP升級過(guò)程中不免受到外界干擾,如系統突然掉電或線(xiàn)路故障等意外事故而導致代碼傳輸失敗的情況,此時(shí)要有一套可靠的軟硬件機制來(lái)保障IAP升級的正常運作,以下介紹本系統所采取的一些措施.

  (1)消除傳輸過(guò)程中產(chǎn)生的誤碼

  下載代碼的準確性直接關(guān)系到系統能否正常運行.本系統采用大回路比對的方式.這種方式雖然使升級過(guò)程時(shí)間加長(cháng),但可以保證代碼準確無(wú)誤,并且回傳的代碼幀同時(shí)可作為IAP升級的握手信號.當然也可以采用CRC等其它方式解決.

ATMEGA128單片機的軟件遠程升級

  (2)IAP升級過(guò)程中系統掉電情況分析

  系統設計必須要避免系統掉電等類(lèi)似情況所造成的系統運行故障的發(fā)生,即使發(fā)生了也應將損失降低到最低限度.在IAP升級過(guò)程中,可通過(guò)軟件方式解決.在應用程序區段,用第一條語(yǔ)句跳轉至bootloader區段,并在bootloader區段的程序中,檢驗寫(xiě)碼操作開(kāi)始標志位此標志位被寫(xiě)入EEPROM中 .如未被置位,則跳轉至應用程序區段繼續運行應用程序區段中的程序,否則繼續守候在bootloader區段直到升級完成.

  (3)下載代碼的保密性

  為防止沒(méi)有寫(xiě)碼權限的用戶(hù)對代碼的操作,實(shí)際運用中可對bootloader程序段加入權限校驗程序.根據不同的節點(diǎn)設置了不同的加密碼,以及特權碼(供系統設計或管理人員使用),并將密碼存入EEPROM中,以便隨時(shí)更改密碼.

  該方案已成功應用于上海地鐵調度指揮系統中,實(shí)現了基于 IAP軟件的升級,并通過(guò)上述可靠性和保密性的設計,使IAP軟件升級的可靠性得到了保證.通過(guò)該技術(shù)大大提高了系統的可維護性,減少了產(chǎn)品開(kāi)發(fā)時(shí)間,簡(jiǎn)化了產(chǎn)品制造流程,并大大降低了現場(chǎng)升級的困難,實(shí)現了在不影響節點(diǎn)正常工作的情況下對該節點(diǎn)的軟件升級.


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>