基于canopen協(xié)議的嵌入式軟件升級方法
【專利摘要】本發(fā)明涉及一種基于CANOPEN協(xié)議的嵌入式軟件升級方法,該方法應(yīng)用于通過CAN總線網(wǎng)絡(luò)連接的上位機(jī)和下位機(jī)所組成的系統(tǒng)中,包括以下步驟:上位機(jī)與下位機(jī)進(jìn)行聯(lián)機(jī),聯(lián)機(jī)成功后進(jìn)行編程地址有效性的確認(rèn),當(dāng)確認(rèn)有效后,采用SDO協(xié)議中的塊傳送機(jī)制,分包發(fā)送塊數(shù)據(jù)直至應(yīng)用程序的數(shù)據(jù)全部發(fā)送完成,然后跳轉(zhuǎn)到存儲器的應(yīng)用程序區(qū)執(zhí)行應(yīng)用程序,程序升級結(jié)束。與現(xiàn)有技術(shù)相比,本發(fā)明具有抗干擾能力強(qiáng)、傳送速率高、適用范圍廣、后續(xù)拓展方便等優(yōu)點。
【專利說明】基于CANOPEN協(xié)議的嵌入式軟件升級方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種,尤其是涉及一種基于CANOPEN協(xié)議的嵌入式軟件升級方法。
【背景技術(shù)】
[0002]Bootloader又稱引導(dǎo)加載程序,它是系統(tǒng)加電后運(yùn)行的第一段軟件代碼,它能實現(xiàn)用戶程序的引導(dǎo)啟動和固件自更新兩個功能。其中固件自更新需要向芯片提供額外的數(shù)據(jù)傳輸介質(zhì)使得芯片能將接收到的機(jī)器代碼寫入自身的Flash中。傳統(tǒng)的方法是使用UART的接口實現(xiàn)Bootloader的更新功能,通訊速率低,通常只有幾十KBPS,升級效率低;由于采用UART通訊方式,通訊信號抗干攏能力差,特別是在電磁干攏嚴(yán)重的汽車運(yùn)行環(huán)境。傳統(tǒng)的方法不適合現(xiàn)場總線升級,特別是在多個終端在同一個網(wǎng)絡(luò)中工作的情況,升級時需要把要升級的終端從整個網(wǎng)絡(luò)總線系統(tǒng)中斷開進(jìn)行單獨升級,不適合進(jìn)行現(xiàn)場升級,特別是在汽車上,因汽車空間緊湊,各終端安裝位置空間狹窄,不易拆卸;并且,傳統(tǒng)方法中的通訊協(xié)議都是自定義的,使用范圍小,不通用。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種基于CANOPEN協(xié)議的嵌入式軟件升級方法。
[0004]本發(fā)明的目的可以通過以下技術(shù)方案來實現(xiàn):
[0005]一種基于CANOPEN協(xié)議的嵌入式軟件升級方法,該方法應(yīng)用于通過CAN總線網(wǎng)絡(luò)連接的上位機(jī)和下位機(jī)所組成的系統(tǒng)中,包括以下步驟:
[0006]I)上位機(jī)與下位機(jī)進(jìn)行聯(lián)機(jī),聯(lián)機(jī)成功后執(zhí)行步驟2);
[0007]2)上位機(jī)與下位機(jī)進(jìn)行編程地址有效性的確認(rèn),當(dāng)確認(rèn)有效后,分包發(fā)送塊數(shù)據(jù);
[0008]3)下位機(jī)收到塊數(shù)據(jù)的最后一包后回復(fù)確認(rèn),上位機(jī)收到下位機(jī)最后一包的回復(fù)后,發(fā)送包含CRC校驗碼的塊結(jié)束命令給下位機(jī),;
[0009]4)下位機(jī)收到塊結(jié)束命令后,進(jìn)行CRC校驗,若CRC校驗成功,下位機(jī)把收到的數(shù)據(jù)寫入存儲器中,回復(fù)塊結(jié)束命令給上位機(jī);若CRC校驗失敗,下位機(jī)回復(fù)下載錯誤報文,上位機(jī)收到下載錯誤報文,結(jié)束程序升級;
[0010]5)上位機(jī)收到塊結(jié)束命令后,判斷應(yīng)用程序的數(shù)據(jù)是否全部發(fā)送完成,若應(yīng)用程序的所有數(shù)據(jù)都發(fā)送成功后,上位機(jī)發(fā)送編程結(jié)束命令給下位機(jī),下位機(jī)收到后,回復(fù)編程結(jié)束應(yīng)答給上位機(jī),并跳轉(zhuǎn)到存儲器的應(yīng)用程序區(qū)執(zhí)行應(yīng)用程序,程序升級結(jié)束;若應(yīng)用程序的數(shù)據(jù)未發(fā)送完畢,則返回步驟2)。
[0011]2.根據(jù)權(quán)利要求1所述的一種基于CANOPEN協(xié)議的嵌入式軟件升級方法,其特征在于,所述步驟I)具體包含以下步驟:
[0012]11)上位機(jī)軟件解析要發(fā)送的應(yīng)用程序文件,并等待下位機(jī)的聯(lián)機(jī)請求。
[0013]12)下位機(jī)重新上電,進(jìn)行初始化,然后發(fā)送Boot-up報文,通知上位機(jī)當(dāng)前處于預(yù)操作狀態(tài),上位機(jī)收到下位機(jī)發(fā)送的Boot-up報文,發(fā)送聯(lián)機(jī)請求報文給下位機(jī);
[0014]13)下位機(jī)收到聯(lián)機(jī)請求報文后,回復(fù)聯(lián)機(jī)應(yīng)答,若上位機(jī)收到該聯(lián)機(jī)應(yīng)答,則聯(lián)機(jī)成功;若上位機(jī)未收到下位機(jī)的聯(lián)機(jī)應(yīng)答,則聯(lián)機(jī)失敗,結(jié)束程序升級。
[0015]3.根據(jù)權(quán)利要求2所述的一種基于CANOPEN協(xié)議的嵌入式軟件升級方法,其特征在于,步驟12)中的初始化包括:首先初始化RAM基址,接著初始化堆棧,關(guān)閉看門狗,隨后初始化全局變量,接著初始化CAN通訊接口,以完成Bootloader自身環(huán)境初始化。
[0016]4.根據(jù)權(quán)利要求1所述的一種基于CANOPEN協(xié)議的嵌入式軟件升級方法,其特征在于,執(zhí)行步驟2)之前,還需要執(zhí)行如下步驟:
[0017]A)聯(lián)機(jī)成功后,上位機(jī)向下位機(jī)發(fā)送擦除請求,下位機(jī)收到擦除請求后執(zhí)行擦除操作;
[0018]B)下位機(jī)擦除成功后,向上位機(jī)回復(fù)擦除成功應(yīng)答,下位機(jī)擦除失敗,則回復(fù)擦除失敗應(yīng)答;若上位機(jī)收到擦除失敗應(yīng)答,則結(jié)束程序升級;
[0019]C)若上位機(jī)收到擦除成功應(yīng)答,則進(jìn)行繼續(xù)執(zhí)行步驟2)。
[0020]5.根據(jù)權(quán)利要求1所述的一種基于CANOPEN協(xié)議的嵌入式軟件升級方法,其特征在于,步驟2)具體包括以下步驟:
[0021]21)上位機(jī)向下位機(jī)發(fā)送編程地址報文;
[0022]22)下位機(jī)收到編程地址報文,對其編程地址進(jìn)行確認(rèn),若有效,則向上位機(jī)回復(fù)編程地址有效報文;若無效,則回復(fù)編程地址無效報文,上位機(jī)收到編程地址無效報文后,結(jié)束程序升級;
[0023]23)上位機(jī)收到編程地址有效報文后,向下位機(jī)發(fā)送下載啟動命令,下位機(jī)收到下載啟動命令后,回復(fù)下載啟動應(yīng)答;
[0024]24)上位機(jī)收到下位機(jī)回復(fù)的下載啟動應(yīng)答后,開始分包發(fā)送塊數(shù)據(jù)。
[0025]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點:
[0026]1、采用CAN通訊,通訊信號抗干攏能力強(qiáng)。
[0027]2、采用CAN通訊,通訊速率高,可達(dá)到IMBPS。
[0028]3、需要升及的終端本身帶CAN接口,直接把PC機(jī)接到CAN網(wǎng)絡(luò)就可對網(wǎng)絡(luò)上的任何節(jié)點進(jìn)行升級,終端不需要拆下,適合現(xiàn)場總線升級。
[0029]4、采用標(biāo)準(zhǔn)的CANOPEN通訊協(xié)議,適用范圍廣,后續(xù)擴(kuò)展方便。
【專利附圖】
【附圖說明】
[0030]圖1為本發(fā)明所適用的系統(tǒng)的拓?fù)鋱D;
[0031]圖2為本發(fā)明中下位機(jī)存儲器中存儲區(qū)域的劃分圖;
[0032]圖3為本發(fā)明的流程圖。
【具體實施方式】
[0033]下面結(jié)合附圖和具體實施例對本發(fā)明進(jìn)行詳細(xì)說明。
[0034]實施例
[0035]一種基于CANOPEN協(xié)議的嵌入式軟件升級方法,該方法應(yīng)用于通過CAN總線網(wǎng)絡(luò)連接的上位機(jī)和下位機(jī)所組成的系統(tǒng)中。上述系統(tǒng)的拓?fù)浣Y(jié)構(gòu)如圖1所示,包括上位機(jī)1、CAN總線網(wǎng)絡(luò)3以及多個下位機(jī)2,其中上位機(jī)I為下載程序的PC機(jī)通過USBCAN適配器4連接到CAN總線網(wǎng)絡(luò)3。上位機(jī)I運(yùn)行著上位機(jī)程序,主要作用是解析應(yīng)用程序文件,如HEX、BIN、S19文件,并向下位機(jī)發(fā)送有用的數(shù)據(jù)字節(jié),同時還能顯示傳輸過程和傳輸?shù)慕Y(jié)果。下位機(jī)2為接收上位機(jī)數(shù)據(jù)并進(jìn)行程序更新的終端,通過CAN總線網(wǎng)3連接上位機(jī)I。
[0036]該方法的通訊協(xié)議采用CANopen協(xié)議,CANopen是CAN-1n-Automation (CiA)定義的標(biāo)準(zhǔn)之一,并且在發(fā)布后不久就獲得了廣泛的承認(rèn)。尤其是在歐洲,CANopen協(xié)議被認(rèn)為是在基于CAN的工業(yè)系統(tǒng)中占領(lǐng)導(dǎo)地位的標(biāo)準(zhǔn)。大多數(shù)重要的設(shè)備類型,例如數(shù)字和模擬的輸入輸出模塊、驅(qū)動設(shè)備、操作設(shè)備、控制器、可編程控制器或編碼器,都在稱為“設(shè)備描述”的協(xié)議中進(jìn)行描述;“設(shè)備描述”定義了不同類型的標(biāo)準(zhǔn)設(shè)備及其相應(yīng)的功能。依靠CANopen協(xié)議的支持,可以對不同廠商的設(shè)備通過總線進(jìn)行配置。
[0037]下位機(jī)存儲器的程序存儲區(qū)域劃分如圖2所示,下位機(jī)復(fù)位時從中斷向量表取Bootloader程序首地址,跳轉(zhuǎn)到Bootloader執(zhí)行Bootloader程序,Bootloader接收上位機(jī)發(fā)送的應(yīng)用程序數(shù)據(jù),并寫到應(yīng)用程序區(qū),應(yīng)用程序接收完后Bootloader程序重定位中斷向量表,把中斷向量表定位到應(yīng)用程序區(qū),接著跳轉(zhuǎn)到應(yīng)用程序區(qū)執(zhí)行應(yīng)用程序。
[0038]本發(fā)明的數(shù)據(jù)通訊主要采用CANOPEN協(xié)議中的Boot-up、SDO協(xié)議,Boot-up協(xié)議用于下位機(jī)復(fù)位后通知上位機(jī)當(dāng)前處于預(yù)操作狀態(tài)(pre-operational) ;SD0用于傳送控制命令以及應(yīng)用程序的數(shù)據(jù)塊。
[0039]SDO協(xié)議用來訪問一個設(shè)備的對象字典。訪問者被稱作客戶(client),對象字典被訪問且提供所請求服務(wù)的CANopen設(shè)備別稱作服務(wù)器(server)??蛻舻腃AN報文和服務(wù)器的應(yīng)答CAN報文總是包含8字節(jié)數(shù)據(jù)(盡管不是所有的數(shù)據(jù)字節(jié)都一定有意義)。一個客戶的請求一定有來自服務(wù)器的應(yīng)答。
[0040]SDO協(xié)議有3種傳送機(jī)制:
[0041]加速傳送(Expedited transfer):最多傳輸4字節(jié)數(shù)據(jù)
[0042]分段傳送(Segmented transfer):傳輸數(shù)據(jù)長度大于4字節(jié)
[0043]塊傳送(Block transfer):當(dāng)傳送數(shù)據(jù)長度大于4字節(jié)時,多個分段只由I個確認(rèn)報文應(yīng)答(如果是下載,則由服務(wù)器啟動傳送,如果是上傳,則由客戶啟動傳送)以增加總線吞吐量。
[0044]其中,本發(fā)明中的控制命令采用了加速傳送機(jī)制,這些控制命令包括聯(lián)機(jī)請求、擦除、編程地址、編程結(jié)束,而應(yīng)用程序數(shù)據(jù)塊的下載采用了塊傳送機(jī)制,包括啟動塊下載、塊分段下載、塊下載結(jié)束。
[0045]采用本發(fā)明對嵌入式軟件進(jìn)行升級時,具體的實施步驟如圖3所示:
[0046]S1、升級時先運(yùn)行上位機(jī)中的上位機(jī)軟件,上位機(jī)軟件解析要發(fā)送的應(yīng)用程序文件,如HEX、BIN、S19文件,并等待下位機(jī)聯(lián)機(jī)請求。
[0047]S2、給下位機(jī)重新上電,下位機(jī)上電復(fù)位后直接執(zhí)行Bootloader程序,首先初始化RAM基址,接著初始化堆棧,關(guān)閉看門狗,隨后初始化全局變量,接著初始化CAN通訊接口,以完成Bootloader自身環(huán)境初始化的過程,接著發(fā)送Boot-up報文,通知上位機(jī)當(dāng)前處于預(yù)操作狀態(tài)(pre-operational),上位機(jī)收到下位機(jī)發(fā)送的Boot-up報文,發(fā)送聯(lián)機(jī)請求報文。
[0048]S3、下位機(jī)收到聯(lián)機(jī)請求報文后回復(fù)聯(lián)機(jī)應(yīng)答,聯(lián)機(jī)成功。若上位機(jī)長時間未收到下位機(jī)的聯(lián)機(jī)應(yīng)答,聯(lián)機(jī)超時,聯(lián)機(jī)失敗,程序升級失敗。
[0049]S4、上位機(jī)收到下位機(jī)的聯(lián)機(jī)應(yīng)答后發(fā)送擦除請求,下位機(jī)收到擦除請求后執(zhí)行擦除操作。
[0050]S5、下位機(jī)擦除成功后回復(fù)擦除成功應(yīng)答,下位機(jī)擦除失敗則回復(fù)擦除失敗應(yīng)答。上位機(jī)收到擦除失敗應(yīng)答后,結(jié)束程序升級,程序升級失敗。
[0051 ] S6、若上位機(jī)收到擦除成功應(yīng)答后,發(fā)送編程地址報文。
[0052]S7、下位機(jī)收到編程地址報文,確認(rèn)地址有效后回復(fù)編程地址有效報文,若地址無效則回復(fù)地址無效報文。上位機(jī)收到編程地址無效應(yīng)答后,結(jié)束程序的升級,升級失敗。
[0053]S8、上位機(jī)收到編程地址有效報文,發(fā)送塊下載啟動命令,下位機(jī)收到下載啟動命令后,回復(fù)下載啟動應(yīng)答。
[0054]S9、上位機(jī)收到下位機(jī)回復(fù)的下載啟動命令,接著開始分包發(fā)送塊數(shù)據(jù)。
[0055]S10、下位機(jī)收到塊數(shù)據(jù)的最后一包后回復(fù)確認(rèn),上位機(jī)收到下位機(jī)最后一包的回復(fù)后,發(fā)送塊結(jié)束命令給下位機(jī)(數(shù)據(jù)報文含CRC校驗碼)。
[0056]S11、下位機(jī)收到塊結(jié)束命令后,進(jìn)行校驗CRC校驗,校驗成功后,下位機(jī)把收到的數(shù)據(jù)寫入存儲器中,回復(fù)塊結(jié)束命令。若CRC校驗失敗則回復(fù)下載錯誤報文,上位機(jī)收到下載錯誤報文,程序升級失敗。
[0057]S12、上位機(jī)收到塊結(jié)束命令后,判斷應(yīng)用程序的數(shù)據(jù)是否全部發(fā)送完成,若應(yīng)用程序的所有數(shù)據(jù)都發(fā)送成功后,上位機(jī)發(fā)送編程結(jié)束命令給下位機(jī),下位機(jī)回復(fù)編程結(jié)束應(yīng)答給上位機(jī),并跳轉(zhuǎn)到應(yīng)用程序區(qū)執(zhí)行應(yīng)用程序,程序升級結(jié)束。若應(yīng)用程序的數(shù)據(jù)未發(fā)送完畢,則重復(fù)上述7?12步驟。
【權(quán)利要求】
1.一種基于CANOPEN協(xié)議的嵌入式軟件升級方法,該方法應(yīng)用于通過CAN總線網(wǎng)絡(luò)連接的上位機(jī)和下位機(jī)所組成的系統(tǒng)中,其特征在于,包括以下步驟: 1)上位機(jī)與下位機(jī)進(jìn)行聯(lián)機(jī),聯(lián)機(jī)成功后執(zhí)行步驟2); 2)上位機(jī)與下位機(jī)進(jìn)行編程地址有效性的確認(rèn),當(dāng)確認(rèn)有效后,分包發(fā)送塊數(shù)據(jù); 3)下位機(jī)收到塊數(shù)據(jù)的最后一包后回復(fù)確認(rèn),上位機(jī)收到下位機(jī)最后ー包的回復(fù)后,發(fā)送包含CRC校驗碼的塊結(jié)束命令給下位機(jī),; 4)下位機(jī)收到塊結(jié)束命令后,進(jìn)行CRC校驗,若CRC校驗成功,下位機(jī)把收到的數(shù)據(jù)寫入存儲器中,回復(fù)塊結(jié)束命令給上位機(jī);若CRC校驗失敗,下位機(jī)回復(fù)下載錯誤報文,上位機(jī)收到下載錯誤報文,結(jié)束程序升級; 5)上位機(jī)收到塊結(jié)束命令后,判斷應(yīng)用程序的數(shù)據(jù)是否全部發(fā)送完成,若應(yīng)用程序的所有數(shù)據(jù)都發(fā)送成功后,上位機(jī)發(fā)送編程結(jié)束命令給下位機(jī),下位機(jī)收到后,回復(fù)編程結(jié)束應(yīng)答給上位機(jī),并跳轉(zhuǎn)到存儲器的應(yīng)用程序區(qū)執(zhí)行應(yīng)用程序,程序升級結(jié)束;若應(yīng)用程序的數(shù)據(jù)未發(fā)送完畢,則返回步驟2)。
2.根據(jù)權(quán)利要求1所述的ー種基于CANOPEN協(xié)議的嵌入式軟件升級方法,其特征在干,所述步驟I)具體包含以下步驟: 11)上位機(jī)軟件解析要發(fā)送的應(yīng)用程序文件,并等待下位機(jī)的聯(lián)機(jī)請求。 12)下位機(jī)重新上電,進(jìn)行初始化,然后發(fā)送Boot-up報文,通知上位機(jī)當(dāng)前處于預(yù)操作狀態(tài),上位機(jī)收到下位機(jī)發(fā)送的Boot-up報文,發(fā)送聯(lián)機(jī)請求報文給下位機(jī); 13)下位機(jī)收到聯(lián)機(jī)請求報文后,回復(fù)聯(lián)機(jī)應(yīng)答,若上位機(jī)收到該聯(lián)機(jī)應(yīng)答,則聯(lián)機(jī)成功;若上位機(jī)未收到下位機(jī)的聯(lián)機(jī)應(yīng)答,則聯(lián)機(jī)失敗,結(jié)束程序升級。
3.根據(jù)權(quán)利要求2所述的ー種基于CANOPEN協(xié)議的嵌入式軟件升級方法,其特征在干,步驟12)中的初始化包括:首先初始化RAM基址,接著初始化堆棧,關(guān)閉看門狗,隨后初始化全局變量,接著初始化CAN通訊接ロ,以完成Bootloader自身環(huán)境初始化。
4.根據(jù)權(quán)利要求1所述的ー種基于CANOPEN協(xié)議的嵌入式軟件升級方法,其特征在干,執(zhí)行步驟2)之前,還需要執(zhí)行如下步驟: A)聯(lián)機(jī)成功后,上位機(jī)向下位機(jī)發(fā)送擦除請求,下位機(jī)收到擦除請求后執(zhí)行擦除操作; B)下位機(jī)擦除成功后,向上位機(jī)回復(fù)擦除成功應(yīng)答,下位機(jī)擦除失敗,則回復(fù)擦除失敗應(yīng)答;若上位機(jī)收到擦除失敗應(yīng)答,則結(jié)束程序升級; C)若上位機(jī)收到擦除成功應(yīng)答,則進(jìn)行繼續(xù)執(zhí)行步驟2)。
5.根據(jù)權(quán)利要求1所述的ー種基于CANOPEN協(xié)議的嵌入式軟件升級方法,其特征在干,步驟2)具體包括以下步驟: 21)上位機(jī)向下位機(jī)發(fā)送編程地址報文; 22)下位機(jī)收到編程地址報文,對其編程地址進(jìn)行確認(rèn),若有效,則向上位機(jī)回復(fù)編程地址有效報文;若無效,則回復(fù)編程地址無效報文,上位機(jī)收到編程地址無效報文后,結(jié)束程序升級; 23)上位機(jī)收到編程地址有效報文后,向下位機(jī)發(fā)送下載啟動命令,下位機(jī)收到下載啟動命令后,回復(fù)下載啟動應(yīng)答; 24)上位機(jī)收到下位機(jī)回復(fù)的下載啟動應(yīng)答后,開始分包發(fā)送塊數(shù)據(jù)。
【文檔編號】H04L29/06GK103559066SQ201310581178
【公開日】2014年2月5日 申請日期:2013年11月19日 優(yōu)先權(quán)日:2013年11月19日
【發(fā)明者】戴永佳, 張世平, 范宣祿, 張如欣 申請人:上海創(chuàng)程車聯(lián)網(wǎng)絡(luò)科技有限公司