<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è) > 嵌入式系統 > 設計應用 > 基于IAP技術(shù)的ADuC702x固件升級方案

基于IAP技術(shù)的ADuC702x固件升級方案

作者: 時(shí)間:2011-05-22 來(lái)源:電子產(chǎn)品世界 收藏

  更新固件應用程序流程

本文引用地址:http://dyxdggzs.com/article/119691.htm

  更新固件應用程序均指在程序運行于Bootloader區完成。若第一次只有Bootloader程序,而沒(méi)有用戶(hù)程序時(shí),程序自動(dòng)停留在Bootloader區。若程序正運行于用戶(hù)區情況時(shí),要求通過(guò)串口發(fā)送某條命令給MCU(微控制器),MCU收到指令后,更新Flash/EE存儲器中進(jìn)入Bootloader標志部分數據,使之有效,然后通過(guò)軟件復位(通常稱(chēng)之為“熱啟動(dòng)”)使程序從0x00000000位置啟動(dòng),按上一節“程序啟動(dòng)過(guò)程描述”,則此時(shí)啟動(dòng)后,程序必定留在Bootloader區。

  在Bootloader區時(shí),可以通過(guò)發(fā)送“”(“IAP”命令字符由Bootloader代碼決定)命令來(lái)更新程序,當MCU接收到“IAP”命令后,修改用戶(hù)程序是否有效標志值為無(wú)效,返回“OK”字符,然后程序以查詢(xún)方式接收一個(gè)數據包(標志該數據包為數據包0),該數據為接下來(lái)將接收到的程序數據包長(cháng)度信息,并同時(shí)包含校驗信息,數據包0結構如圖6所示,如果正確接收數據,返回兩個(gè)字節(0xED,0xFA);否則返回(0x12,0x34),并結束IAP命令,回到Bootloader命令狀態(tài)。

  接下來(lái)根據固件程序數據包長(cháng)度依次接收各個(gè)數據包(標識這些數據包為數據包1、數據包2,??,數據包n,其中n等于上一個(gè)數據包接收到的固件程序數據包長(cháng)度(length)),這里每個(gè)數據包結構均一樣,結構如圖7所示,數據包由兩部分組成,256B的固件程序數據和兩個(gè)字節的CRC16校驗碼,一個(gè)數據包總長(cháng)度為258B,在對固件程序打包時(shí),若包數據不滿(mǎn)256B,那么在包后面添加0xFF,直至256B。

  程序中每接收數據包1~數據包n中任何一個(gè)數據包時(shí),若接收正確,則返回(0xED,0xFA),同時(shí)將數據寫(xiě)入對應Flash存儲單元;否則返回(0x12,0x34),并結束IAP命令,回到Bootloader區等待IAP命令狀態(tài)。若所有數據包接收正確,而且寫(xiě)入Flash正確,則修改用戶(hù)程序有效標志,并返回(0xED,0xFA),否則返回(0x12,0x34),并結束IAP命令,回到Bootloader區等待IAP命令狀態(tài)。

  待所有數據包接收完畢,并寫(xiě)Flash結束后,再給MCU發(fā)送“REBOOT”熱啟動(dòng)命令即可完成固件重新運行。

  IAP更新固件應用程序流程如圖8所示。

  下面描述如何更新User Application固件應用程序。以下所有提到的發(fā)送和返回的命令及數據均指十六進(jìn)制格式,除非特殊說(shuō)明。

 ?、盡CU正常工作,使用如下命令使MCU回到了Bootloader區

  發(fā)送:(自定義命令)

  返回:(自定義返回)

 ?、舶l(fā)送:0x49 0x41 0x50 0x0D

  返回:0x49 0x41 0x50 0x0D 0x0A 0x4F 0x4B 0x0D 0x0A 0x5C 0x3E

  圖9 固件程序數據包

 ?、嘲l(fā)送數據包0,數據包0結構如圖6所示。

  返回(兩個(gè)字節):

  (1)0xED 0xFA(正確接收),跳到步驟4;

  (2)0x12 0x34,錯誤,跳到步驟2。

 ?、锤鶕祿?中所包含的固件應用程序數據包長(cháng)度信息,發(fā)送固件應用程序數據包1~n,固件應用程序按圖9方式打包,若包不滿(mǎn)256B,則在后面依次填充0xFF。



關(guān)鍵詞: IAP ADuC702x 201105

評論


相關(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>