本發(fā)明將光電傳輸與bootloader程序功能相結(jié)合,涉及一種對(duì)主控mcu應(yīng)用程序升級(jí)的方法,具體涉及一種對(duì)超聲波燃?xì)獗碇骺匕鍛?yīng)用程序進(jìn)行無(wú)拆卸程序升級(jí)的方法。
背景技術(shù):
bootloader是嵌入式系統(tǒng)在上電后執(zhí)行的第一段代碼,是在應(yīng)用程序運(yùn)行之前運(yùn)行的。在操作系統(tǒng)中,它可以初始化硬件設(shè)備、建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。我們這里利用bootloader功能來(lái)使用瑞薩公司提供的self_programming_library函數(shù)庫(kù)來(lái)進(jìn)行主控mcu應(yīng)用程序的在線燒寫。
燃?xì)獗砭吖驹谘邪l(fā)智能表具時(shí),勢(shì)必要對(duì)表具上的主控mcu應(yīng)用程序進(jìn)行修改升級(jí)再調(diào)試,然而主控mcu一般都安裝在表具內(nèi)部的,拆卸表具這一繁瑣的過程對(duì)研發(fā)來(lái)說非常不便。而本發(fā)明正好解決了這一難題,本發(fā)明在不對(duì)表具進(jìn)行拆卸的情況下可以通過光電傳輸將新版的升級(jí)程序通過bootloader功能下載到主控mcu中,從而實(shí)現(xiàn)了對(duì)主控mcu應(yīng)用程序的升級(jí)。本發(fā)明還可運(yùn)用于升級(jí)已掛裝在用戶家中智能燃?xì)獗碇骺豰cu應(yīng)用程序,大大提高了操作工人的效率以及操作過程中的安全性,更加便利便民。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是為了克服對(duì)智能燃?xì)獗碇骺豰cu的應(yīng)用程序進(jìn)行升級(jí)時(shí)拆卸表具這一繁瑣過程,提高了工作效率,也提高了安全性。
本發(fā)明在智能燃?xì)獗碇骺豰cu的應(yīng)用程序升級(jí)過程中,以bootloader功能為核心。本發(fā)明支持多種產(chǎn)品的多種主控mcu,只要主控mcu具有bootloader這一功能,那么產(chǎn)品在無(wú)拆卸的情況下都可以通過光電傳輸對(duì)主控mcu的應(yīng)用程序進(jìn)行升級(jí)。
一種基于光電傳輸?shù)腷ootloader程序升級(jí)方法,本發(fā)明是主控mcu模塊利用bootloader這一功能通過光電傳輸模塊與上位機(jī)模塊進(jìn)行通訊,上位機(jī)模塊中的主控mcu程序升級(jí)數(shù)據(jù)包以xmodem協(xié)議下載到主控mcu模塊中,并且主控mcu模塊與上位機(jī)模塊需要同步切換波特率以提高升級(jí)速率,具體的:上位機(jī)模塊向主控mcu模塊發(fā)送握手命令之后,主控mcu模塊將向上位機(jī)模塊返回一條握手命令;上位機(jī)模塊正確接收到主控mcu模塊的握手命令后,會(huì)向主控mcu模塊發(fā)送進(jìn)入boot的命令;隨后主控mcu模塊進(jìn)入boot,向上位機(jī)模塊返回一條確認(rèn)進(jìn)入boot的命令;上位機(jī)模塊啟動(dòng)xmodem協(xié)議,開始傳輸主控mcu程序升級(jí)數(shù)據(jù)包并刷寫主控mcu模塊的rom。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案如下:
本發(fā)明實(shí)現(xiàn)過程包括三個(gè)模塊:上位機(jī)模塊、光電傳輸模塊和主控mcu模塊;且光電傳輸模塊集成在主控mcu模塊中,上位機(jī)模塊通過光電傳輸模塊將主控mcu程序升級(jí)數(shù)據(jù)包傳輸給主控mcu模塊,主控mcu模塊進(jìn)行升級(jí)。
所述的上位機(jī)模塊包括數(shù)據(jù)格式轉(zhuǎn)化單元、傳輸單元,且上位機(jī)模塊配套設(shè)置有usb接口的集成光電頭,從而使得上位機(jī)模塊與光電傳輸模塊之間能夠進(jìn)行數(shù)據(jù)通訊;
所述的主控mcu模塊與上位機(jī)模塊的相對(duì)應(yīng),主控mcu模塊通過光電傳輸模塊收到上位機(jī)模塊中傳輸單元發(fā)送的握手命令后,進(jìn)入boot等待狀態(tài),繼而返回一個(gè)握手信號(hào)給上位機(jī)模塊;當(dāng)接收到上位機(jī)模塊進(jìn)入boot的命令,主控mcu模塊將boot標(biāo)志位置位,并進(jìn)入boot狀態(tài),再返回一個(gè)確認(rèn)已經(jīng)進(jìn)入boot的命令給上位機(jī)模塊;主控mcu模塊進(jìn)入boot后(主控mcu已經(jīng)自動(dòng)轉(zhuǎn)化為9600bps波特率),主控mcu模塊發(fā)送一串進(jìn)入boot的起始數(shù)據(jù)“bootload”給上位機(jī)模塊,上位機(jī)模塊接收到后將主控mcu程序升級(jí)數(shù)據(jù)包傳輸給主控mcu模塊;主控mcu模塊利用中斷接收的方式將接收到的主控mcu程序升級(jí)數(shù)據(jù)包寫入rom中,并完成程序燒寫。
所述的光電傳輸模塊集成在主控mcu模塊中,上位機(jī)模塊usb接口的集成光電頭首先將主控mcu程序升級(jí)數(shù)據(jù)包的電信號(hào)轉(zhuǎn)化為光信號(hào),然后傳輸給光電傳輸模塊,光電傳輸模塊將接收的光信號(hào)轉(zhuǎn)化為電信號(hào),然后傳輸給主控mcu模塊;
所述的光電傳輸模塊的電路描述:
光電傳輸模塊分為紅外發(fā)射和紅外接收兩個(gè)單元:
紅外發(fā)射單元由三個(gè)電阻(電阻r1、電阻r2、電阻r3)、一個(gè)三極管(q1)以及一個(gè)紅外發(fā)射管(d1)構(gòu)成;電阻r1的一端與電阻r2的一端相連,并且這一端接到主控mcu模塊的單片機(jī)串口的發(fā)送口tx;電阻r1的另一端接紅外發(fā)射管d1的正極,并且這一端接電源的正極;紅外發(fā)射管d1的負(fù)極接電阻r3的一端,電阻r3的另一端接pnp三極管q1的發(fā)射極,pnp三極管q1的基級(jí)接電阻r2的另一端,pnp三極管q1的集電極接地;所述的紅外發(fā)射管型為d1at205。
紅外接收單元由三個(gè)電阻(電阻r4、電阻r5、電阻r6)、兩個(gè)電容(c1、c2)、一個(gè)三極管(q2)以及一個(gè)光敏接收管(d2)構(gòu)成;電阻r5的一端與地連接,同時(shí)與電容c1的一端和npn三極管q2的發(fā)射管相連;電阻r5的另一端與電容c1的另一端相連,同時(shí)與npn三極管q2的基極和電阻r4的一端相連;電阻r4的另一端與光敏接收管d2的正極連接;光敏二極管的負(fù)極與電源正極相連,同時(shí)與電阻r6的一端相連;電阻r6的另一端與電容c2的一端相連,同時(shí)與主控mcu模塊的單片機(jī)的串口接收端rx以及npn三極管q2的集電極相連;電容c2的另一端與地相連。
所述的xmodem協(xié)議:
xmodem協(xié)議最早由wardchristensen在20世紀(jì)70年代提出并實(shí)現(xiàn),傳輸數(shù)據(jù)單位為信息包,信息包的格式如下:
|byte1|byte2|byte3|byte4~byte131|byte132||startofheader|packetnumber|~(packetnumber)|packetdata|checksum|
startofheader定義為0x01;packetnumber為數(shù)據(jù)包的編號(hào);~(packetnumber)為數(shù)據(jù)包的編號(hào)取反;checksum為和校驗(yàn),和校驗(yàn)計(jì)算方法為packetdata(128字節(jié))的累加和,由于校驗(yàn)和只占一個(gè)字節(jié),如果累加的和超過255,將從零開始繼續(xù)累加,不計(jì)進(jìn)位。
所述的數(shù)據(jù)格式轉(zhuǎn)化單元:
程序下載文件格式為.hxf文件格式,需要轉(zhuǎn)化為二進(jìn)制代碼才能通過光電燒錄入單片機(jī)rom中,本上位機(jī)模塊使用i/ostream來(lái)實(shí)現(xiàn)此轉(zhuǎn)換,具體數(shù)據(jù)轉(zhuǎn)換格式如下:
.hxf文件讀取規(guī)則:
例“:abcdefghijklmnopqrxtuvwxyzabcdefghijklmnop”可以被看作“0xab0xcd0xef0xgh0xij0xkl0xmn0xop0xqr0xst0xuv0xwx0xyz0xab0xcd0xef0xgh0xij0xkl0xmn0xop”
第一個(gè)字節(jié)0xab表示本行數(shù)據(jù)的長(zhǎng)度;
第二、三字節(jié)0xcd0xef表示本行數(shù)據(jù)的起始地址;
第四字節(jié)0xgh表示數(shù)據(jù)類型,數(shù)據(jù)類型有:0x00、0x01、0x02、0x03、0x04、0x05。以下分別為各數(shù)據(jù)類型:
'00'datarrecord:用來(lái)記錄數(shù)據(jù),hex文件的大部分記錄都是數(shù)據(jù)記錄
'01'endoffilerecord:用來(lái)標(biāo)識(shí)文件結(jié)束,放在文件的最后,標(biāo)識(shí)hex文件的結(jié)尾
'02'extendedsegmentaddressrecord:用來(lái)標(biāo)識(shí)擴(kuò)展段地址的記錄
'03'startsegmentaddressrecord:開始段地址記錄
'04'extendedlinearaddressrecord:用來(lái)標(biāo)識(shí)擴(kuò)展線性地址的記錄
'05'startlinearaddressrecord:開始線性地址記錄
數(shù)據(jù)類型之后的為數(shù)據(jù),最后一個(gè)字節(jié)0xop為校驗(yàn)和。若數(shù)據(jù)地址不連續(xù),則用0xff填滿。
所述的主控mcu模塊與上位機(jī)模塊之間交互的協(xié)議:
首先要確定主控mcu模塊與上位機(jī)模塊通訊的波特率。在主控mcu模塊進(jìn)入bootloader之前,僅僅是主控mcu模塊與上位機(jī)模塊之間簡(jiǎn)單的握手信號(hào),所以通訊的波特率定為2400bps。當(dāng)主控mcu模塊進(jìn)入bootloader之后,開始主控mcu程序升級(jí)數(shù)據(jù)包的傳輸,則主控mcu模塊與上位機(jī)模塊的波特率提升為9600bps,以提高主控mcu程序升級(jí)數(shù)據(jù)包傳輸刷寫的速度。
主控mcu模塊與上位機(jī)模塊握手的機(jī)制為:
上位機(jī)模塊發(fā)送一個(gè)握手命令之后,進(jìn)入等待超時(shí)狀態(tài);若主控mcu模塊返回握手信號(hào),則上位機(jī)模塊繼續(xù)發(fā)送進(jìn)入boot的命令給主控mcu模塊,若等待超時(shí),則重新發(fā)送握手信號(hào)。上位機(jī)模塊發(fā)送進(jìn)入boot的命令之后,等待主控mcu模塊返回確認(rèn)進(jìn)入boot的命令,若上位機(jī)模塊收到確認(rèn)進(jìn)入boot的命令,則上位機(jī)模塊進(jìn)入準(zhǔn)備數(shù)據(jù)傳輸狀態(tài)。一旦上位機(jī)模塊接收到主控mcu模塊的“start”信號(hào)(即“bootload”信號(hào)),就開啟xmodem協(xié)議傳輸。當(dāng)主控mcu模塊返回一個(gè)“end”信號(hào)時(shí),表示主控mcu程序升級(jí)數(shù)據(jù)包正確發(fā)送完成,上位機(jī)將退出xmodem協(xié)議,停止傳輸。
本發(fā)明工作過程如下:
本發(fā)明方法在對(duì)主控mcu應(yīng)用程序進(jìn)行升級(jí)時(shí)考慮到了使用光電傳輸這一無(wú)線通訊方式,并結(jié)合了主控mcu本身所具有的bootloader功能,避免了拆裝燃?xì)獗砭叩姆爆嵭耘c安全性問題,也是對(duì)主控mcu應(yīng)用程序升級(jí)的一種創(chuàng)新。
同時(shí),主控mcu模塊中的光電傳輸模塊是一種基于光敏收發(fā)管的硬件電路,是本發(fā)明所有通訊的基礎(chǔ)硬件電路,包括握手命令的傳輸、xmodem協(xié)議傳輸以及主控mcu模塊升級(jí)都依賴于該電路。該硬件電路能運(yùn)用于多種數(shù)據(jù)傳輸,最大通訊波特率可達(dá)1mbps左右。
附圖說明
圖1為xmodem協(xié)議圖解。
圖2為本發(fā)明流程圖解。
圖3為光電傳輸模塊電路圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步說明。
如圖1-3所示,一種基于光電傳輸?shù)腷ootloader程序升級(jí)方法,本發(fā)明是主控mcu模塊利用bootloader這一功能通過光電傳輸模塊與上位機(jī)模塊進(jìn)行通訊,上位機(jī)模塊中的主控mcu程序升級(jí)數(shù)據(jù)包以xmodem協(xié)議下載到主控mcu模塊中,并且主控mcu模塊與上位機(jī)模塊需要同步切換波特率以提高升級(jí)速率,具體的:上位機(jī)模塊向主控mcu模塊發(fā)送握手命令之后,主控mcu模塊將向上位機(jī)模塊返回一條握手命令;上位機(jī)模塊正確接收到主控mcu模塊的握手命令后,會(huì)向主控mcu模塊發(fā)送進(jìn)入boot的命令;隨后主控mcu模塊進(jìn)入boot,向上位機(jī)模塊返回一條確認(rèn)進(jìn)入boot的命令;上位機(jī)模塊啟動(dòng)xmodem協(xié)議,開始傳輸主控mcu程序升級(jí)數(shù)據(jù)包并刷寫主控mcu模塊的rom。
本發(fā)明實(shí)現(xiàn)過程包括三個(gè)模塊:上位機(jī)模塊、光電傳輸模塊和主控mcu模塊;且光電傳輸模塊集成在主控mcu模塊中,上位機(jī)模塊通過光電傳輸模塊將主控mcu程序升級(jí)數(shù)據(jù)包傳輸給主控mcu模塊,主控mcu模塊進(jìn)行升級(jí)。
所述的上位機(jī)模塊包括數(shù)據(jù)格式轉(zhuǎn)化單元、傳輸單元,且上位機(jī)模塊配套設(shè)置有usb接口的集成光電頭,從而使得上位機(jī)模塊與光電傳輸模塊之間能夠進(jìn)行數(shù)據(jù)通訊;
所述的主控mcu模塊與上位機(jī)模塊的相對(duì)應(yīng),主控mcu模塊通過光電傳輸模塊收到上位機(jī)模塊中傳輸單元發(fā)送的握手命令后,進(jìn)入boot等待狀態(tài),繼而返回一個(gè)握手信號(hào)給上位機(jī)模塊;當(dāng)接收到上位機(jī)模塊進(jìn)入boot的命令,主控mcu模塊將boot標(biāo)志位置位,并進(jìn)入boot狀態(tài),再返回一個(gè)確認(rèn)已經(jīng)進(jìn)入boot的命令給上位機(jī)模塊;主控mcu模塊進(jìn)入boot后(主控mcu已經(jīng)自動(dòng)轉(zhuǎn)化為9600bps波特率),主控mcu模塊發(fā)送一串進(jìn)入boot的起始數(shù)據(jù)“bootload”給上位機(jī)模塊,上位機(jī)模塊接收到后將主控mcu程序升級(jí)數(shù)據(jù)包傳輸給主控mcu模塊;主控mcu模塊利用中斷接收的方式將接收到的主控mcu程序升級(jí)數(shù)據(jù)包寫入rom中,并完成程序燒寫。
所述的光電傳輸模塊集成在主控mcu模塊中,上位機(jī)模塊usb接口的集成光電頭首先將主控mcu程序升級(jí)數(shù)據(jù)包的電信號(hào)轉(zhuǎn)化為光信號(hào),然后傳輸給光電傳輸模塊,光電傳輸模塊將接收的光信號(hào)轉(zhuǎn)化為電信號(hào),然后傳輸給主控mcu模塊;
如圖3所示,所述的光電傳輸模塊分為紅外發(fā)射和紅外接收兩個(gè)單元:
紅外發(fā)射單元由三個(gè)電阻(電阻r1、電阻r2、電阻r3)、一個(gè)三極管(q1)以及一個(gè)紅外發(fā)射管(d1)構(gòu)成;電阻r1的一端與電阻r2的一端相連,并且這一端接到主控mcu模塊的單片機(jī)串口的發(fā)送口tx;電阻r1的另一端接紅外發(fā)射管d1的正極,并且這一端接電源的正極;紅外發(fā)射管d1的負(fù)極接電阻r3的一端,電阻r3的另一端接pnp三極管q1的發(fā)射極,pnp三極管q1的基級(jí)接電阻r2的另一端,pnp三極管q1的集電極接地;所述的紅外發(fā)射管型為d1at205。
紅外接收單元由三個(gè)電阻(電阻r4、電阻r5、電阻r6)、兩個(gè)電容(c1、c2)、一個(gè)三極管(q2)以及一個(gè)光敏接收管(d2)構(gòu)成;電阻r5的一端與地連接,同時(shí)與電容c1的一端和npn三極管q2的發(fā)射管相連;電阻r5的另一端與電容c1的另一端相連,同時(shí)與npn三極管q2的基極和電阻r4的一端相連;電阻r4的另一端與光敏接收管d2的正極連接;光敏二極管的負(fù)極與電源正極相連,同時(shí)與電阻r6的一端相連;電阻r6的另一端與電容c2的一端相連,同時(shí)與主控mcu模塊的單片機(jī)的串口接收端rx以及npn三極管q2的集電極相連;電容c2的另一端與地相連。
所述的xmodem協(xié)議:
xmodem協(xié)議最早由wardchristensen在20世紀(jì)70年代提出并實(shí)現(xiàn),傳輸數(shù)據(jù)單位為信息包,信息包的格式如下:
|byte1|byte2|byte3|byte4~byte131|byte132||startofheader|packetnumber|~(packetnumber)|packetdata|checksum|
startofheader定義為0x01;packetnumber為數(shù)據(jù)包的編號(hào);~(packetnumber)為數(shù)據(jù)包的編號(hào)取反;checksum為和校驗(yàn),和校驗(yàn)計(jì)算方法為packetdata(128字節(jié))的累加和,由于校驗(yàn)和只占一個(gè)字節(jié),如果累加的和超過255,將從零開始繼續(xù)累加,不計(jì)進(jìn)位。
所述的數(shù)據(jù)格式轉(zhuǎn)化單元:
程序下載文件格式為.hxf文件格式,需要轉(zhuǎn)化為二進(jìn)制代碼才能通過光電燒錄入單片機(jī)rom中,本上位機(jī)模塊使用i/ostream來(lái)實(shí)現(xiàn)此轉(zhuǎn)換,具體數(shù)據(jù)轉(zhuǎn)換格式如下:
.hxf文件讀取規(guī)則:
例“:abcdefghijklmnopqrxtuvwxyzabcdefghijklmnop”可以被看作“0xab0xcd0xef0xgh0xij0xkl0xmn0xop0xqr0xst0xuv0xwx0xyz0xab0xcd0xef0xgh0xij0xkl0xmn0xop”
第一個(gè)字節(jié)0xab表示本行數(shù)據(jù)的長(zhǎng)度;
第二、三字節(jié)0xcd0xef表示本行數(shù)據(jù)的起始地址;
第四字節(jié)0xgh表示數(shù)據(jù)類型,數(shù)據(jù)類型有:0x00、0x01、0x02、0x03、0x04、0x05。以下分別為各數(shù)據(jù)類型:
'00'datarrecord:用來(lái)記錄數(shù)據(jù),hex文件的大部分記錄都是數(shù)據(jù)記錄
'01'endoffilerecord:用來(lái)標(biāo)識(shí)文件結(jié)束,放在文件的最后,標(biāo)識(shí)hex文件的結(jié)尾
'02'extendedsegmentaddressrecord:用來(lái)標(biāo)識(shí)擴(kuò)展段地址的記錄
'03'startsegmentaddressrecord:開始段地址記錄
'04'extendedlinearaddressrecord:用來(lái)標(biāo)識(shí)擴(kuò)展線性地址的記錄
'05'startlinearaddressrecord:開始線性地址記錄
數(shù)據(jù)類型之后的為數(shù)據(jù),最后一個(gè)字節(jié)0xop為校驗(yàn)和。若數(shù)據(jù)地址不連續(xù),則用0xff填滿。
所述的主控mcu模塊與上位機(jī)模塊之間交互的協(xié)議:
首先要確定主控mcu模塊與上位機(jī)模塊通訊的波特率。在主控mcu模塊進(jìn)入bootloader之前,僅僅是主控mcu模塊與上位機(jī)模塊之間簡(jiǎn)單的握手信號(hào),所以通訊的波特率定為2400bps。當(dāng)主控mcu模塊進(jìn)入bootloader之后,開始主控mcu程序升級(jí)數(shù)據(jù)包的傳輸,則主控mcu模塊與上位機(jī)模塊的波特率提升為9600bps,以提高主控mcu程序升級(jí)數(shù)據(jù)包傳輸刷寫的速度。
主控mcu模塊與上位機(jī)模塊握手的機(jī)制為:
上位機(jī)模塊發(fā)送一個(gè)握手命令之后,進(jìn)入等待超時(shí)狀態(tài);若主控mcu模塊返回握手信號(hào),則上位機(jī)模塊繼續(xù)發(fā)送進(jìn)入boot的命令給主控mcu模塊,若等待超時(shí),則重新發(fā)送握手信號(hào)。上位機(jī)模塊發(fā)送進(jìn)入boot的命令之后,等待主控mcu模塊返回確認(rèn)進(jìn)入boot的命令,若上位機(jī)模塊收到確認(rèn)進(jìn)入boot的命令,則上位機(jī)模塊進(jìn)入準(zhǔn)備數(shù)據(jù)傳輸狀態(tài)。一旦上位機(jī)模塊接收到主控mcu模塊的“start”信號(hào)(即“bootload”信號(hào)),就開啟xmodem協(xié)議傳輸。當(dāng)主控mcu模塊返回一個(gè)“end”信號(hào)時(shí),表示主控mcu程序升級(jí)數(shù)據(jù)包正確發(fā)送完成,上位機(jī)將退出xmodem協(xié)議,停止傳輸。
實(shí)施例:
本實(shí)施實(shí)例中由一臺(tái)超聲波智能燃?xì)獗碜鳛槌绦蛏?jí)對(duì)象,一個(gè)帶usb接口的集成光電頭與電腦上位機(jī)連接通訊,集成光電頭可磁吸附在超聲波智能燃?xì)獗砉怆婋娐飞戏降耐该鞅須ど希瑢?shí)際只要在電腦上進(jìn)行上位機(jī)操作即可。
圖1為xmodem協(xié)議傳輸流程,發(fā)送方僅僅支持具有校驗(yàn)和的傳輸方式,接收方首先發(fā)送nak信號(hào)發(fā)起傳輸,如果發(fā)送方?jīng)]有數(shù)據(jù)返回過來(lái),就需要接收方經(jīng)過超時(shí)等待時(shí)間后再發(fā)起nak信號(hào)來(lái)進(jìn)行數(shù)據(jù)傳輸。如果發(fā)送方發(fā)送的數(shù)據(jù)傳輸正確,接收方需要發(fā)送ack信號(hào)來(lái)進(jìn)行確認(rèn);如果數(shù)據(jù)傳輸有誤,則接收方發(fā)送nak信號(hào)。發(fā)送方在接收到nak信號(hào)之后需要重新發(fā)起該次數(shù)據(jù)傳輸,直到該次數(shù)據(jù)正確傳輸完成。如果所有數(shù)據(jù)傳輸完成,發(fā)送方需要發(fā)送eot信號(hào)給接收方,作為本次數(shù)據(jù)傳輸?shù)慕Y(jié)束信號(hào)。而當(dāng)接收方發(fā)送can信號(hào),發(fā)送方收到can信號(hào)后,則直接無(wú)條件結(jié)束本次傳輸過程,無(wú)需再發(fā)送eot給接收方。
圖2為本發(fā)明的基本流程圖解,該流程圖解即為上述上位機(jī)模塊與主控mcu模塊程序功能的綜述。上位機(jī)發(fā)送一個(gè)握手命令之后,進(jìn)入等待超時(shí)狀態(tài)。若主控mcu接收到這個(gè)握手信號(hào),則向上位機(jī)返回一個(gè)握手信號(hào);若主控mcu沒有接收到這個(gè)握手信號(hào)或者接收到錯(cuò)誤的其他信號(hào),則不返回握手信號(hào),那么上位機(jī)將會(huì)等待超時(shí)。若上位機(jī)等待超時(shí),則將會(huì)重新發(fā)送握手信號(hào);若上位機(jī)接收到主控mcu返回的握手信號(hào),則上位機(jī)發(fā)送進(jìn)入boot的命令,等待主控mcu返回確認(rèn)進(jìn)入boot的命令。主控mcu收到進(jìn)入boot的命令,則置位boot標(biāo)志位,并進(jìn)入boot,向上位機(jī)返回一個(gè)確認(rèn)進(jìn)入boot的命令。上位機(jī)收到確認(rèn)進(jìn)入boot的命令后,上位機(jī)進(jìn)入準(zhǔn)備數(shù)據(jù)傳輸狀態(tài)。一旦上位機(jī)接收到主控mcu的“start”信號(hào),就開啟xmodem協(xié)議傳輸,并將波特率切換為9600bps。在對(duì)主控mcu的程序刷寫完成后,主控mcu會(huì)返回一個(gè)“end”信號(hào)時(shí),表示程序正確發(fā)送刷寫完成,上位機(jī)收到后將退出xmodem協(xié)議,停止傳輸。