單片機的iap方法及裝置制造方法
【專利摘要】本發明公開了一種單片機的IAP方法及裝置,方法包括:獲取IAP代碼并跳轉到IAP代碼在RAM中的執行起始地址,讀取芯片信息,配置接口模塊為IAP服務;通過數據解密操作接收外部傳入的數據報文,同時擦除存儲區域,將新接收到的數據報文寫入到該擦除的存儲區域內;接收數據報文完整時,取出APP代碼的復位向量,跳轉到啟動APP程序的起始地址。本發明在進入到IAP服務后采用數據解密操作接收數據報文,而且采用邊接收、邊擦除、邊寫入的方式處理數據報文,程序運行的過程中能夠形成一機一密的機制,隨時可以核對,因此在運行的穩定性和數據的安全性方面有了大幅的提升。
【專利說明】單片機的IAP方法及裝置
【技術領域】
[0001]本發明涉及單片機程序升級處理【技術領域】,具體涉及一種單片機的IAP方法及裝置,尤其是一種基于STM32芯片的單片機的IAP方法及裝置。
【背景技術】
[0002]單片機的在線編程目前有兩種實現方法:在系統編程(ISP)和在應用編程(IAP)。ISP—般是通過單片機專用的串行編程接口對單片機內部的Flash存儲器進行編程,而IAP技術是從結構上將Flash存儲器映射為兩個存儲體,當運行一個存儲體上的用戶程序時,可對另一個存儲體重新編程,之后將控制從一個存儲體轉向另一個。ISP的實現一般需要很少的外部電路輔助實現,而IAP的實現更加靈活,通常可利用單片機的串行口接到計算機的RS232 口,通過專門設計的固件程序來編程內部存儲器。ISP和IAP很相似,都是在無需要把芯片從電路板上卸下的情況下,就能達到了用PC-MCU的編程接口(JTAG、串口、雙絞線、SPI等)的新程序版本的升級的目的。MCU內部都是首先執行一段獨立的Boot代碼(這段Boot代碼一般是出廠預置,或使用編程器燒錄的,通常只有Ik或4k,SST通常是占用一塊獨立的Block,Philips (飛利浦公司)通常是讓BootROM地址與其他Flash重疊,以達到隱藏的效果),Boot負責控制擦除程序存儲器及給程序存儲器編程的代碼(或是處理器外部提供的執行代碼),然后通過某種與PC計算機的通信方式(如,ether網口),將用戶指定的某個在PC上編譯完成的MCU可運行的二進制代碼文件編程入MCU內的程序存儲器。
[0003]ISP是指可以在板級上進行編程,也就是不用拆芯片下來,寫的是整個程序,一般是通過ISP接口線來寫。IAP雖然同樣也是在板級上進行編程,但是屬于自已對自已進行編程,在應用中進行編程,也即可以只是更改某一部分而不影響系統的其它部分,另外接口程序是自已寫的,這樣可以進行遠程升級而不影響應用,在實際應用場景中顯得更加靈活,但仍然存在穩定性、數據安全性以及數據處理效率方面的缺陷問題。
【發明內容】
[0004]本發明提供一種單片機的IAP方法及裝置,能夠使IAP編程穩定、數據更加安全、數據處理效率高,以解決上述問題。
[0005]本發明實施例提供的一種單片機的IAP方法,包括如下步驟:
A:獲取IAP代碼并跳轉到IAP代碼在RAM中的執行起始地址,讀取芯片信息,所述芯片信息包括:容量、頁大小、序列號;配置接口模塊為IAP服務;
B:通過數據解密操作接收外部傳入的數據報文,同時擦除存儲區域,將新接收到的數據報文寫入到該擦除的存儲區域內;
C:檢驗接收到的數據報文是否完整,如果是,則執行步驟D,如果否,則重新啟動處理; D:取出APP代碼的復位向量,跳轉到啟動APP程序的起始地址。
[0006]優選地,在步驟A之前采用3DES加密算法讀出32位UID發給單片機的上位機,以該32位WD作為密鑰,所述步驟B中數據解密操作包括以相應的3DES算法做解密運算。[0007]優選地,所述步驟A之前還包括AO:判斷報文是否帶有升級標志,如果是,則執行步驟A,且當檢驗接收到的數據報文完整時,先設置讀寫保護,擦除升級標志后再執行步驟D,如果否,則結束處理。
[0008]優選地,當判斷出報文帶有升級標志時,繼續判斷APP代碼是否完整,如果完整,則執行步驟A,如果不完整,則結束處理。
[0009]本發明實施例還提供了一種單片機的IAP裝置,包括:
初始配置模塊,用于獲取IAP代碼并跳轉到IAP代碼在RAM中的執行起始地址,讀取芯片信息,所述芯片信息包括:容量、頁大小、序列號;配置接口模塊為IAP服務;
解密操作模塊,用于通過數據解密操作接收外部傳入的數據報文,同時擦除存儲區域,將新接收到的數據報文寫入到該擦除的存儲區域內;
報文檢驗模塊,用于檢驗接收到的數據報文是否完整,如果是,則執行升級復位模塊,如果否,則重新啟動處理;
升級復位模塊,用于取出APP代碼的復位向量,跳轉到啟動APP程序的起始地址。
[0010]優選地,還包括:加密處理模塊,用于在初始配置模塊執行前采用3DES加密算法讀出32位UID發給單片機的上位機,以該32位UID作為密鑰,解密操作模塊中數據解密操作包括以相應的3DES算法做解密運算。
[0011]優選地,還包括:升級判斷模塊,用于在執行初始配置模塊之前判斷報文是否帶有升級標志,如果是,則執行初始配置模塊,且當檢驗接收到的數據報文完整時,先設置讀寫保護,擦除升級標志后再執行升級復位模塊,如果否,則結束處理。
[0012]優選地,還包括:APP檢驗模塊,用于當判斷出報文帶有升級標志時,繼續判斷APP代碼是否完整,如果完整,則執行初始配置模塊,如果不完整,則結束處理。
[0013]上述技術方案可以看出,由于本發明實施例在進入到IAP服務后采用數據解密操作接收數據報文,而且采用邊接收、邊擦除、邊寫入的方式處理數據報文,程序運行的過程中能夠形成一機一密的機制,隨時可以核對,因此在運行的穩定性和數據的安全性方面有了大幅的提升。
【專利附圖】
【附圖說明】
[0014]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其它的附圖。
[0015]圖1是本發明實施例1中單片機的IAP方法的流程圖;
圖2是本發明實施例2中單片機的IAP方法的流程圖。
【具體實施方式】
[0016]下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其它實施例,都屬于本發明保護的范圍。[0017]實施例1:
本發明實施例提供一種單片機的IAP方法,以STM32系列單片機為例,而其他類型單片機只需在參數上做出適應性調整即可,此處不一一舉例。
[0018]如圖1所示,該單片機的IAP方法包括如下步驟。
[0019]步驟101:獲取IAP代碼并跳轉到IAP代碼在RAM中的執行起始地址,讀取芯片信息,所述芯片信息包括:容量、頁大小、序列號;配置接口模塊為IAP服務。本步驟中,該接口模塊為RS232接口模塊或USB接口模塊,能夠使單片機與上位機的通訊連接更加穩定,通用性更強。
[0020]本步驟中芯片信息中的容量、頁大小、序列號信息能夠幫助單片機與單片機之間建立高效的通訊,快速驗證單片機與上位機之間的數據連接關系,為應用編程做準備。
[0021]步驟102:通過數據解密操作接收外部傳入的數據報文,同時擦除存儲區域,將新接收到的數據報文寫入到該擦除的存儲區域內。
[0022]本步驟中單片機自身生成一口令,然后在應用編程啟動前發送給其上位機,由上位機根據該口令生成密鑰,單片機采用上位機相應的解密算法進行數據解密操作,解密成功后接收該數據報文。
[0023]為了進一步實現空間的合理應用,以及及時保證程序代碼的更新,本步驟中會在接收數據報文的同時,邊擦除存儲區域,邊將新收到的數據報文寫入到該擦除的存儲區域內。
[0024]步驟103:檢驗接收到的數據報文是否完整。
[0025]本步驟中,如果接收到的數據報文是完整的,則說明應用編程已順利完成,可以進入到下一步驟104 ;如果接收到的數據報文并不完整,則說明應用編程遇到了相關的問題,如通訊中斷、數據接收失敗等,需要進入到步驟105:重新啟動處理,此處重新啟動處理,即跳轉到程序運行的開始地址處。
[0026]步驟104:取出APP (application的簡寫,因此被稱為應用)代碼的復位向量,跳轉到啟動APP程序的起始地址。
[0027]本步驟中應用編程的數據報文更新完成,因此,需要重新回轉到APP程序,首先取出APP代碼的復位向量,用于實現APP程序的及時恢復,當取出APP代碼的復位向量后,按照該復位向量,跳轉到啟動APP程序的起始地址,實現了 IAP到APP運行轉換。
[0028]實施例2:
本發明實施例以實施例1作為基礎,做出更加具體的完善,以進一步實現相應的功能效果。
[0029]如圖2所示,本發明實施例在升級程序(即IAP)啟動前,執行步驟201:采用3DES加密算法讀出32位UID (用戶身份證明,User Identification的縮寫)發給單片機的上位機,以該32位UID作為密鑰,因此,在代碼加密方面,本發明實施例方法采用的是3DES加密算法,通過讀出32位WD,并在升級前從串口發給上位機,以此做密鑰加解密,從而形成一機一密的機制,具有更好的安全性,程序運行過程中隨時可以核對。
[0030]然后執行步驟202:判斷報文是否帶有升級標志。可以理解,本發明實施例增加升級標志能夠使程序升級被快速識別,增加了程序升級的效率。如果報文中并未帶有升級標志,則說明該程序無需升級,可直接結束處理;如果報文中帶有升級標志,則可以繼續運行下一步驟,實現升級程序。本發明實施例中在判斷出報文中帶有升級標志時,會繼續判斷APP代碼是否完整,如果APP代碼不完整,則需要結束處理,如果APP代碼完整,則證明具備了程序升級的必要條件。
[0031]因此,執行步驟204:獲取IAP代碼并跳轉到IAP代碼在RAM中的執行起始地址,讀取芯片信息,所述芯片信息包括:容量、頁大小、序列號;配置接口模塊為IAP服務。此步驟與上述實施例1中的步驟101在原理上相同,具體可以參見上述實施例1中的描述,此處
不一一贅述。
[0032]在步驟204中建立起程序升級的準備條件后,在步驟205中,通過數據解密操作接收外部傳入的數據報文,等待下載。由于在步驟201中以3DES加密算法進行加密處理,因此步驟205中的數據解密操作為以相應的3DES算法做解密運算。一旦獲得解密操作,則開始接收數據報文,此時會存在一定的等待時間,即等待下載,因此,單片機系統仍然會進行步驟206:判斷等待是否超時,如果等待超時,則需要執行步驟212:重新啟動處理,本發明實施例中重新啟動處理是指進入到程序的開始步驟,即由步驟201開始執行;如果等待未超時,則執行步驟207,即正常進入到下載進程,邊接收數據,邊擦除存儲區域,邊將新接收的數據報文寫入該擦除的存儲區域,保證了數據空間的合理應用,也能夠及時刷新更新后的程序代碼。
[0033]由于存在下載和寫入的動作,因此,此時還需執行步驟208,仍然為判斷等待是否超時,如果超時,則仍需要進入步驟212:重新啟動處理;如果等待未超時,則說明下載與寫入的動作順利,此時,執行步驟209:檢驗接收到的數據報文是否完整,只有完整的數據報文才能夠被應用,因此一旦數據報文不完整,則進入到步驟212:重新啟動處理;如果數據報文完整,則說明程序升級成功,代碼寫入準確無誤,此時需要執行步驟210:設置讀寫保護,擦除升級標志。在此狀態下,能夠保證數據報文被安全的執行,不受外界條件影響,在升級完成后需要擦除升級標志,避免發生重復升級的現象。
[0034]當升級標志擦除后,執行步驟211:取出APP代碼的復位向量,跳轉到啟動APP程序的起始地址。本步驟與上述實施例1中的步驟104在原理上相同,具體內容可以參見實施例I的描述,此處仍不贅述。
[0035]由上述技術方案可以看出,STM32系列單片機在讀保護狀態下,只允許從用戶代碼中對主閃存存儲器的讀操作(以非調試方式從主閃存存儲器啟動)。通過從內置SRAM或FSMC執行代碼訪問主閃存存儲器的操作,通過DMA1、DMA2、JTAG, SffV(串行線觀察器)、SffD (串行線調試)、ETM和邊界掃描方式對閃存的訪問都將被禁止。
[0036]在讀保護狀態下,主閃存最前4KByte自動被寫保護,寫保護是以4KByte為單位。編程以半字(16位)為單位,時間40us?70us,編程之前要求對應位置內容為Oxffff。在115.2Kbps 波特率下,接收 I 頁(設 1KB),需時 IK* (lb+8b+lb)/115200bps = 88.89ms。擦除I頁需時(最多)40ms,編程IKB需時IKB/(2B/半字)* 70us = 35.84ms。代碼執行的時間為88.89 - 40 - 35.84 = 13ms,為STM32系列的單片機芯片預留了充足的處理時間。
[0037]在代碼完整性校驗方面,本發明實施例方法中采用的是異或冗余校驗位的方式對數據的完整性進行檢測,同時判斷向量表最開始的MSP值和復位向量值的合法性,復位向量指向應用程序所在區域,本方法中主閃存前4KB為IAP程序區,后面剩余容量為APP程序區。
[0038]在代碼加密方面,本發明實施例方法采用的是3DES加密算法,通過讀出32位WD,并在升級前從串口發給上位機,以此做密鑰加解密,從而形成一機一密的機制,程序運行過程中隨時可以核對。
[0039]在擦除或者編程時,本方法將從FLASH的取指操作將導致CPU暫停運行,IAP程序負責將含中斷向量表共4KB的內容全數復制到RAM中,然后跳轉到RAM中繼續運行,在這個過程中需要作越位檢查,確保程序不會被32位地址跳轉指令(即BX和BLX這種通過寄存器跳轉的指令)影響。
[0040]為了代碼安全,需讀保護一直處于開啟狀態,每次復位,boot (本發明實施例方法中的IAP部分)程序都檢查,無論IAP下載還是APP運行,都不需要解除讀保護,讀保護會附帶寫保護IAP代碼這4KB空間。
[0041]實施例3:
本發明實施例提供了一種單片機的IAP裝置,包括:
初始配置模塊,用于獲取IAP代碼并跳轉到IAP代碼在RAM中的執行起始地址,讀取芯片信息,所述芯片信息包括:容量、頁大小、序列號;配置接口模塊為IAP服務;
解密操作模塊,用于通過數據解密操作接收外部傳入的數據報文,同時擦除存儲區域,將新接收到的數據報文寫入到該擦除的存儲區域內;
報文檢驗模塊,用于檢驗接收到的數據報文是否完整,如果是,則執行升級復位模塊,如果否,則重新啟動處理;
升級復位模塊,用于取出APP代碼的復位向量,跳轉到啟動APP程序的起始地址。
[0042]具體地,還包括:加密處理模塊,用于在初始配置模塊執行前采用3DES加密算法讀出32位UID發給單片機的上位機,以該32位UID作為密鑰,解密操作模塊中數據解密操作包括以相應的3DES算法做解密運算。
[0043]具體地,還包括:升級判斷模塊,用于在執行初始配置模塊之前判斷報文是否帶有升級標志,如果是,則執行初始配置模塊,且當檢驗接收到的數據報文完整時,先設置讀寫保護,擦除升級標志后再執行升級復位模塊,如果否,則結束處理。
[0044]具體地,還包括:APP檢驗模塊,用于當判斷出報文帶有升級標志時,繼續判斷APP代碼是否完整,如果完整,則執行初始配置模塊,如果不完整,則結束處理。
[0045]需要說明的是,上述裝置和系統內的各單元之間的信息交互、執行過程等內容,由于與本發明方法實施例基于同一構思,具體內容可參見本發明方法實施例中的敘述,此處不再贅述。
[0046]本領域普通技術人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令相關的硬件來完成,該程序可以存儲于一計算機可讀存儲介質中,存儲介質可以包括:只讀存儲器(ROM,Read Only Memory)、隨機存取存儲器(RAM,RandomAccess Memory)、磁盤或光盤等。
[0047]以上對本發明實施例所提供的一種單片機的IAP方法及裝置進行了詳細介紹,本文中應用了具體個例對本發明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發明的方法及其核心思想;同時,對于本領域的一般技術人員,依據本發明的思想,在【具體實施方式】及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本發明的限制。
【權利要求】
1.單片機的IAP方法,其特征在于,包括如下步驟: A:獲取IAP代碼并跳轉到IAP代碼在RAM中的執行起始地址,讀取芯片信息,所述芯片信息包括:容量、頁大小、序列號;配置接口模塊為IAP服務; B:通過數據解密操作接收外部傳入的數據報文,同時擦除存儲區域,將新接收到的數據報文寫入到該擦除的存儲區域內; C:檢驗接收到的數據報文是否完整,如果是,則執行步驟D,如果否,則重新啟動處理; D:取出APP代碼的復位向量,跳轉到啟動APP程序的起始地址。
2.如權利要求1所述的單片機的IAP方法,其特征在于,在步驟A之前采用3DES加密算法讀出32位UID發給單片機的上位機,以該32位UID作為密鑰,所述步驟B中數據解密操作包括以相應的3DES算法做解密運算。
3.如權利要求1或2所述的單片機的IAP方法,其特征在于,所述步驟A之前還包括AO:判斷報文是否帶有升級標志,如果是,則執行步驟A,且當檢驗接收到的數據報文完整時,先設置讀寫保護,擦除升級標志后再執行步驟D,如果否,則結束處理。
4.如權利要求3所述的單片機的IAP方法,其特征在于,當判斷出報文帶有升級標志時,繼續判斷APP代碼是否完整,如果完整,則執行步驟A,如果不完整,則結束處理。
5.單片機的IAP裝置,其特征在于,包括: 初始配置模塊,用于獲取IAP代碼并跳轉到IAP代碼在RAM中的執行起始地址,讀取芯片信息,所述芯片信息包括:容量、頁大小、序列號;配置接口模塊為IAP服務; 解密操作模塊,用于通過數據解密操作接收外部傳入的數據報文,同時擦除存儲區域,將新接收到的數據報文寫入到該擦除的存儲區域內; 報文檢驗模塊,用于檢驗接收到的數據報文是否完整,如果是,則執行升級復位模塊,如果否,則重新啟動處理; 升級復位模塊,用于取出APP代碼的復位向量,跳轉到啟動APP程序的起始地址。
6.如權利要求5所述的單片機的IAP裝置,其特征在于,還包括: 加密處理模塊,用于在初始配置模塊執行前采用3DES加密算法讀出32位WD發給單片機的上位機,以該32位WD作為密鑰,解密操作模塊中數據解密操作包括以相應的3DES算法做解密運算。
7.如權利要求5或6所述的單片機的IAP裝置,其特征在于,還包括: 升級判斷模塊,用于在執行初始配置模塊之前判斷報文是否帶有升級標志,如果是,則執行初始配置模塊,且當檢驗接收到的數據報文完整時,先設置讀寫保護,擦除升級標志后再執行升級復位模塊,如果否,則結束處理。
8.如權利要求7所述的單片機的IAP裝置,其特征在于,還包括: APP檢驗模塊,用于當判斷出報文帶有升級標志時,繼續判斷APP代碼是否完整,如果完整,則執行初始配置模塊,如果不完整,則結束處理。
【文檔編號】G06F21/64GK103745167SQ201310754479
【公開日】2014年4月23日 申請日期:2013年12月31日 優先權日:2013年12月31日
【發明者】歐昊 申請人:廣東嶺南通股份有限公司