一種基于can總線的程序下載方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及電動(dòng)汽車的電池管理系統(tǒng)技術(shù)領(lǐng)域,具體涉及一種基于CAN總線的程序下載方法。
【背景技術(shù)】
[0002]目前,在電動(dòng)汽車領(lǐng)域,通過(guò)CAN總線將程序下載到電池管理系統(tǒng)是常見(jiàn)的程序下載方式。但現(xiàn)有的基于CAN總線的程序下載方式,在程序燒寫(xiě)過(guò)程中目標(biāo)代碼錯(cuò)誤或刷寫(xiě)過(guò)程中意外中斷時(shí),不能進(jìn)入刷寫(xiě)模式重新刷寫(xiě)。電池管理系統(tǒng)上電后需要先判斷系統(tǒng)進(jìn)入BootLoad模式還是應(yīng)用程序模式,現(xiàn)有技術(shù)中對(duì)系統(tǒng)上電后的模式判斷需要一定的時(shí)間,導(dǎo)致系統(tǒng)上電進(jìn)入應(yīng)用程序具有一定的延遲,影響用戶使用的體驗(yàn)效果。此外,現(xiàn)有的基于CAN總線的程序下載容易出現(xiàn)FLASH的意外操作,造成FLASH的錯(cuò)誤改寫(xiě)。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是克服現(xiàn)有技術(shù)的不足和缺陷,提供一種基于CAN總線的程序下載方法。
[0004]本發(fā)明的目的是通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn)的:
[0005 ] 一種基于CAN總線的程序下載方法,包括以下步驟:
[0006]SI系統(tǒng)上電時(shí)判斷程序更新標(biāo)志變量Up_Flg是否有效和目標(biāo)代碼程序標(biāo)志變量Code_ok是否有效,若程序更新標(biāo)志變量Up_Flg無(wú)效且目標(biāo)代碼程序標(biāo)志變量Code_ok有效則進(jìn)入應(yīng)用模式,否則進(jìn)入BootLoad模式;
[0007]BootLoad 模式:
[0008]S2判斷在第一預(yù)定時(shí)間內(nèi)是否收到FLASH驅(qū)動(dòng)代碼,若是則執(zhí)行步驟S3,否則返回步驟SI ;
[0009]S3目標(biāo)代碼程序標(biāo)志變量Code_ok置O;
[0010]S4擦除應(yīng)用程序目標(biāo)代碼;
[0011]S5接收新程序代碼;
[0012]S6執(zhí)行新應(yīng)用程序。
[0013]具體地,所述步驟S5包括以下步驟:
[0014]S51判斷是否接收完一行代碼,若接收完成則執(zhí)行步驟S52,否則繼續(xù)執(zhí)行步驟S51;
[0015]S52更新相應(yīng)行代碼;
[0016]S53判斷新代碼是否全部接收完成,若是則執(zhí)行步驟S54,否則返回步驟S51;
[0017]S54發(fā)結(jié)束標(biāo)志到上位機(jī),并跳轉(zhuǎn)到目標(biāo)代碼。
[0018]具體地,所述步驟S6包括以下步驟:
[0019]S61’若上位機(jī)接收到結(jié)束標(biāo)志,則延時(shí)第二預(yù)定時(shí)間后發(fā)送相應(yīng)命令到應(yīng)用層;
[0020]S61判斷在第二預(yù)定時(shí)間內(nèi)是否收到上位機(jī)響應(yīng)命令,若是則執(zhí)行步驟S62,否則執(zhí)行步驟S63 ;
[0021 ] S62目標(biāo)代碼程序標(biāo)志變量Code_ok置I,即證明更新的目標(biāo)代碼有效;
[0022]S63目標(biāo)代碼程序標(biāo)志變量Code_ok保持為O,即證明更新的目標(biāo)代碼無(wú)效。
[0023]具體地,所述第一預(yù)定時(shí)間為多少10ms。
[0024]具體地,所述第二預(yù)定時(shí)間為IS。
[0025]本發(fā)明相比現(xiàn)有技術(shù)包括以下優(yōu)點(diǎn)及有益效果:
[0026](I)本發(fā)明基于CAN總線下載程序,可以任意刷寫(xiě),即使燒寫(xiě)進(jìn)去的目標(biāo)代碼錯(cuò)誤或刷寫(xiě)中意外中斷,也可以重新刷寫(xiě),不會(huì)造成不能重新進(jìn)入BootLoad模式。
[0027](2)通過(guò)讀取標(biāo)志為來(lái)判斷是進(jìn)入BootLoad模式還是應(yīng)用程序模式,使系統(tǒng)上電進(jìn)入應(yīng)用程序沒(méi)有延時(shí),達(dá)到零啟動(dòng)效果。
[0028](3)FLASH驅(qū)動(dòng)代碼由上位機(jī)導(dǎo)入,若應(yīng)用層未接收到上位機(jī)的FLASH驅(qū)動(dòng)代碼則無(wú)法改寫(xiě)目標(biāo)程序,可防止目標(biāo)程序誤改寫(xiě),保護(hù)目標(biāo)程序的安全。
[0029](4)程序刷寫(xiě)時(shí)前將目標(biāo)代碼程序標(biāo)志變量Code_ok置0,程序刷寫(xiě)成功后將目標(biāo)代碼程序標(biāo)志變量Code_ok置I,否則將目標(biāo)代碼程序標(biāo)志變量Code_ok保持為O,在程序刷寫(xiě)了無(wú)效程序或死循環(huán)程序的情況下,當(dāng)系統(tǒng)重新上電時(shí),目標(biāo)代碼程序標(biāo)志變量無(wú)效,可直接進(jìn)入BootLoad模式,重新刷寫(xiě)程序。
【附圖說(shuō)明】
[0030]圖1為實(shí)施例中基于CAN總線的程序下載方法的流程圖;
[0031]圖2為圖1的步驟Stept5的流程圖;
[0032]圖3為圖1的步驟Stept6的流程圖。
【具體實(shí)施方式】
[0033]下面結(jié)合實(shí)施例及附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的描述,但本發(fā)明的實(shí)施方式不限于此。
[0034]實(shí)施例
[0035]如圖1所示,一種基于CAN總線的程序下載方法,具體過(guò)程如下:
[0036]Stepl在應(yīng)用層中判斷程序更新標(biāo)志變量Up_Flg是否有效(Up_Flg= = I?)和目標(biāo)代碼程序標(biāo)志變量Code_ok是否有效(S卩Code_ok= = 1?),若程序更新標(biāo)志變量Up_Flg無(wú)效(Up_Flg= =0)且目標(biāo)代碼程序標(biāo)志變量Code_ok有效(Code_ok= = 1),則跳轉(zhuǎn)到應(yīng)用程序,進(jìn)入應(yīng)用模式,否則進(jìn)入BootLoad模式。通過(guò)讀取標(biāo)志位來(lái)判斷是進(jìn)入BootLoad模式還是應(yīng)用程序模式,使系統(tǒng)上電進(jìn)入應(yīng)用程序沒(méi)有延時(shí),達(dá)到零啟動(dòng)效果。
[0037]其中,BootLoad模式的具體過(guò)程如下:
[0038]Step2判斷在第一預(yù)定時(shí)間內(nèi)是否收到FLASH驅(qū)動(dòng)代碼,若是則執(zhí)行步驟Step3,否則返回步驟Stepl。在本實(shí)施例中,所述第一預(yù)定時(shí)間可設(shè)置為10ms,也可根據(jù)實(shí)際需要設(shè)置為其他時(shí)間長(zhǎng)度。FLASH驅(qū)動(dòng)代碼由上位機(jī)導(dǎo)入,若應(yīng)用層未接收到上位機(jī)的FLASH驅(qū)動(dòng)代碼則無(wú)法改寫(xiě)目標(biāo)程序,可防止目標(biāo)程序誤改寫(xiě),保護(hù)目標(biāo)程序的安全。
[0039]Step3將目標(biāo)代碼程序標(biāo)志變量Code_ok置0(即Code_ok = 0),使目標(biāo)代碼處于無(wú)效。具體為擦除目標(biāo)代碼程序標(biāo)志變量所在地址塊的代碼。
[0040]Step4擦除應(yīng)用程序目標(biāo)代碼。
[0041]Step 15接收新程序代碼,如圖2所示,包括以下步驟:
[0042]S51判斷是否接收完一行代碼,若接收完成則執(zhí)行步驟S52,否則繼續(xù)執(zhí)行步驟S51;
[0043]S52更新相應(yīng)行代碼;
[0044]S53判斷新代碼是否全部接收完成,若是則執(zhí)行步驟S54,否則返回步驟S51;
[0045]S54發(fā)結(jié)束標(biāo)志到上位機(jī),并跳轉(zhuǎn)到目標(biāo)代碼。
[0046]Step6執(zhí)行新應(yīng)用程序,具體包括以下步驟:
[0047]S61’若上位機(jī)接收到結(jié)束標(biāo)志,則延時(shí)第二預(yù)定時(shí)間后發(fā)送相應(yīng)命令到應(yīng)用層的應(yīng)用程序。在本實(shí)施例中,所述第二預(yù)定時(shí)間設(shè)定為ls,也可根據(jù)實(shí)際需要設(shè)定為其他時(shí)間長(zhǎng)度。
[0048]S61判斷在第二預(yù)定時(shí)間內(nèi)是否收到上位機(jī)響應(yīng)命令,若是則執(zhí)行步驟S62,否則執(zhí)行步驟S63。
[0049]S62將目標(biāo)代碼程序標(biāo)志變量Code_ok置I (Code_ok= I),即證明更新的目標(biāo)代碼有效。
[0050]S63將目標(biāo)代碼程序標(biāo)志變量Code_ok保持為0(Code_ok = 0),即證明更新的目標(biāo)代碼無(wú)效。
[0051]所述新應(yīng)用程序中設(shè)置一段代碼用于接收上位機(jī)的響應(yīng)命令對(duì)應(yīng)的特定幀,若接收到特定幀,則將目標(biāo)代碼程序標(biāo)志變量Code_ok重新寫(xiě)回去,即將Code_ok置I (Code_ok =I),代表新刷寫(xiě)的應(yīng)用程序有效;若未接收到上位機(jī)的相應(yīng)命令對(duì)應(yīng)的特定幀,則將目標(biāo)代碼程序標(biāo)志變量Code_ok保持為0(Code_ok= =0),即代表新刷寫(xiě)的應(yīng)用程序是無(wú)效程序或死循環(huán)程序,目標(biāo)代碼程序標(biāo)志變量無(wú)法寫(xiě)入,在這種情況下,當(dāng)系統(tǒng)重新上電時(shí),目標(biāo)代碼程序標(biāo)志變量無(wú)效,則直接進(jìn)入BootLoad模式。因此,即使刷寫(xiě)的目標(biāo)代碼是錯(cuò)誤代碼或是刷寫(xiě)過(guò)程意外中斷,也可以重新刷寫(xiě),不會(huì)造成不能重新進(jìn)入BootLoad模式。
[0052]上述實(shí)施例為本發(fā)明較佳的實(shí)施方式,但本發(fā)明的實(shí)施方式并不受上述實(shí)施例的限制,其他的任何未背離本發(fā)明的精神實(shí)質(zhì)與原理下所作的改變、修飾、替代、組合、簡(jiǎn)化,均應(yīng)為等效的置換方式,都包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1.一種基于CAN總線的程序下載方法,其特征在于,包括以下步驟: SI系統(tǒng)上電時(shí)判斷程序更新標(biāo)志變量Up_Flg是否有效和目標(biāo)代碼程序標(biāo)志變量Code_ok是否有效,若程序更新標(biāo)志變量Up_Flg無(wú)效且目標(biāo)代碼程序標(biāo)志變量Code_ok有效則進(jìn)入應(yīng)用模式,否則進(jìn)入BootLoad模式; BootLoad 模式: S2判斷在第一預(yù)定時(shí)間內(nèi)是否收到FLASH驅(qū)動(dòng)代碼,若是則執(zhí)行步驟S3,否則返回步驟SI; S3目標(biāo)代碼程序標(biāo)志變量Code_ok置O; S4擦除應(yīng)用程序目標(biāo)代碼; S5接收新程序代碼; S6執(zhí)行新應(yīng)用程序。2.根據(jù)權(quán)利要求1所述的基于CAN總線的程序下載方法,其特征在于,所述步驟S5包括以下步驟: S51判斷是否接收完一行代碼,若接收完成則執(zhí)行步驟S52,否則繼續(xù)執(zhí)行步驟S51; S52更新相應(yīng)行代碼; S53判斷新代碼是否全部接收完成,若是則執(zhí)行步驟S54,否則返回步驟S51; S54發(fā)結(jié)束標(biāo)志到上位機(jī),并跳轉(zhuǎn)到目標(biāo)代碼。3.根據(jù)權(quán)利要求1所述的基于CAN總線的程序下載方法,其特征在于,所述步驟S6包括以下步驟: S61’若上位機(jī)接收到結(jié)束標(biāo)志,則延時(shí)第二預(yù)定時(shí)間后發(fā)送相應(yīng)命令到應(yīng)用層; S61判斷在第二預(yù)定時(shí)間內(nèi)是否收到上位機(jī)響應(yīng)命令,若是則執(zhí)行步驟S62,否則執(zhí)行步驟S63; S62目標(biāo)代碼程序標(biāo)志變量Code_ok置I,即證明更新的目標(biāo)代碼有效; S63目標(biāo)代碼程序標(biāo)志變量Code_ok保持為O,即證明更新的目標(biāo)代碼無(wú)效。4.根據(jù)權(quán)利要求2或3所述的基于CAN總線的程序下載方法,其特征在于:所述第一預(yù)定時(shí)間為10ms。5.根據(jù)權(quán)利要求2或3所述的基于CAN總線的程序下載方法,其特征在于:所述第二預(yù)定時(shí)間為Is。
【專利摘要】本發(fā)明涉及基于CAN總線的程序下載方法,包括以下步驟:S1系統(tǒng)上電時(shí)判斷程序更新標(biāo)志變量Up_Flg是否有效和目標(biāo)代碼程序標(biāo)志變量Code_ok是否有效,若程序更新標(biāo)志變量Up_Flg無(wú)效且目標(biāo)代碼程序標(biāo)志變量Code_ok有效則進(jìn)入應(yīng)用模式,否則進(jìn)入BootLoad模式;BootLoad模式:S2判斷在第一預(yù)定時(shí)間內(nèi)是否收到FLASH驅(qū)動(dòng)代碼,若是則執(zhí)行步驟S3,否則返回步驟S1;S3目標(biāo)代碼程序標(biāo)志變量Code_ok置0;S4擦除應(yīng)用程序目標(biāo)代碼;S5接收新程序代碼;S6執(zhí)行新應(yīng)用程序。本發(fā)明基于CAN總線下載程序,可任意刷寫(xiě),即使燒寫(xiě)進(jìn)去的目標(biāo)代碼錯(cuò)誤或刷寫(xiě)中意外中斷也可以重新刷寫(xiě)且通過(guò)讀取標(biāo)志為來(lái)判斷是進(jìn)入BootLoad模式還是應(yīng)用程序模式,使系統(tǒng)上電進(jìn)入應(yīng)用程序沒(méi)有延時(shí),達(dá)到零啟動(dòng)效果。
【IPC分類】G06F9/445
【公開(kāi)號(hào)】CN105511912
【申請(qǐng)?zhí)枴緾N201510855873
【發(fā)明人】徐文賦, 任素云
【申請(qǐng)人】惠州市藍(lán)微新源技術(shù)有限公司
【公開(kāi)日】2016年4月20日
【申請(qǐng)日】2015年11月28日