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