專利名稱:使用少量ROM資源的Bootlorder實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及Boot Iorder技術(shù)領(lǐng)域,尤其涉及一種使用少量ROM資源的Boot Iorder實現(xiàn)方法。
背景技術(shù):
智能卡芯片通常采用嵌入式操作系統(tǒng)。在嵌入式操作系統(tǒng)中,Bootlorder是在操作系統(tǒng)內(nèi)核運行之前運行??梢猿跏蓟布O(shè)備、建立內(nèi)存空間映射、從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。Boot ROM是管理設(shè)備啟動序列的只讀存儲器,每次上電復(fù)位都是從BootROM進(jìn)行啟動和跳轉(zhuǎn),物理上使用IKB掩膜ROM實現(xiàn)。Boot ROM對于用戶應(yīng)用程序是不可見的。一般的智能卡芯片中Boot ROM中必須要存放所有與底層相關(guān)的程序,以及COS下載程序。這樣設(shè)計的缺陷是ROM中的程序是在流片過程中通過掩膜方式固化在芯片里面。如果1.掩膜過程中萬一出現(xiàn)故障,導(dǎo)致ROM中的程序不能正常工作,則整批晶圓報廢。2.如果發(fā)現(xiàn)程序中有BUG,或者程序需要升級,則需要在流片階段重新定制掩膜版,費用昂貴。本次設(shè)計中的方案是Boot ROM僅保留最少量測試固件資源;其他大量內(nèi)容,放在非易失性存儲管理器(NVM Manager,存放在Flash可擦寫存儲單元內(nèi))里實現(xiàn)。這樣bootrom中只存放最基本最簡單的測試和下載程序。大大降低了風(fēng)險和成本。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了 一種使用少量ROM資源的Bootlorder實現(xiàn)方法,采用Flash+ROM的方案,在ROM中固化少量必要的引導(dǎo)程序,在需要進(jìn)行程序修改時,不需要重新定制掩膜版,節(jié)省費用。為了解決上述技術(shù)問題,本發(fā)明是這樣實現(xiàn)的一種使用少量ROM資源的Bootlorder實現(xiàn)方法,該方法采用Boot ROM和Flash共同構(gòu)成Boot存儲區(qū);其中,F(xiàn)lash內(nèi)部具有Flash系統(tǒng)區(qū)和數(shù)據(jù)區(qū),數(shù)據(jù)區(qū)又被細(xì)分為中斷向量存放區(qū)、Flash管理程序區(qū)和用戶應(yīng)用程序區(qū);該方法包括如下步驟步驟1、在流片階段,通過掩膜的方式,向Boot ROM中加載引導(dǎo)程序代碼;步驟2、設(shè)備中的CPU上電后,首先執(zhí)行Boot ROM中的引導(dǎo)程序;首次執(zhí)行引導(dǎo)程序時,進(jìn)入管理員模式,以后再次進(jìn)入引導(dǎo)程序時,均進(jìn)入用戶模式;在管理員模式下,向Flash系統(tǒng)區(qū)加載系統(tǒng)參數(shù)表,向Flash管理程序區(qū)加載Flash管理程序,向中斷向量存放區(qū)加載Flash管理程序的中斷向量;在用戶模式下,跳轉(zhuǎn)到Boot ROM的指定地址Addl,執(zhí)行該地址Addl上的語句,從而引導(dǎo)CPU的取值地址切換到Flash的預(yù)留地址處,從而實現(xiàn)BootROM到Flash的跳轉(zhuǎn),接著執(zhí)行Flash預(yù)留地址處存儲的語句,實現(xiàn)將執(zhí)行地址跳轉(zhuǎn)到Flash管理程序區(qū),執(zhí)行步驟3 ;其中,預(yù)留地址設(shè)置在中斷向量存放區(qū)內(nèi)為中斷向量預(yù)留的存儲空間之后,預(yù)留地址的起始為Addl ;步驟3、進(jìn)入Flash管理程序后,首先判斷NVM_SIG標(biāo)識是否為1,如果是,則執(zhí)行步驟4,否則,執(zhí)行步驟5 ;NVM_SIG標(biāo)識保存在Flash系統(tǒng)區(qū)的系統(tǒng)參數(shù)表中,初始值為I ;步驟4、向用戶應(yīng)用程序區(qū)加載用戶應(yīng)用程序,將用戶應(yīng)用程序的中斷向量暫存,當(dāng)收到外部啟用當(dāng)前用戶應(yīng)用程序的指令時,將暫存的用戶應(yīng)用程序的中斷向量加載到中斷向量存放區(qū)中,然后將NVM_SIG標(biāo)識置為O,下電;步驟5、判斷是否需要更新用戶應(yīng)用程序,如果不需要則轉(zhuǎn)入用戶應(yīng)用程序區(qū)執(zhí)行用戶應(yīng)用程序;如果需要更新,則將Flash管理程序的中斷向量加載到中斷向量存放區(qū),然后將NVM_SIG標(biāo)識置為I,下電。優(yōu)選地,在步驟2中,所述首次執(zhí)行引導(dǎo)程序時,進(jìn)入管理員模式,以后再次進(jìn)入引導(dǎo)程序時,均進(jìn)入用戶模式的實現(xiàn)方式為:設(shè)置TEST_SIG標(biāo)志,該TEST_SIG標(biāo)志保存在Flash系統(tǒng)區(qū)的系統(tǒng)參數(shù)表中,初始值為I ;首次執(zhí)行引導(dǎo)程序時判斷TEST_SIG=1,則進(jìn)入管理員模式,下載Flash管理程序后將TEST_SIG置為O ;判斷TEST_SIG=0時,則進(jìn)入用戶模式。當(dāng)判定TEST_SIG標(biāo)志為I后,等待命令;如果接收到外部的測試代碼,則運行測試代碼,并返回運行結(jié)果,并繼續(xù)等待命令;如果接收到外部的加載指令,則執(zhí)行所述向Flash系統(tǒng)區(qū)加載系統(tǒng)參數(shù)表、Flash管理程序的中斷向量和用戶應(yīng)用程序的中斷向量,向Flash管理程序區(qū)加載Flash管理程序。優(yōu)選地, 步驟4在向用戶應(yīng)用程序區(qū)加載用戶應(yīng)用程序之前,先進(jìn)行用戶應(yīng)用程序區(qū)的讀寫測試,確定該用戶應(yīng)用程序區(qū)沒有問題,再加載用戶應(yīng)用程序。優(yōu)選地,在步驟2中,向Flash系統(tǒng)區(qū)加載系統(tǒng)參數(shù)表時,進(jìn)一步將Flash管理程序的中斷向量備份在Flash系統(tǒng)區(qū)中;當(dāng)需要向中斷向量存放區(qū)加載Flash管理程序的中斷向量時,從Flash系統(tǒng)區(qū)中獲取Flash管理程序的中斷向量。有益效果:采用Flash+ROM的方案,在ROM中固化少量必要的引導(dǎo)程序,在需要進(jìn)行程序修改時,不需要重新定制掩膜版,節(jié)省費用。
圖1為Boot ROM和Flash共同構(gòu)成Boot存儲區(qū)的示意圖。圖2為本發(fā)明引導(dǎo)程序的具體流程圖。圖3為本發(fā)明Flash管理程序的流程圖。
具體實施例方式本發(fā)明為了減少ROM資源使用量,并非將所有資源在流片時固化到Boot ROM中,而是將Bootlorder程序分成了三個部分,分別為引導(dǎo)程序代碼、Flash管理程序和用戶應(yīng)用程序;其中只有引導(dǎo)程序代碼固化到Boot ROM中,保證Boot ROM內(nèi)僅保留最少量的必要固件資源;而其他大量內(nèi)容,存放在Flash可擦寫存儲單元內(nèi)。這樣Boot ROM中只存放最基本最簡單的程序。在需要進(jìn)行程序修改時,不需要重新流片,大大降低了風(fēng)險和成本。下面結(jié)合附圖并舉實施例,對本發(fā)明進(jìn)行詳細(xì)描述。如圖1所示,本發(fā)明采用Boot ROM和Flash共同構(gòu)成設(shè)備的Boot存儲區(qū)。其中,F(xiàn)lash內(nèi)部具有Flash系統(tǒng)區(qū)(又稱信息區(qū))和數(shù)據(jù)區(qū),這兩個區(qū)域是分開編址的。本發(fā)明將數(shù)據(jù)區(qū)細(xì)分為中斷向量存放區(qū)、Flash管理程序區(qū)和用戶應(yīng)用程序區(qū)。該方法包括如下步驟步驟1、在流片階段,通過掩膜的方式,向設(shè)備的Boot ROM中加載引導(dǎo)程序代碼;步驟2、設(shè)備中的CPU上電后,首先執(zhí)行Boot ROM中的引導(dǎo)程序;首次執(zhí)行引導(dǎo)程序時,進(jìn)入管理員模式,以后再次進(jìn)入引導(dǎo)程序時,均進(jìn)入用戶模式;在管理員模式下,向Flash系統(tǒng)區(qū)加載系統(tǒng)參數(shù)表,向Flash管理程序區(qū)加載Flash管理程序,向中斷向量存放區(qū)加載Flash管理程序的中斷向量;在用戶模式下,跳轉(zhuǎn)到Boot ROM的指定地址Addl,執(zhí)行該地址Addl上的語句,從而引導(dǎo)CPU的取值地址切換到Flash的預(yù)留地址處,實現(xiàn)Boot ROM到Flash的跳轉(zhuǎn),接著執(zhí)行Flash預(yù)留地址處存儲的語句,實現(xiàn)將執(zhí)行地址跳轉(zhuǎn)到Flash管理程序區(qū),執(zhí)行步驟
3。其中,預(yù)留地址設(shè)置在中斷向量存放區(qū)內(nèi)為中斷向量預(yù)留的存儲空間之后,預(yù)留地址的起始為Addl。圖2為本發(fā)明引導(dǎo)程序的具體流程圖。(I )、根據(jù)TEST_SIG標(biāo)志位判斷Boot ROM工作模式。TEST_SIG標(biāo)志位標(biāo)識了 Boot ROM處于管理員模式還是用戶模式。該標(biāo)志位在Flash系統(tǒng)區(qū)的系統(tǒng)參數(shù)表里,初始值為1,TEST_SIG標(biāo)志位是受保護(hù)的,因此僅能在出廠前修改。Boot ROM第一次上電時,可以讀到TEST_SIG=1,表示其默認(rèn)狀態(tài)是管理員模式,下載Flash管理程序完成后設(shè)置為用戶模式(TEST_SIG=0),出廠之后無法修改,此后每次上電時,讀到TEST_SIG=0,進(jìn)入用戶模式。(2)、在管理員模式下,首先建立與外部的無線通信連接,例如可以按照IS014443-3協(xié)議中表述的命令序列建立無線通信連接。通信連接建立之后,進(jìn)入IS014443-4協(xié)議中約定的數(shù)據(jù)鏈路層通信。該協(xié)議采用分組的方式在P⑶和PICC之間傳遞APDU指令和反饋應(yīng)答(Feedback)。無線通信連接建立完成后,等待外部命令。如果外部發(fā)來測試代碼,則運行測試代碼,若測試通過,則反饋成功信息;若測試不通過,則反饋出錯信息。如果外部發(fā)來加載指令,則向Flash加載數(shù)據(jù),加載的內(nèi)容包括系統(tǒng)參數(shù)表(加載到Flash系統(tǒng)區(qū))、Flash管理程序(加載到Flash管理程序區(qū))、Flash管理程序的中斷向量(加載到中斷向量存放區(qū))等。加載成功之后,修改TEST_SIG標(biāo)志位=0,使Boot ROM下次啟動進(jìn)入用戶模式。最后,向外部反饋測試完成結(jié)果,外部就認(rèn)為該產(chǎn)品的操作已完成,轉(zhuǎn)為操作下一產(chǎn)品。(3)、在用戶模式下執(zhí)行如下操作①首先加載校準(zhǔn)字(Trimming words):從位于Flash系統(tǒng)區(qū)的系統(tǒng)參數(shù)表里將校準(zhǔn)字讀入相應(yīng)寄存器中,用于改善諸如射頻接口、電源等模擬單元的性能。②跳轉(zhuǎn)到Flash :修改相應(yīng)SFR可以使CPU的取指地址由Boot ROM切換到Flash中,因此這里首先將CPU取值地址跳轉(zhuǎn)到Boot ROM的0x006B地址,在這個地址上存放著修改MMU SFR的語句。語句執(zhí)行之后,CPU的取值地址切換到Flash的0x006B之后、0x0072之前的某個地址上,從而實現(xiàn)Boot ROM到Flash的跳轉(zhuǎn)。接著執(zhí)行Flash跳轉(zhuǎn)地址上存儲的語句,實現(xiàn)將執(zhí)行地址跳轉(zhuǎn)到Flash管理程序區(qū)。Flash的0x006B_0x0072處于中斷向量存放區(qū),但是該段地址為保留地址,專用于放置跳轉(zhuǎn)到管理程序區(qū)的語句,不用于中斷向量。這樣,就可以引導(dǎo)CPU取值地址跳轉(zhuǎn)到特定地址里去執(zhí)行管理程序。其中0x006B-0x0072是根據(jù)中斷向量存放區(qū)的大小和所要存放的中斷向量大小確定的,保留地址不能打斷中斷向量,因此可以放在中斷向量存放區(qū)內(nèi)為中斷向量預(yù)留的存儲空間之后。為了實現(xiàn)跳轉(zhuǎn),在Boot ROM的0x006B處存放了跳轉(zhuǎn)語句,由于CPU執(zhí)行語句時是按照地址逐條執(zhí)行的,通過SFR的修改,可以實現(xiàn)存儲器跳轉(zhuǎn),但是地址不會跳動,BootROM存放跳轉(zhuǎn)語句的位置需要與Flash上的保留地址向?qū)?yīng),例如本實施例中,保留地址為0x006B-0x0072,則放跳轉(zhuǎn)語句的地址就為0x006B,否則會出現(xiàn)跳轉(zhuǎn)和執(zhí)行上的錯誤。步驟3、進(jìn)入Flash管理程序后,首先判斷的是從Flash管理執(zhí)行,還是從用戶應(yīng)用程序執(zhí)行。參見圖3,通過判斷NVM_SIG標(biāo)志位可以決定接下來跳轉(zhuǎn)地址的指向,NVM_SIG標(biāo)識為1,則執(zhí)行步驟4,否則,執(zhí)行步驟5。這個標(biāo)志位在Flash系統(tǒng)區(qū)的系統(tǒng)參數(shù)表里,在首次下載用戶應(yīng)用程序之前,NVM_SIG=1,在每次用戶應(yīng)用程序下載完成之后,修改NVM_SIG=0,如果希望更新用戶應(yīng)用程序,則將修改NVM_SIG=1,以便下一次上電時轉(zhuǎn)到執(zhí)行步驟4去再次下載用戶應(yīng)用程序。步驟4、從外部接收用戶應(yīng)用程序及其中斷向量,向用戶應(yīng)用程序區(qū)加載用戶應(yīng)用程序,將用戶應(yīng)用程序的中斷向量暫存在XRAM中,當(dāng)收到外部啟用當(dāng)前用戶應(yīng)用程序的指令時,將暫存的用戶應(yīng)用程序的中斷向量加載到中斷向量存放區(qū)中,然后將NVM_SIG標(biāo)識置為O,下電。其中,在向用戶應(yīng)用程序區(qū)加載用戶應(yīng)用程序之前,還可以先進(jìn)行Flash用戶應(yīng)用程序區(qū)的讀寫測試,確定該區(qū)域沒有問題,再加載用戶應(yīng)用程序。步驟5、判斷是否需要更新用戶應(yīng)用程序,如果不需要則轉(zhuǎn)入用戶應(yīng)用程序區(qū)執(zhí)行用戶應(yīng)用程序;如果需要更新,則將Flash管理程序的中斷向量加載到Flash中斷向量存放區(qū),然后將NVM_SIG標(biāo)識置為1,下電。這樣,在下一次上電時,會轉(zhuǎn)入步驟4重新下載用戶應(yīng)用程序。Flash管理程序和用戶程序使用了相同的中斷源(例如RFIF和Timer),但有不同的中斷服務(wù)子程序及其入口地址,因此需要針對Flash管理程序和用戶程序使用不同的中斷向量表。在本步驟中,將Flash管理程序的中斷向量加載到Flash中斷向量存放區(qū)時,可以從外部重新獲取Flash管理程序的中斷向量,也可以從Flash系統(tǒng)區(qū)中獲取備份的Flash管理程序的中斷向量。這就需要在步驟2向Flash系統(tǒng)區(qū)加載系統(tǒng)參數(shù)表時,進(jìn)一步將Flash管理程序的中斷向量備份在Flash系統(tǒng)區(qū)中,從而可以快速從內(nèi)部加載信息,提高處
理速度。綜上所述,以上僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種使用少量ROM資源的Bootlorder實現(xiàn)方法,其特征在于,設(shè)備采用Boot ROM和Flash共同構(gòu)成Boot存儲區(qū);其中,F(xiàn)lash內(nèi)部具有Flash系統(tǒng)區(qū)和數(shù)據(jù)區(qū),數(shù)據(jù)區(qū)又被細(xì)分為中斷向量存放區(qū)、Flash管理程序區(qū)和用戶應(yīng)用程序區(qū); 該方法包括如下步驟: 步驟1、在流片階段,通過掩膜的方式,向Boot ROM中加載引導(dǎo)程序代碼; 步驟2、設(shè)備中的CPU上電后,首先執(zhí)行Boot ROM中的引導(dǎo)程序;首次執(zhí)行引導(dǎo)程序時,進(jìn)入管理員模式,以后再次進(jìn)入引導(dǎo)程序時,均進(jìn)入用戶模式; 在管理員模式下,向Flash系統(tǒng)區(qū)加載系統(tǒng)參數(shù)表,向Flash管理程序區(qū)加載Flash管理程序,向中斷向量存放區(qū)加載Flash管理程序的中斷向量; 在用戶模式下,跳轉(zhuǎn)到Boot ROM的指定地址Addl,執(zhí)行該地址Addl上的語句,從而引導(dǎo)CPU的取值地址切換到Flash的預(yù)留地址處,從而實現(xiàn)Boot ROM到Flash的跳轉(zhuǎn),接著執(zhí)行Flash預(yù)留地址處存儲的語句,實現(xiàn)將執(zhí)行地址跳轉(zhuǎn)到Flash管理程序區(qū),執(zhí)行步驟3 ; 其中,預(yù)留地址設(shè)置在中斷向量存放區(qū)內(nèi)為中斷向量預(yù)留的存儲空間之后,預(yù)留地址的起始為Addl ; 步驟3、進(jìn)入Flash管理程序后,首先判斷NVM_SIG標(biāo)識是否為1,如果是,則執(zhí)行步驟4,否則,執(zhí)行步驟5 ;NVM_SIG標(biāo)識保存在Flash系統(tǒng)區(qū)的系統(tǒng)參數(shù)表中,初始值為I ; 步驟4、向用戶應(yīng)用程序區(qū)加載用戶應(yīng)用程序,將用戶應(yīng)用程序的中斷向量暫存,當(dāng)收到外部啟用當(dāng)前用戶應(yīng)用程序的指令時,將暫存的用戶應(yīng)用程序的中斷向量加載到中斷向量存放區(qū)中,然后將NVM_SIG標(biāo)識置為0,下電; 步驟5、判斷是否需要更新用戶應(yīng)用程序,如果不需要則轉(zhuǎn)入用戶應(yīng)用程序區(qū)執(zhí)行用戶應(yīng)用程序;如果需要更新,則將Flash管理程序的中斷向量加載到中斷向量存放區(qū),然后將NVM_SIG標(biāo)識置為I,下電。
2.如權(quán)利要求1所述的方法,其特征在于,在步驟2中,所述首次執(zhí)行引導(dǎo)程序時,進(jìn)入管理員模式,以后再次進(jìn)入引導(dǎo)程序時,均進(jìn)入用戶模式的實現(xiàn)方式為: 設(shè)置TEST_SIG標(biāo)志,該TEST_SIG標(biāo)志保存在Flash系統(tǒng)區(qū)的系統(tǒng)參數(shù)表中,初始值為I ;首次執(zhí)行引導(dǎo)程序時判斷TEST_SIG=1,則進(jìn)入管理員模式,下載Flash管理程序后將TEST_SIG置為O ;判斷TEST_SIG=0時,則進(jìn)入用戶模式。
3.如權(quán)利要求2所述的方法,其特征在于,當(dāng)判定TEST_SIG標(biāo)志為I后,等待命令;如果接收到外部的測試代碼,則運行測試代碼,并返回運行結(jié)果,并繼續(xù)等待命令;如果接收到外部的加載指令,則執(zhí)行所述向Flash系統(tǒng)區(qū)加載系統(tǒng)參數(shù)表、Flash管理程序的中斷向量和用戶應(yīng)用程序的中斷向量,向Flash管理程序區(qū)加載Flash管理程序。
4.如權(quán)利要求1所述的方法,其特征在于,步驟4在向用戶應(yīng)用程序區(qū)加載用戶應(yīng)用程序之前,先進(jìn)行用戶應(yīng)用程序區(qū)的讀寫測試,確定該用戶應(yīng)用程序區(qū)沒有問題,再加載用戶應(yīng)用程序。
5.如權(quán)利要求1所述的方法,其特征在于,在Flash中,中斷向量存放區(qū)地址為0000H 0080H,中斷向量存放區(qū)內(nèi)的預(yù)留地址為006B H 0072H,Addl=006B H。
6.如權(quán)利要求1所述的方法,其特征在于,在步驟2中,向Flash系統(tǒng)區(qū)加載系統(tǒng)參數(shù)表時,進(jìn)一步將Flash管理程序的中斷向量備份在Flash系統(tǒng)區(qū)中;當(dāng)需要向中斷向量存放區(qū)加載Flash管理程序的中斷向量時, 從Flash系統(tǒng)區(qū)中獲取Flash管理程序的中斷向量。
全文摘要
本發(fā)明公開了一種使用少量ROM資源的Bootlorder實現(xiàn)方法,本發(fā)明為了減少ROM資源使用量,并非將所有資源在流片時固化到Boot ROM中,而是將Bootlorder程序分成了三個部分,分別為引導(dǎo)程序代碼、Flash管理程序和用戶應(yīng)用程序;其中只有引導(dǎo)程序代碼固化到Boot ROM中,保證Boot ROM內(nèi)僅保留最少量的必要固件資源;而其他大量內(nèi)容,存放在Flash可擦寫存儲單元內(nèi)。這樣Boot ROM中只存放最基本最簡單的測試和下載程序。在需要進(jìn)行程序修改時,不需要重新流片,大大降低了風(fēng)險和成本。
文檔編號G06F9/445GK103077056SQ20121059273
公開日2013年5月1日 申請日期2012年12月31日 優(yōu)先權(quán)日2012年12月31日
發(fā)明者吳歌 申請人:中國電子科技集團(tuán)公司第十五研究所