級過程中不會直接覆蓋用戶程序區(qū),而是將程序文件先放置于升級存儲區(qū),待驗證沒有問題之后,由Bootloader引導直接運行新程序,若發(fā)現(xiàn)新程序有編程上的缺陷,還可以恢復運行原有的程序,大大增強了升級過程的穩(wěn)定性。此外,分配處參數(shù)保存區(qū),在升級過程中將升級狀態(tài)和校驗參數(shù)保存在該區(qū)內,一旦升級過程中出現(xiàn)突發(fā)狀況導致升級終止,重新升級時可讀出上次升級的狀態(tài),在斷點處繼續(xù)傳輸數(shù)據(jù)包。斷點續(xù)傳的機制可以在使用GPRS作為傳輸模塊的機型上大大減少了昂貴的流量的消耗。
[0025]3)步驟4、5、6中,兩次CRC校驗的設計不但保證了數(shù)據(jù)的安全性,在一般的IAP升級的校驗環(huán)節(jié)上增加的對單個數(shù)據(jù)包的CRC驗證環(huán)節(jié),當單個數(shù)據(jù)包驗證錯誤時不會退出升級,而是重新嘗試發(fā)送該數(shù)據(jù)包。這樣的設計是基于無線傳輸中不可避免的誤碼率,避免了一個數(shù)據(jù)包出現(xiàn)錯誤而導致整個升級過程終止,節(jié)約了升級時間和數(shù)據(jù)流量。
【附圖說明】
[0026]圖1是系統(tǒng)原理框圖;
[0027]圖2 是 STM32F103R8T6 內部 Flash 規(guī)劃圖;
[0028]圖3是數(shù)據(jù)幀格式說明圖;
[0029]圖4是方法流程圖。
【具體實施方式】
[0030]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述。
[0031]下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。
[0032]本發(fā)明所述的基于BootLoader的UV LED固化系統(tǒng)遠程升級方法,包括以下模塊:
[0033](I)BootLoader模塊。管理分配用戶程序區(qū)、升級儲存區(qū)、參數(shù)保存區(qū)的FLASH存儲地址的分配;通過接受上位機的請求判斷是否進行升級;通過接受上位機的請求進行程序版本號、驗證碼等信息傳輸;升級結束后完成向用戶程序的跳轉。
[0034](2)上位機模塊。運行在工控機上的電腦軟件,控制升級文件的讀取、解析、打包等。上位機軟件與設備商的服務器連接,做到及時推送升級程序和調試程序等。上位機通過工控機的RS485總線與設備進行連接。
[0035](3)可選的通信模塊(GPRS、WiF1、藍牙或以太網(wǎng)卡等)與上位機搭配,完成遠程傳輸。
[0036]如圖1所示,UV LED固化系統(tǒng)主要包含處理器模塊、通信模塊、光源驅動模塊以及交互模塊(包含觸摸屏和按鍵模塊,用于UV LED固化系統(tǒng)的顯示和手動輸入控制)。其中需要程序控制的有兩個模塊,即處理器模塊(控制整個系統(tǒng)的運行)和光源驅動模塊(控制電流的分配),所述通信模塊通過RS485分別同處理器模塊、光源驅動模塊相連,所述通信模塊還通過網(wǎng)絡與無線模塊相連,無線模塊通過RS485和上位機相連,配合上位機和網(wǎng)絡即可對程序進行遠程升級,大大縮短機器維護升級的時間。本發(fā)明以UV LED固化系統(tǒng)使用的STM32系列微處理器STM32F103R8T6為例。處理器模塊、光源驅動模塊的控制核心都是STM32F103R8T6微處理器,BootLoader在用戶程序前運行,可完成初始化設備,建立內存空間映射,從而將軟硬件調整到一個合適運行的環(huán)境,以便為最終調用操作系統(tǒng)內核做準備。利用這個特點,可以編寫B(tài)ootLoader程序,最終可以達到升級程序的目的。
[0037]本發(fā)明使用Cortex-M3架構的STM32F103R8T6作為UV LED固化系統(tǒng)的微處理器,利用基于BootLoader的IAP結合上位機或可選的通信模塊完成UV LED固化系統(tǒng)遠程升級。UV LED固化系統(tǒng)主要包含以下四個模塊:處理器模塊、通信模塊、光源驅動模塊以及交互模塊。本發(fā)明提出的方法是基于處理器模塊和通信模塊完成的。就可行性而言,常見微處理器中都包含BootLoader。STM32F103R8T6微處理器支持IAP技術的首要前提為其必須是基于可重復編程閃存的微處理器。此外STM32微處理器擁有在數(shù)量上、種類上都非常豐富的外設通信接口,因此在STM32上實現(xiàn)基于BootLoader的IAP、完成遠程升級是完全可行的。
[0038]處理器模塊中,在STM32F103R8T6微處理器的FLASH區(qū)域中開辟出BootLoader的存放區(qū)域(地址可自定義),其中存儲有BootLoader的啟動程序。啟動BootLoader程序,程序會接受由上位機傳送的升級指令,程序根據(jù)當前的狀態(tài)進行一個綜合判定,若需要升級,則BootLoader會調用存放在BootLoader中的升級程序,配合通信模塊完成升級數(shù)據(jù)的傳輸,對FLASH中的運行程序區(qū)內的數(shù)據(jù)執(zhí)行升級操作。
[0039]通信模塊中,本發(fā)明使用STM32F103R8T6微處理器的RS485總線完成與上位機的通信,上位機完成升級引導包、升級數(shù)據(jù)包、升級狀態(tài)包、校驗包及程序版本號的等數(shù)據(jù)向微處理器的傳輸。
[0040]如圖4所示,對基于BootLoader的UV LED固化系統(tǒng)遠程升級方法進行闡述,主要包括以下步驟:
[0041]步驟1,根據(jù)STM32F103R8T6的內存架構完成對內存頁的分配。本發(fā)明按照如圖2所示的地址將FLASH分為四個區(qū),即BootLoader,用戶程序區(qū),升級存儲區(qū),參數(shù)保存區(qū)。BootLoader是嵌入式系統(tǒng)在上電后執(zhí)行的第一段代碼,在完成初始化硬件設備、建立內存空間映射后,再跳轉到操作系統(tǒng)映像或固化的嵌入式應用程序的內存空間,啟動運行系統(tǒng);用戶程序區(qū)是儲存需要運行的用戶程序;升級存儲區(qū)是用來暫時存儲新的程序的二進制文件,待校驗完成后再寫入用戶程序區(qū);參數(shù)保存區(qū)內定義一個升級狀態(tài)的結構體,成員包括升級標志,最近一次的升級信息,CRC校驗碼等等。其中BootLoader以及用戶程序的首地址,需要在KEIL中的Opt1ns for target中手動設置為0x8000000和0x8010000 ;其他的均在BootLoader里設置。整個BootLoader共占8K字節(jié)。
[0042]步驟2,UV LED固化系統(tǒng)中需要程序控制的有兩個模塊,即處理器模塊(控制整個系統(tǒng)的運行)和光源驅動模塊(控制電流的分配)。模塊的控制核心都是STM32F103R8T6微處理器。BootLoader初始化結束后,判斷參數(shù)保存區(qū)中的升級標志Updata_Flag,若升級標志為OxFA,說明接收到遠程升級指令,接著判斷是處理器模塊的程序升級還是光源驅動模塊的程序升級。確定后相應的模塊則由BootLoader引導程序跳轉進入升級程序,程序跳轉指令符合STM32F10X系列的指令協(xié)議。升級確認指令反饋給上位機。
[0043]步驟3,STM32F103R8T6 微處理器調用 FLASH 擦除函數(shù) Flash_SectorErase O 按頁擦除FLASH中升級儲存區(qū)的相應數(shù)據(jù);由于該庫函數(shù)對FLASH執(zhí)行的是分頁擦除,故需要注意將程序存儲的地址與FLASH進行頁對齊(每頁占用2048bit)。擦除的過程中,F(xiàn)lash_SectorErase O會返回每頁的擦除結果,將擦除的結果返回給上位機。若擦除成功則開始請求數(shù)據(jù)引導包,若不成功則由上位機詢問是否結束升級。數(shù)據(jù)引導包是上位機對新程序BIN文件解析并分包后生成的,引導包中包含程序包的總包數(shù)、總字節(jié)數(shù)、版本號及總CRC(16Bit M0DELBUS 模式)校驗碼。
[0044]步驟4,由于傳輸環(huán)節(jié)不可避免出現(xiàn)誤碼,尤其是使用GPRS、Zigbee作為遠程載體時,有一定的誤碼率;所以為了保證程序的安全,本發(fā)明引入抗誤碼環(huán)節(jié)。上位機在對新程序BIN文件分包的環(huán)節(jié)會按照一定格式打包成每一個數(shù)據(jù)包。如圖3所示,每個數(shù)據(jù)包分別含有幀頭(IBit)、序號(IBit)、文件長度(2Bit)、文件數(shù)據(jù)(1024BU以內)、校驗碼(2Bit)、幀尾(IBit)等。幀頭和幀尾是根據(jù)通信協(xié)議固定的0x5A和0xA5。校驗環(huán)節(jié)采用的是CRC(16Bit M0DELBUS模式),上位機在傳輸數(shù)據(jù)包前對每一數(shù)據(jù)包計算一次CRC并生成校驗碼。微處理器在每一包數(shù)據(jù)的接收后都會校驗CRC,如果校驗不成功則發(fā)出錯誤指令,要求重新發(fā)送一遍當前數(shù)據(jù)包。這種校驗方式相對于