一種單片機在線升級方法和系統(tǒng)的制作方法
【專利摘要】本申請?zhí)峁┝艘环N單片機在線升級方法和系統(tǒng),所述方法包括:讀取外置存儲設備中的升級程序文件和所述升級程序文件對應的標準校驗碼;對所述升級程序文件進行校驗,得到實際校驗碼;比較所述實際校驗碼和所述標準校驗碼,當所述實際校驗碼與所述標準校驗碼一致時,寫入待升級標志;對所述升級程序文件進行CRC16計算,得到計算結(jié)果;根據(jù)所述計算結(jié)果,寫入所述升級程序文件。通過本申請可以解決由于升級程序文件錯誤而導致的MCU在線升級錯誤或失敗的問題。
【專利說明】一種單片機在線升級方法和系統(tǒng)【技術領域】
[0001] 本申請涉及單片機【技術領域】,特別是涉及一種單片機在線升級方法和系統(tǒng)。
【背景技術】
[0002]由于單片機(Micro Control Unit,MCU,單片機)具有集成度高、運算速度快、可靠性高等優(yōu)點,單片機的應用范圍也日益廣泛,單片機的應用范圍可以包括工業(yè)自動化、儀器儀表、家用電器、信息和通信產(chǎn)品及軍事裝備等。單片機經(jīng)歷了從4b到Sb再到16b的發(fā)展過程,為了進一步提高單片機的性能,目前技術人員努力實現(xiàn)及改進的技術重點是實現(xiàn)單片機的在線升級功能。
[0003]單片機本身是沒有在線升級功能的,需要通過外置存儲設備來完成在線升級過程。目前采用的方法是,MCU讀取外置存儲設備中的升級程序文件,比如:S19格式文件,S19格式文件可以是由名為Freecale Codeffarrior的編譯器生成的后綴名為.S19的文件,并對S19格式文件中程序的有效位(除去地址信息,行校驗信息)生成CRC16校驗碼,然后通過MPU (Micro Processor Unit,MPU,微處理器)和MCU之間的升級通訊協(xié)議將外置存儲設備中存儲的S19文件數(shù)據(jù)更新至MCU中,實現(xiàn)對MCU的在線升級。然而,目前采用的單片機在線升級方法,在升級過程中可能會由于升級程序文件錯誤而導致的MCU在線升級錯誤或失敗。
【發(fā)明內(nèi)容】
[0004]本申請?zhí)峁┮环N單片機在線升級方法和系統(tǒng),以解決由于升級程序文件錯誤而導致的MCU在線升級錯誤或失敗的問題。
[0005]為了解決上述問題,本申請公開了一種單片機在線升級方法,包括:
[0006]讀取外置存儲設備中的升級程序文件和所述升級程序文件對應的標準校驗碼;
[0007]對所述升級程序文件進行校驗,得到實際校驗碼;
[0008]比較所述實際校驗碼和所述標準校驗碼,當所述實際校驗碼與所述標準校驗碼一致時,寫入待升級標志;
[0009]對所述升級程序文件進行CRC16計算,得到計算結(jié)果;
[0010]根據(jù)所述計算結(jié)果,寫入所述升級程序文件。
[0011]較佳地,所述讀取外置存儲設備中的升級程序文件,包括:
[0012]讀取外置存儲設備中的程序文件,根據(jù)文件特征碼,判斷所述程序文件是否為升級程序文件,得到判斷結(jié)果;
[0013]根據(jù)所述判斷結(jié)果,獲取得到所述升級程序文件。
[0014]較佳地,所述對所述升級程序文件進行CRC16計算,得到計算結(jié)果,包括:
[0015]逐次提取所述升級程序文件,其中,每次提取所述升級程序文件中的16字節(jié)數(shù)據(jù);
[0016]對提取得到的所述16字節(jié)數(shù)據(jù)進行CRC16計算,生成所述16字節(jié)數(shù)據(jù)對應的CRC16第一校驗碼;
[0017]生成包含所述16字節(jié)數(shù)據(jù)和所述第一校驗碼的校驗數(shù)據(jù);
[0018]對所述校驗數(shù)據(jù)中的16字節(jié)數(shù)據(jù)再次進行CRC16計算,生成第二校驗碼。
[0019]較佳地,所述根據(jù)計算結(jié)果,寫入所述升級程序文件,包括:
[0020]比較所述第一校驗碼和所述第二校驗碼的一致性,當所述第一校驗碼和所述第二校驗碼一致時,寫入所述校驗數(shù)據(jù)中的所述16字節(jié)數(shù)據(jù);
[0021]當所述第一校驗碼和所述第二校驗碼不一致時,升級過程失敗,所述待升級標志更新為升級失敗標志。
[0022]較佳地,所述根據(jù)所述計算結(jié)果,寫入所述升級程序文件,包括:
[0023]當寫入所有提取得到的所述16字節(jié)數(shù)據(jù)后,升級成功,所述待升級標志更新為升級成功標志。
[0024]相應的本申請實施例公開了一種單片機在線升級系統(tǒng),包括:
[0025]文件讀取模塊,用于讀取外置存儲設備中的升級程序文件和所述升級程序文件對應的標準校驗碼;
[0026]校驗碼生成模塊,用于對所述升級程序文件進行校驗,得到實際校驗碼;
[0027]比較模塊,用于比較所述實際校驗碼和所述標準校驗碼,在所述實際校驗碼與所述標準校驗碼一致時,寫入待升級標志;
[0028]CRC16計算模塊,用于對所述升級程序文件進行CRC16計算,得到計算結(jié)果;
[0029]文件寫入模塊,用于根據(jù)所述計算結(jié)果,寫入所述升級程序文件。
[0030]較佳地,所述文件讀取模塊,包括:
[0031]判斷子模塊,用于讀取外置存儲設備中的程序文件,根據(jù)升級程序文件特征碼,判斷所述程序文件是否為升級程序文件,得到判斷結(jié)果;
[0032]獲取子模塊,用于根據(jù)所述判斷結(jié)果,獲取得到所述升級程序文件。
[0033]較佳地,所述CRC16計算模塊,包括:
[0034]提取子模塊,用于逐次提取所述升級程序文件,其中,每次提取所述升級程序文件中的16字節(jié)數(shù)據(jù);
[0035]第一校驗碼生成子模塊,用于對提取得到的所述16字節(jié)數(shù)據(jù)進行CRC16計算,生成所述16字節(jié)數(shù)據(jù)對應的CRC16第一校驗碼;
[0036]校驗數(shù)據(jù)生成子模塊,用于生成包含所述16字節(jié)數(shù)據(jù)和所述第一校驗碼的校驗數(shù)據(jù);
[0037]第二校驗碼生成子模塊,對所述校驗數(shù)據(jù)中的16字節(jié)數(shù)據(jù)再次進行CRC16計算,生成第二校驗碼。
[0038]較佳地,所述文件寫入模塊,包括:
[0039]CRC16校驗碼比較子模塊,用于比較所述第一校驗碼和所述第二校驗碼的一致性;
[0040]第一寫入子模塊,用于在所述第一校驗碼和所述第二校驗碼一致時,寫入所述校驗數(shù)據(jù)中的所述16字節(jié)數(shù)據(jù);
[0041]第二寫入子模塊,用于在所述第一校驗碼和所述第二校驗碼不一致,升級過程失敗時,將所述待升級標志更新為升級失敗標志。[0042]較佳地,所述文件寫入模塊,包括:
[0043]第三寫入子模塊,用于在寫入所有提取得到的所述16字節(jié)數(shù)據(jù)后,升級成功時,將所述待升級標志更新為升級成功標志。
[0044]與現(xiàn)有技術相比,本申請包括以下優(yōu)點:
[0045]本申請實施例所述的一種單片機在線升級方法,通過對讀取得到的外置存儲設備中的升級程序文件進行校驗,判斷升級程序文件是否正確,當升級程序文件正確時,再根據(jù)所述升級程序文件進行在線升級過程,避免了因升級程序文件錯誤而造成MCU在線升級過程錯誤或失敗的問題。
【專利附圖】
【附圖說明】
[0046]圖1是本申請實施例所述一種單片機在線升級方法的流程圖;
[0047]圖2是本申請另一實施例所述一種單片機在線升級方法的流程;
[0048]圖3是本申請實施例所述一種單片機在線升級系統(tǒng)的結(jié)構框圖;
[0049]圖4是本申請另一實施例所述一種單片機在線升級系統(tǒng)的結(jié)構框圖。
【具體實施方式】
[0050]為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和【具體實施方式】對本申請作進一步詳細的說明。
[0051]本申請實施例所述的一種單片機在線升級方法,從外置存儲設備中讀取得到的升級程序文件,并對所述升級程序文件進行校驗,確保升級程序文件的正確性,當所述升級程序文件通過校驗后,再根據(jù)CRC16算法完成MCU在線升級過程,由于在升級之前對升級程序文件的正確性做了校驗,因此,避免了因升級程序文件錯誤而帶來的升級錯誤或升級失敗的問題。
[0052]參照圖1,示出了本申請實施例所述一種單片機在線升級方法的流程圖。所述單片機在線升級方法,包括:
[0053]步驟102,讀取外置存儲設備中的升級程序文件和標準校驗碼;
[0054]單片機本身是沒有在線升級功能的,,在本申請實施例中,可以選擇采用基于flash存儲技術的MCU芯片(flash是存儲芯片的一種,通過特定的程序可以修改里面的數(shù)據(jù)),并通過外置存儲設備來實現(xiàn)MCU的在線升級過程,其中,所述外置存儲設備可以是:SD卡(Secure Digital Memory Card)、U盤或閃存等。升級程序文件可以保存在外置存儲設備中,MCU通過讀取存儲在外置存儲設備中的升級程序文件,然后寫入所述升級程序文件,完成在線升級過程。其中,所述升級程序文件都有一個對應的標準校驗碼,所述標準校驗碼和所述升級程序文件都保存在外置存儲設備中,通過標準校驗碼可以用來驗證所述升級程序文件的正確性。
[0055]步驟104,對所述升級程序文件進行校驗,得到實際校驗碼;
[0056]在實際應用中,可能會因為外置存儲設備的損壞或外置存儲設備錯誤而導致外置存儲設備中存儲的升級程序文件發(fā)生錯誤;外置存儲設備中存儲的升級程序文件也有可能被竄改,而不是原始狀態(tài)的升級程序文件。在本申請實施例中,通過對提取得到的升級程序文件進行校驗,得到實際校驗碼,來判斷升級程序文件的正確性。[0057]步驟106,比較所述實際校驗碼和所述標準校驗碼,當所述實際校驗碼與所述標準校驗碼一致時,寫入待升級標志;
[0058]將得到的實際校驗碼與標準校驗碼進行比較,當兩者一致時,說明升級程序文件是正確的,可以根據(jù)所述升級程序文件進行在線升級,在MCU中寫入一個待升級標志;當兩者不一致時;說明升級程序文件不正確,可能是外置存儲設備錯誤導致升級程序文件錯誤,也可能是升級程序文件缺失或被竄改,所述升級程序文件不能繼續(xù)使用。
[0059]步驟108,對所述升級程序文件進行CRC16計算,得到計算結(jié)果;
[0060]步驟110,根據(jù)所述計算結(jié)果,寫入所述升級程序文件。
[0061]綜上所述,本申請實施例提供的一種單片機在線升級方法,從外置存儲設備中讀取得到的升級程序文件和標準校驗碼,并對所述升級程序文件進行校驗,得到實際校驗碼,通過比較所述標準校驗碼和所述實際校驗碼,確保升級程序文件的正確性,當確定所述升級程序文件正確后,再根據(jù)CRC16算法完成MCU在線升級過程,由于在升級之前對升級程序文件的正確性做了校驗,因此,避免了因升級程序文件錯誤而帶來的升級錯誤或升級失敗的問題。
[0062]參照圖2,示出了本申請另一實施例所述一種單片機在線升級方法的流程圖。所述單片機在線升級方法,包括:
[0063]步驟202,讀取外置存儲設備中的升級程序文件和標準校驗碼;
[0064]在實際應用中,外置存儲設備中可以存儲很多文件,需要從這些文件中確定升級程序文件,步驟202,可以包括:
[0065]子步驟2022,讀取外置存儲設備中的程序文件,根據(jù)文件特征碼,判斷所述程序文件是否為升級程序文件,得到判斷結(jié)果;
[0066]在本申請實施例中,所述升級程序文件可以是S19格式文件,S19格式文件可以是由名為Freecale Codeffarrior的編譯器生成的后綴名為.S19的文件,S19格式文件每一行稱為一個S記錄,每個S記錄由記錄類型、記錄長度、存儲地址、代碼/數(shù)據(jù)、校驗和五個部分組成,每字節(jié)數(shù)據(jù)被編譯成兩個16進制字符。可以通過在S19格式文件前添加一個用于識別的特征碼,當讀取外置存儲設備中的程序文件時,判斷讀取的程序文件是否帶有所述特征碼。
[0067]子步驟2024,根據(jù)所述判斷結(jié)果,獲取得到所述升級程序文件;
[0068]當讀取的程序文件帶有所述特征碼時,則所述程序文件為升級程序文件,獲取所述升級程序文件。
[0069]步驟204,對所述升級程序文件進行校驗,得到實際校驗碼;
[0070]在本申請中,可以通過MD5校驗法對所述升級程序文件進行校驗。MD5即Message-Digest Algorithm5,信息-摘要算法5,MD5的可以對一段信息(message)生成信息摘要(message-digest),所述信息摘要對所述信息具有唯一性,可以作為數(shù)字簽名用于驗證文件的正確性??梢詫⒄_的升級程序文件對應的MD5碼存儲在外置存儲設備中作為標準MD5碼,對讀取得到的升級程序文件進行MD5校驗,根據(jù)S19文件的字節(jié)串,每個字節(jié)是8個bit,計算實際的MD5碼,MD5計算方法可以如下:
[0071]第一步,補位:MD5算法先對輸入的數(shù)據(jù)進行補位,使得數(shù)據(jù)的長度(以byte為單位)對64求余的結(jié)果是56。即數(shù)據(jù)擴展至LEN=K*64+56個字節(jié),K為整數(shù)。補位方法:補一個1,然后補O直至滿足上述要求。相當于補一個0x80的字節(jié),再補值為O的字節(jié)。這一步里總共補充的字節(jié)數(shù)為O?63個;
[0072]第二步,附加數(shù)據(jù)長度:用一個64位的整數(shù)表示數(shù)據(jù)的原始長度(以bit為單位),將這個數(shù)字的8個字節(jié)按低位的在前,高位在后的順序附加在補位后的數(shù)據(jù)后面。這時,數(shù)據(jù)被填補后的總長度為:LEN=K*64+56+8=(K+l)*64Bytes ;
[0073]第三步,初始化MD5參數(shù):有四個32位整數(shù)變量(A,B,C,D)用來計算信息摘要,每一個變量被初始化成以下以十六進制數(shù)表示的數(shù)值,低位的字節(jié)在前面;
[0074]第四步,定義四個MD5基本的按位操作函數(shù),其中X、Y、Z為32位整數(shù):F (X, Y, Z) = (X and Y) or (not (X) and Z)、G (X,Y, Z) = (X and Z) or (Y and not (Z))和H (X, Y, Z) =X xor Y xor Z> I (X, Y, Z) =Y xor (X or not (Z));
[0075]再定義四個分別用于四輪變換的函數(shù),其中,假設Mj表示消息的第j個子分組(從O到15),〈〈〈S表不循環(huán)左移s位,則四種操作為:
[0076]FF (a, b, c, d, Mj, s, ti)表不 a=b+ ((a+ (F (b, c, d) +Mj+ti) <<<s);
[0077]GG (a, b, c, d, Mj, s, ti)表不 a=b+ ((a+ (G (b, c, d) +Mj+ti) <<<s);
[0078]HH(a, b, c, d, Mj, s, ti)表不 a=b+((a+(H(b, c, d)+Mj+ti) <〈〈s);
[0079]II (a, b, c, d, Mj, s, ti)表不 a=b+((a+(I (b, c, d)+Mj+ti) <〈〈s);
[0080]第五步,對輸入數(shù)據(jù)作變換:處理數(shù)據(jù),N是總的字節(jié)數(shù),以64個字節(jié)為一組,每組作一次循環(huán),每次循環(huán)進行四輪操作。要變換的64個字節(jié)用16個32位的整數(shù)數(shù)組M[0...15]表示。而數(shù)組 T [1...64]表示一組常數(shù),T [i]為 4294967296*abs(sin(i))的 32位整數(shù)部分,i的單位是弧度,i的取值從I到64 ;
[0081]第六步,輸出結(jié)果。A,B,C,D連續(xù)存放,共16個字節(jié),128位。按十六進制依次輸出這個16個字節(jié)。
[0082]步驟206,比較所述實際校驗碼和所述標準校驗碼,當所述實際校驗碼與所述標準校驗碼一致時,寫入待升級標志;
[0083]每個文件對應的MD5碼都是不同的,如果標準MD5碼與實際計算得到的MD5碼一致,說明獲取得到的升級程序文件是正確的,從而避免了因升級程序文件的錯誤而導致升級過程錯誤或失敗的問題。
[0084]步驟208,對所述升級程序文件進行CRC16計算,得到計算結(jié)果;步驟208可以包括:
[0085]子步驟2082,逐次提取所述升級程序文件,其中,每次提取所述升級程序文件中的16字節(jié)數(shù)據(jù);
[0086]子步驟2084,對提取得到的所述16字節(jié)數(shù)據(jù)進行CRC16計算,生成所述16字節(jié)數(shù)據(jù)對應的CRC16第一校驗碼;
[0087]其中,對所述16字節(jié)數(shù)據(jù)進行CRC16計算,計算方法可以如下:
[0088]1、預置I個16位的寄存器為十六進制FFFF (即全為I),所述寄存器為CRC寄存器;
[0089]2、把第一個8位二進制數(shù)據(jù)與16位的CRC寄存器的低8位相異或,把結(jié)果放于CRC寄存器,高八位數(shù)據(jù)不變;
[0090]3、把CRC寄存器的內(nèi)容右移一位(朝低位)用O填補最高位,并檢查右移后的移出位;
[0091]4、如果移出位為O:重復第3步(再次右移一位);如果移出位為1,CRC寄存器與多項式 AOOl (1010 0000 0000 0001)進行異或;
[0092]5、重復步驟3和4,直到右移8次,將整個8位數(shù)據(jù)全部進行處理;
[0093]6、重復步驟2到步驟5,進行通訊信息幀下一個字節(jié)的處理;
[0094]7、將該通訊信息幀所有字節(jié)按上述步驟計算完成后,得到的16位CRC寄存器的高、低字節(jié)進行交換;
[0095]8、最后得到的CRC寄存器內(nèi)容即為CRC16碼。
[0096]子步驟2086,生成包含所述16字節(jié)數(shù)據(jù)和所述第一校驗碼的校驗數(shù)據(jù);
[0097]子步驟2088,對所述校驗數(shù)據(jù)中的16字節(jié)數(shù)據(jù)再次進行CRC16計算,生成第二校驗碼。
[0098]在本申請實施例中,MPU可以用于讀取外置存儲設備中的升級程序文件,并對升級程序文件進行MD5校驗和CRC16計算,所述第一校驗碼可以是MPU對升級程序文件進行CRC16計算的結(jié)果,MPU生成所述校驗數(shù)據(jù)并發(fā)送給MCU,MCU此時需要多所述校驗數(shù)據(jù)中的所述16字節(jié)數(shù)據(jù)再次進行CRC16計算,生成第二校驗碼,來確保發(fā)送接收過程中所述校驗數(shù)據(jù)的正確性,當所述第一校驗碼和所述第二校驗碼一致時,所述16字節(jié)數(shù)據(jù)在發(fā)送和接收過程中沒有出錯,是正確的。
[0099]步驟210,根據(jù)所述計算結(jié)果,寫入所述升級程序文件。所述步驟210可以包括:
[0100]子步驟2102,比較所述第一校驗碼和所述第二校驗的一致性;
[0101]當比較結(jié)果為:所述第一校驗碼和所述第二校驗不一致,進行子步驟2104,升級過程失敗,所述待升級標志更新為升級失敗標志;
[0102]當比較結(jié)果為:所述第一校驗碼和所述第二校驗一致,則,進行:
[0103]子步驟2106,寫入所述校驗數(shù)據(jù)中的所述16字節(jié)數(shù)據(jù);
[0104]子步驟2108,當寫入所有提取得到的所述16字節(jié)數(shù)據(jù)后,升級成功,所述待升級標志更新為升級成功標志。
[0105]綜上所述,本申請實施例所述一種單片機在線升級方法,通過MD5校驗法對讀取得到的升級程序文件進行校驗,確保升級程序文件的正確性,再通過CRC16算法完成在線升級過程,當CRC16第一校驗碼與第二校驗碼一致時,保留升級程序文件數(shù)據(jù),避免了因升級程序文件錯誤而導致的升級錯誤或升級失敗的問題,實現(xiàn)了單片機的在線升級過程。
[0106]下面通過一個具體實施例來說明上述方法的實現(xiàn)流程,首先,MCU芯片可以選擇采用基于FLASH存儲技術的芯片,使之具備在線升級的可能性;其次,在MCU程序存儲空間的規(guī)劃上,可以分出一塊獨立的,受擦寫保護的存儲區(qū)域(boot區(qū)域),所述boot區(qū)域中可以保存擦寫FLASH的程序模塊,MPU與MCU通訊協(xié)議解析的模塊,CRC16算法模塊,以boot區(qū)域單元的程序為基礎,實現(xiàn)更新MCU程序的功能,MCU的程序存儲空間中另一部分存儲應用程序,完成在線升級過程中涉及的其它功能。已SD卡中存儲的S19升級程序文件為例,具體升級方法流程可以如下:
[0107]步驟1:插入SD卡,MPU根據(jù)程序文件特征碼讀取得到S19格式的升級程序文件和MD5標準校驗碼;
[0108]步驟2 =MPU對所述S19格式文件進行MD5校驗,生成實際MD5校驗碼,當實際MD5校驗碼與所述MD5標準校驗碼一致時,表示升級程序文件正確,MPU讀取S19格式文件中的所有有效數(shù)據(jù);
[0109]步驟3 =MPU發(fā)送指令給MCU,使之跳轉(zhuǎn)至boot區(qū)域執(zhí)行程序,同時在boot區(qū)域FLASH中最后四個字節(jié)空間記錄待升級標志,比如:0x55555555 ;
[0110]步驟4:MCU發(fā)起升級通訊請求,MPU開始發(fā)送S19格式文件數(shù)據(jù)至MCU,每次傳送16字節(jié)數(shù)據(jù),并對所述16字節(jié)數(shù)據(jù)生成CRC16第一校驗碼,并將所述第一校驗碼也傳送至MCU,即將所述16字節(jié)的S19格式文件數(shù)據(jù)和所述第一校驗碼一并傳送至MCU ;
[0111]步驟5 =MCU收到所述16字節(jié)的S19格式文件數(shù)據(jù)和所述第一校驗碼,然后對收到的16字節(jié)數(shù)據(jù)再次進行CRC16計算,生成第二校驗碼校驗碼,與收到的第一校驗碼進行比較,當所述第一校驗碼和所述第二校驗碼一致時,保留所述16字節(jié)數(shù)據(jù),當所述第一校驗碼和所述第二校驗碼不一致時,MCU可以請求MPU重新發(fā)送數(shù)據(jù),如果重試兩次收發(fā)后,所述第一校驗碼和所述第二校驗碼仍然不一致,那么MCU更新boot區(qū)域FLASH中最后四個字節(jié)為升級失敗標志,比如:0xaaaaaaaa ;
[0112]步驟6,所有字節(jié)接收完成后,MCU將所有數(shù)據(jù)更新至應用程序空間后,在線升級成功,MCU清除待升級標志為升級成功標志,比如:0oaaaaaaaa。
[0113]綜上所述,本申請實施例所述一種單片機在線升級方法,MPU通過采用MD5校驗法對升級程序文件進行校驗,然后對通過MD5校驗的升級程序文件進行CRC16計算,得到CRC16第一校驗碼,再將升級程序文件數(shù)據(jù)和所述第一校驗碼發(fā)送給MCU ;MCU再次對升級程序文件數(shù)據(jù)進行CRC16計算,得到第二校驗碼,通過比較所述第一校驗碼和所述第二校驗碼的一致性,來判斷數(shù)據(jù)傳輸過程是否正確,當所述第一校驗碼和所述第二校驗碼一致時,寫入升級程序文件數(shù)據(jù);當所述第一校驗碼和所述第二校驗碼不一致時,MCU發(fā)送請求,MPU重新發(fā)送一次數(shù)據(jù),當多次發(fā)送數(shù)據(jù)后,所述第一校驗碼和所述第二校驗碼不一致,則認為升級過程失敗。進一步的,在開始升級時,在boot區(qū)域?qū)懭氪墭酥?,在升級過程結(jié)束后,將所述待升級標志更新為升級成功標志,或升級失敗標志。通過本申請實施例提供的方法,可以確保整個升級過程中升級程序文件的正確性,從而完成單片機在線升級過程。
[0114]需要說明的是,對于前述的方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本申請并不受所描述的動作順序的限制,因為依據(jù)本申請,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作并不一定是本申請所必需的
[0115]基于上述方法實施例的說明,本申請還提供了相應的單片機在線升級系統(tǒng)的實施例,來實現(xiàn)上述方法實施例所述的內(nèi)容。
[0116]參照圖3,示出了本申請實施例所述一種單片機在線升級系統(tǒng)的結(jié)構框圖,所述單片機在線升級系統(tǒng),包括:
[0117]文件讀取模塊302,用于讀取外置存儲設備中的升級程序文件和所述升級程序文件對應的標準校驗碼;
[0118]校驗碼生成模塊304,用于對所述升級程序文件進行校驗,得到實際校驗碼;
[0119]比較模塊306,用于比較所述實際校驗碼和所述標準校驗碼,在所述實際校驗碼與所述標準校驗碼一致時,寫入待升級標志;
[0120]CRC16計算模塊308,用于對所述升級程序文件進行CRC16計算,得到計算結(jié)果;[0121]文件寫入模塊310,用于根據(jù)所述計算結(jié)果,寫入所述升級程序文件,升級結(jié)束。
[0122]綜上所述,本申請實施例所述的一種單片機在線升級系統(tǒng),讀取外置存儲設備中的升級程序文件和標準校驗碼,然后對所述升級程序文件進行校驗,生成實際校驗碼,將所述實際校驗碼與所述標準校驗碼比價來判斷讀取得到的升級程序文件是否正確,當升級程序文件正確時,再根據(jù)所述升級程序文件進行在線升級過程,避免了因升級程序文件錯誤而造成MCU在線升級過程錯誤或失敗的問題。
[0123]參照圖4,示出了本申請另一實施例所述一種單片機在線升級系統(tǒng)的結(jié)構框圖。所述單片機在線升級系統(tǒng)包括:
[0124]文件讀取模塊402,用于讀取外置存儲設備中的升級程序文件和所述升級程序文件對應的標準校驗碼;
[0125]在本申請實施例中,所述文件讀取模塊402,可以包括:
[0126]判斷子模塊4022,用于讀取外置存儲設備中的程序文件,根據(jù)升級程序文件特征碼,判斷所述程序文件是否為升級程序文件,得到判斷結(jié)果;
[0127]獲取子模塊4024,用于根據(jù)所述判斷結(jié)果,獲取得到所述升級程序文件。
[0128]校驗碼生成模塊404,用于對所述升級程序文件進行校驗,得到實際校驗碼;
[0129]比較模塊406,用于比較所述實際校驗碼和所述標準校驗碼,在所述實際校驗碼與所述標準校驗碼一致時,寫入待升級標志;
[0130]CRC16計算模塊408,用于對所述升級程序文件進行CRC16計算,得到計算結(jié)果;
[0131]在本申請實施例中,所述CRC16計算模塊408,可以包括:
[0132]提取子模塊4082,用于逐次提取所述升級程序文件,其中,每次提取所述升級程序文件中的16字節(jié)數(shù)據(jù);
[0133]第一校驗碼生成子模塊4084,用于對提取得到的所述16字節(jié)數(shù)據(jù)進行CRC16計算,生成所述16字節(jié)數(shù)據(jù)對應的CRC16第一校驗碼;
[0134]校驗數(shù)據(jù)生成子模塊4086,用于生成包含所述16字節(jié)數(shù)據(jù)和所述第一校驗碼的校驗數(shù)據(jù);
[0135]第二校驗碼生成子模塊4088,對所述校驗數(shù)據(jù)中的16字節(jié)數(shù)據(jù)再次進行CRC16計
算,生成第二校驗碼。
[0136]文件寫入模塊410,用于根據(jù)所述計算結(jié)果,寫入所述升級程序文件。
[0137]在本申請實施例中,所述文件寫入模塊410,可以包括:
[0138]CRC16校驗碼比較子模塊4102,用于比較所述第一校驗碼和所述第二校驗碼的一致性;
[0139]第一寫入子模塊4104,用于在所述第一校驗碼和所述第二校驗碼一致時,寫入所述校驗數(shù)據(jù)中的所述16字節(jié)數(shù)據(jù);
[0140]第二寫入子模塊4106,用于在所述第一校驗碼和所述第二校驗碼不一致,升級過程失敗時,將所述待升級標志更新為升級失敗標志;
[0141]第三寫入子模塊4108,用于在寫入所有提取得到的所述16字節(jié)數(shù)據(jù)后,升級成功時,將所述待升級標志更新為升級成功標志。
[0142]綜上所述,本申請實施例所述的一種單片機在線升級方法,通過對讀取得到的外置存儲設備中的升級程序文件進行校驗,判斷升級程序文件是否正確,當升級程序文件正確時,再根據(jù)所述升級程序文件進行在線升級過程,避免了因升級程序文件錯誤而造成MCU在線升級過程錯誤或失敗的問題。
[0143]對于系統(tǒng)實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
[0144]本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
[0145]以上對本申請所提供的一種單片機在線升級方法和系統(tǒng),進行了詳細介紹,本文中應用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領域的一般技術人員,依據(jù)本申請的思想,在【具體實施方式】及應用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應理解為對本申請的限制。
【權利要求】
1.一種單片機在線升級方法,其特征在于,包括: 讀取外置存儲設備中的升級程序文件和所述升級程序文件對應的標準校驗碼; 對所述升級程序文件進行校驗,得到實際校驗碼; 比較所述實際校驗碼和所述標準校驗碼,當所述實際校驗碼與所述標準校驗碼一致時,與入待升級標志; 對所述升級程序文件進行CRC16計算,得到計算結(jié)果; 根據(jù)所述計算結(jié)果,寫入所述升級程序文件。
2.根據(jù)權利要求1所述的方法,其特征在于,所述讀取外置存儲設備中的升級程序文件,包括: 讀取外置存儲設備中的程序文件,根據(jù)文件特征碼,判斷所述程序文件是否為升級程序文件,得到判斷結(jié)果; 根據(jù)所述判斷結(jié)果,獲取得到所述升級程序文件。
3.根據(jù)權利要求1所述的方法,其特征在于,所述對所述升級程序文件進行CRC16計算,得到計算結(jié)果,包括: 逐次提取所述升級程序文件,其中,每次提取所述升級程序文件中的16字節(jié)數(shù)據(jù); 對提取得到的所述16字節(jié)數(shù)據(jù)進行CRC16計算,生成所述16字節(jié)數(shù)據(jù)對應的CRC16第一校驗碼;. 生成包含所述16字節(jié)數(shù)據(jù)和所述第一校驗碼的校驗數(shù)據(jù); 對所述校驗數(shù)據(jù)中的16字節(jié)數(shù)據(jù)再次進行CRC16計算,生成第二校驗碼。
4.根據(jù)權利要求3所述的方法,其特征在于,所述根據(jù)計算結(jié)果,寫入所述升級程序文件,包括: 比較所述第一校驗碼和所述第二校驗碼的一致性,當所述第一校驗碼和所述第二校驗碼一致時,寫入所述校驗數(shù)據(jù)中的所述16字節(jié)數(shù)據(jù); 當所述第一校驗碼和所述第二校驗碼不一致時,升級過程失敗,所述待升級標志更新為升級失敗標志。
5.根據(jù)權利要求3所述的方法,其特征在于,所述根據(jù)所述計算結(jié)果,寫入所述升級程序文件,包括: 當寫入所有提取得到的所述16字節(jié)數(shù)據(jù)后,升級成功,所述待升級標志更新為升級成功標志。
6.一種單片機在線升級系統(tǒng),其特征在于,包括: 文件讀取模塊,用于讀取外置存儲設備中的升級程序文件和所述升級程序文件對應的標準校驗碼; 校驗碼生成模塊,用于對所述升級程序文件進行校驗,得到實際校驗碼; 比較模塊,用于比較所述實際校驗碼和所述標準校驗碼,在所述實際校驗碼與所述標準校驗碼一致時,寫入待升級標志; CRC16計算模塊,用于對所述升級程序文件進行CRC16計算,得到計算結(jié)果; 文件寫入模塊,用于根據(jù)所述計算結(jié)果,寫入所述升級程序文件。
7.根據(jù)權利要求6所述的系統(tǒng),其特征在于,所述文件讀取模塊,包括: 判斷子模塊,用于讀取外置存儲設備中的程序文件,根據(jù)升級程序文件特征碼,判斷所述程序文件是否為升級程序文件,得到判斷結(jié)果; 獲取子模塊,用于根據(jù)所述判斷結(jié)果,獲取得到所述升級程序文件。
8.根據(jù)權利要求6所述的系統(tǒng),其特征在于,所述CRC16計算模塊,包括: 提取子模塊,用于逐次提取所述升級程序文件,其中,每次提取所述升級程序文件中的16字節(jié)數(shù)據(jù); 第一校驗碼生成子模塊,用于對提取得到的所述16字節(jié)數(shù)據(jù)進行CRC16計算,生成所述16字節(jié)數(shù)據(jù)對應的CRC16第一校驗碼; 校驗數(shù)據(jù)生成子模塊,用于生成包含所述16字節(jié)數(shù)據(jù)和所述第一校驗碼的校驗數(shù)據(jù); 第二校驗碼生成子模塊,對所述校驗數(shù)據(jù)中的16字節(jié)數(shù)據(jù)再次進行CRC16計算,生成第二校驗碼。
9.根據(jù)權利要求8所述的系統(tǒng),其特征在于,所述文件寫入模塊,包括: CRC16校驗碼比較子模塊,用于比較所述第一校驗碼和所述第二校驗碼的一致性;第一寫入子模塊,用于在所述第一校驗碼和所述第二校驗碼一致時,寫入所述校驗數(shù)據(jù)中的所述16字節(jié)數(shù)據(jù); 第二寫入子模塊,用于在所述第一校驗碼和所述第二校驗碼不一致,升級過程失敗時,將所述待升級標志更新為升級失敗標志。
10.根據(jù)權利要求8所述的系統(tǒng),其特征在于,所述文件寫入模塊,包括: 第三寫入子模塊,用于在.寫入所有提取得到的所述16字節(jié)數(shù)據(jù)后,升級成功時,將所述待升級標志更新為升級成功標志。
【文檔編號】G06F9/445GK103473088SQ201310389816
【公開日】2013年12月25日 申請日期:2013年8月30日 優(yōu)先權日:2013年8月30日
【發(fā)明者】劉謙 申請人:北京遠特科技有限公司