本發(fā)明涉及在線程序更新方法,尤其是涉及基于STM32 IAP的在線程序更新方法。
背景技術(shù):
目前,傳統(tǒng)的程序更新方法多為通過仿真器進行下位機電路板的程序更新。通過仿真器進行下位機電路板的程序更新,需要使用專業(yè)的仿真器,價格昂貴;程序更新不僅需要使用專業(yè)的編程軟件,而且需要設定MCU型號,專業(yè)性較強;另外此種方式還需要拆卸機箱,所需人力成本較高。
技術(shù)實現(xiàn)要素:
本發(fā)明目的在于提供一種基于STM32 IAP的在線程序更新方法。
為實現(xiàn)上述目的,本發(fā)明采取下述技術(shù)方案:
本發(fā)明所述基于STM32 IAP的在線程序更新方法,包括下述步驟:
基于STM32IAP的在線程序更新方法,其特征在于:包括下述步驟:
第一步、在上位計算機中加載需要更新程序的下位機電路板的應用程序hex文件并加載需要更新程序的下位機電路板ID,上位計算機解析所述應用程序hex文件結(jié)構(gòu),從中提取需要寫入所述下位機flash的十六進制數(shù)據(jù),并從加載的hex文件名中提取所述下位機電路板代號,然后將所述十六進制數(shù)據(jù)和需要更新程序的下位機電路板ID通過以太網(wǎng)通信傳送給微控制器;
第二步、所述微控制器接收到所述上位計算機傳送的指令后,開啟所述下位機程序更新時序;首先通過CAN指令向需要更新程序的下位機電路板發(fā)送查詢電路板代號指令,獲取所述下位機電路板代號并和第一步中所述的下位機電路板代號進行對比,如果不一致則向上位計算機報告hex文件加載錯誤,如果一致,則通過CAN指令向所述下位機電路板下發(fā)程序更新相關指令;
第三步、所述下位機電路板MCU的flash分為bootloader程序存放區(qū)、應用程序存放區(qū)、應用程序標志位存放區(qū);所述下位機電路板MCU上電后首先運行bootloader程序,通過bootloader程序接收所述微控制器程序更新相關指令,對本下位機進行flash解鎖定、應用程序擦除、應用程序數(shù)據(jù)下傳、應用程序數(shù)據(jù)校驗、flash鎖定、應用程序跳轉(zhuǎn),將所述十六進制數(shù)據(jù)寫入應用程序存放區(qū),每一條指令寫入4個字節(jié)數(shù)據(jù)或8個字節(jié)數(shù)據(jù),并將已寫入應用程序存放區(qū)的數(shù)據(jù)進行異或校驗,與所述微控制器的校驗結(jié)果進行對比,一致則校驗通過,向應用程序標志位存放區(qū)寫入更新成功標志字,不一致則校驗不通過。
本發(fā)明解決了現(xiàn)有通過仿真器進行下位機電路板程序更新所存在的不足。下位機電路板程序需要更新時,工作人員只需使用U盤攜帶需更新的下位機電路板的程序hex文件,直接在上位計算機上進行操作,通過以太網(wǎng)、CAN通信進行下位機電路板的程序更新,方便快捷。具體表現(xiàn)為:
1、本發(fā)明通過對比從加載的hex文件的文件名中提取的電路板代號與向需要更新程序的下位機電路板發(fā)送查詢電路板代號指令獲取電路板代號,檢驗加載的hex文件是否正確,解決了由于人為加載hex文件錯誤導致的程序更新錯誤問題。
2、本發(fā)明通過在程序更新過程中解鎖flash、在程序更新完畢后鎖定flash,避免了存放程序的flash被誤擦除的風險。
附圖說明
圖1是本發(fā)明的硬件構(gòu)架示意圖。
圖2是本發(fā)明所述下位機電路板MCU的flash空間分配圖。
圖3是本發(fā)明所述下位機電路板bootloader程序流程圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明的實施例作詳細說明,本實施例在以本發(fā)明技術(shù)方案為前提下進行實施,給出了詳細的實施方式和具體的操作過程,但本發(fā)明的保護范圍不限于下述實施例。
本發(fā)明所述基于STM32 IAP的在線程序更新方法,硬件設備如圖1所示,由上位計算機、微控制器、STM32下位機電路板構(gòu)成。上位計算機主要加載和解析需要更新的下位機電路板的應用程序hex文件、加載需要更新程序的下位機電路板ID、從加載的hex文件名中提取電路板代號,將數(shù)據(jù)和控制指令傳輸給微控制器;微控制器接收上位計算機下發(fā)的指令后,檢驗加載的hex是否正確,并通過CAN指令向下位機電路板下發(fā)程序更新相關指令;下位機電路板接收微控制器程序更新相關指令后,將十六進制數(shù)據(jù)寫入(燒錄至)應用程序存放區(qū)。
上位計算機加載應用程序hex文件、輸入需更新程序的下位機電路板ID,首先從加載的hex文件名中提取電路板代號(hex文件名按照固定格式包含對應的電路板代號),然后解析應用程序hex文件,解析規(guī)則為:應用程序hex文件第二行至倒數(shù)第二行的數(shù)據(jù)中,每一行從“:”后的第9位至倒數(shù)第3位為需要寫入下位機flash的十六進制數(shù)據(jù),將數(shù)據(jù)提取出之后通過以太網(wǎng)傳輸給微控制器。
微控制器接收到上位計算機的指令后,開啟下位機程序更新時序,首先通過CAN指令向需要更新程序的下位機電路板發(fā)送查詢電路板代號指令,獲取電路板代號,將該獲取的電路板代號和所述提取的電路板代號進行對比,如果不一致則向上位計算機報告hex文件加載錯誤,如果一致,則通過CAN指令向?qū)挛粰C電路板下發(fā)程序更新相關指令;即:首先下發(fā)應用程序擦除指令,擦除下位機應用程序存放區(qū)的flash;然后下發(fā)應用程序下傳指令,將需要寫入下位機的十六進制數(shù)據(jù)劃分為每4個字節(jié)數(shù)據(jù)為一組,每一組數(shù)據(jù)通過1條CAN指令發(fā)送給下位機電路板;最后下發(fā)應用程序數(shù)據(jù)校驗指令,將微控制器下發(fā)的數(shù)據(jù)進行異或校驗,將校驗結(jié)果發(fā)送給下位機,進行數(shù)據(jù)校驗;若校驗成功,下發(fā)跳轉(zhuǎn)指令,使下位機電路板跳轉(zhuǎn)至其應用程序,若校驗失敗,提示報錯。
下位機電路板MCU的flash空間分配圖如圖2所示,下位機電路板MCU的flash分為bootloader程序存放區(qū)和應用程序存放區(qū)、應用程序標志位存放區(qū);下位機電路板MCU上電后首先運行bootloader程序,通過bootloader程序接收微控制器程序更新相關指令,將十六進制數(shù)據(jù)寫入(燒錄至)應用程序存放區(qū);其主要功能是更新應用程序,如果無需更新,則接收上位計算機跳轉(zhuǎn)指令后跳轉(zhuǎn)至應用程序,由應用程序?qū)崿F(xiàn)下位機電路板實際控制功能。
下位機電路板bootloader程序流程圖如圖3所示,程序運行后即等待接收微控制器CAN指令。如果不需進行程序更新,微控制器直接下發(fā)應用程序跳轉(zhuǎn)指令,下位機首先判斷應用程序標志位存放區(qū)是否寫入更新成功標志字,若已寫入,則跳轉(zhuǎn)至應用程序,若未寫入,則跳轉(zhuǎn)失??;如果需要進行程序更新,微控制器首先會下發(fā)應用程序擦除指令,下位機將flash解鎖定,然后將應用程序存放區(qū)的所有FLASH空間進行擦除;然后微控制器下發(fā)應用程序下傳指令,下位機將微控制器下發(fā)的應用程序的十六進制數(shù)據(jù)寫入應用程序存放區(qū),每一條指令寫入4個字節(jié)數(shù)據(jù);數(shù)據(jù)下傳完成后,微控制器下發(fā)應用程序數(shù)據(jù)校驗指令,下位機將已寫入應用程序存放區(qū)的數(shù)據(jù)進行異或校驗,與微控制器的校驗結(jié)果進行對比,一致則校驗通過,向應用程序標志位存放區(qū)寫入更新成功標志字,并鎖定flash,不一致則校驗不通過;校驗通過后,微控制器下發(fā)應用程序跳轉(zhuǎn),下位機首先判斷應用程序標志位存放區(qū)是否寫入更新成功標志字,若已寫入,則跳轉(zhuǎn)至應用程序,若未寫入,則跳轉(zhuǎn)失敗。