本發(fā)明涉及電子信息領(lǐng)域,特別涉及一種嵌入式計算機固件程序的下載方法,應(yīng)用于因cpu自身不帶flash程序存儲器需外接并行flash作為存儲器的嵌入式計算機。
背景技術(shù):
在眾多的嵌入式cpu處理器中,有一部分cpu不帶內(nèi)部flash,并且其自身的內(nèi)部ram容量也很小,例如atmel公司的at91m55800處理器。在產(chǎn)品開發(fā)中選用這樣的cpu處理器時,往往需要外接并行flash作為嵌入式固件程序存儲器,同時需要外接ram作為數(shù)據(jù)存儲器。選用這種cpu的好處是flash和ram的容量可以由用戶根據(jù)自己的實際情況合理地進行選擇,通常選擇這類cpu的原因是那些自帶flash和ram的cpu的內(nèi)部flash或者ram容量太小,無法滿足功能強大的嵌入式計算機的需求。而使用外部flash作為嵌入式固件存儲器的一個難點在于,由于客戶所選擇的flash芯片各有不同,cpu生產(chǎn)廠家無法給出一個通用的嵌入式固件程序下載(編程)方法。而通常使用的方案是使用axd(armextendeddebugger,arm擴展調(diào)試器)軟件加載編譯好的.axf文件,在ram環(huán)境下進行程序仿真,在仿真程序里編寫flash的讀/寫驅(qū)動程序,結(jié)合上位機軟件使用串口協(xié)議向cpu發(fā)送固件程序數(shù)據(jù),cpu通過編寫的串口驅(qū)動程序接收到數(shù)據(jù)后將其寫入flash。由于串口通訊速率較慢,當固件程序容量很大時,使用串口進行固件程序下載耗時很長。因此,上述固件程序下載方法存在步驟繁瑣、耗時長、效率低等問題,嚴重時甚至會影響下一道工序的正常操作。
技術(shù)實現(xiàn)要素:
為了解決現(xiàn)有技術(shù)中存在的上述問題,本發(fā)明提出一種嵌入式計算機固件程序的下載方法,能夠簡化操作程序、提高下載速度。
為實現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
本發(fā)明提供一種嵌入式計算機固件程序的下載方法,包括在上位機上執(zhí)行的以下步驟:
安裝segger公司開發(fā)的arm開發(fā)工具包,打開j-flasharm軟件;
修改嵌入式計算機的cpu對應(yīng)的.jflash配置文件;
裝載修改后的.jflash配置文件,設(shè)置jlink下載器參數(shù);
使用jlink下載器向所述cpu的外接flash并行加載固件程序。
進一步地,所述修改嵌入式計算機的cpu對應(yīng)的.jflash配置文件,具體包括:
找到所述cpu對應(yīng)的.jflash配置文件。首先將cpu復位時間設(shè)置為0ms(使cpu停止程序運行回到初始狀態(tài));然后根據(jù)所述cpu的數(shù)據(jù)手冊,通過設(shè)置時鐘模式寄存器的值,設(shè)置外部晶振為時鐘源,允許主時鐘,設(shè)置時鐘穩(wěn)定的計數(shù)值;設(shè)置等待pll(phaselockedloop,鎖相環(huán))合成器時鐘發(fā)生器穩(wěn)定工作的延遲時間,設(shè)置pll合成器時鐘發(fā)生器的第一倍頻時鐘頻率和第二倍頻時鐘頻率(pll合成器時鐘發(fā)生器首先工作在第一倍頻時鐘頻率,然后穩(wěn)定在第二倍頻時鐘頻率);最后根據(jù)外接flash的數(shù)據(jù)手冊,通過設(shè)置ebi(externalbusinterface,外部總線接口)寄存器的值,對所述外接flash的數(shù)據(jù)總線寬度、等待狀態(tài)的時鐘周期、頁大小、片選信號使能以及地址重映射信息進行設(shè)置。
進一步地,所述設(shè)置jlink下載器參數(shù),具體包括:
在j-flasharm下的projectsettings設(shè)置項里設(shè)置下載方式為jtag(jointtestactiongroup,聯(lián)合測試工作組),并且設(shè)置jtagspeed以及jtag掃描工具鏈信息。
進一步地,所述使用jlink下載器向所述cpu的外接flash并行加載固件程序,具體包括:
使用target->connect連接所述cpu,使所述cpu停止程序運行回到初始狀態(tài);使用target->erasechip對所述外接flash進行整片擦除,再使用target->program&verify對所述外接flash進行寫操作。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
本發(fā)明提出的一種嵌入式計算機固件程序的下載方法,通過在上位機上執(zhí)行以下步驟:安裝segger公司開發(fā)的arm開發(fā)工具包,打開j-flasharm軟件,修改嵌入式計算機的cpu對應(yīng)的.jflash配置文件,裝載修改后的.jflash配置文件,設(shè)置jlink下載器參數(shù),使用jlink下載器向所述cpu的外接flash并行加載固件程序,能夠?qū)崿F(xiàn)向嵌入式計算機cpu的外接flash快速下載固件程序。本發(fā)明所述方法具有操作簡便、下載速度快等優(yōu)點,解決了現(xiàn)有下載方法中存在的操作繁復、因串行傳輸數(shù)據(jù)使下載速度緩慢等問題。
附圖說明
圖1本發(fā)明實施例一種嵌入式計算機固件程序的下載方法的流程圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明作進一步詳細說明。
本發(fā)明實施例一種嵌入式計算機固件程序的下載方法的流程圖如圖1所示,所述方法在上位機上運行,包括以下步驟:
步驟101,安裝segger公司開發(fā)的arm開發(fā)工具包,打開j-flasharm軟件;
步驟102,修改嵌入式計算機的cpu對應(yīng)的.jflash配置文件;
步驟103,裝載修改后的.jflash配置文件,設(shè)置jlink下載器參數(shù);
步驟104,使用jlink下載器向所述cpu的外接flash并行加載固件程序。
本實施例的上位機需要在segger公司開發(fā)的j-flasharm軟件平臺上運行。j-flasharm是單獨的flash燒寫軟件,能夠把單獨的bin文件或者hex文件燒寫到計算機的flash里面去。因此,如果上位機上沒有安裝該軟件,需要先安裝軟件,軟件安裝成功后,打開所述軟件。打開j-flasharm軟件后,修改cpu對應(yīng)的.jflash配置文件,在arm開發(fā)工具包的安裝目錄找到.jflash配置文件,根據(jù)外接flash的數(shù)據(jù)手冊,采用文本編輯器打開并修改.jflash配置文件。修改完成后,使用j-flasharm軟件工具裝載修改過的.jflash配置文件。然后使用jlink下載器連接cpu,并在上位機軟件平臺上裝載需要下載的固件程序。jlink下載器利用flash的cfi(commonflashmemoryinterface,公共flash接口)實現(xiàn)對外接flash的擦除、編程等操作。
本實施例使用j-flasharm軟件,通過修改并裝載cpu對應(yīng)的.jflash配置文件,使用jlink下載器連接cpu,能夠?qū)崿F(xiàn)向嵌入式計算機cpu的外接flash并行下載固件程序,提高了下載速度及編程的正確率。
作為一種可選實施例,所述修改嵌入式計算機的cpu對應(yīng)的.jflash配置文件,具體包括:
找到所述cpu對應(yīng)的.jflash配置文件。首先將cpu復位時間設(shè)置為0ms;然后根據(jù)所述cpu的數(shù)據(jù)手冊,通過設(shè)置時鐘模式寄存器的值,設(shè)置外部晶振為時鐘源,允許主時鐘,設(shè)置時鐘穩(wěn)定的計數(shù)值;設(shè)置等待pll合成器時鐘發(fā)生器穩(wěn)定工作的延遲時間,設(shè)置pll合成器時鐘發(fā)生器的第一倍頻時鐘頻率和第二倍頻時鐘頻率;最后根據(jù)外接flash的數(shù)據(jù)手冊,通過設(shè)置ebi寄存器的值,對所述外接flash的數(shù)據(jù)總線寬度、等待狀態(tài)的時鐘周期、頁大小、片選信號使能以及地址重映射信息進行設(shè)置。
作為一種可選實施例,所述設(shè)置jlink下載器參數(shù),具體包括:
在j-flasharm下的projectsettings設(shè)置項里設(shè)置下載方式為jtag,并且設(shè)置jtagspeed以及jtag掃描工具鏈信息。
作為一種可選實施例,所述使用jlink下載器向所述cpu的外接flash并行加載固件程序,具體包括:
使用target->connect連接所述cpu,使所述cpu停止程序運行回到初始狀態(tài);使用target->erasechip對所述外接flash進行整片擦除,再使用target->program&verify對所述外接flash進行寫操作。
為了更好地理解本發(fā)明實施例的技術(shù)方案,下面給出應(yīng)用本發(fā)明所述方法,對atmel公司的at91m55800嵌入式微處理器的外接flash(型號為sst36vf3203)快速下載固件程序的一個應(yīng)用實例。方法如下:
s1、下載并且安裝segger公司開發(fā)的arm開發(fā)工具包,打開j-flasharm軟件。
s2、修改設(shè)置腳本文件。
at91m55800嵌入式微處理器有1個ebi接口,該接口有8個片選信號cs0-cs7。進行硬件設(shè)計時,flash的片選信號連接cpu的cs0引腳,外部ram連接cpu的cs1引腳。按照cpu硬件初始化順序進行設(shè)置:首先是cpu復位時間,設(shè)置其值為0ms,使cpu停止程序運行,回到初始狀態(tài)。其次是設(shè)置系統(tǒng)時鐘頻率,根據(jù)at91m55800的數(shù)據(jù)手冊可知,寄存器地址0xffff4020對應(yīng)的寄存器為apmcclockgeneratormoderegister,用于設(shè)置時鐘模式。首先該將寄存器的值設(shè)置為0x002f0002,根據(jù)apmcclockgeneratormoderegister各個bit位的設(shè)置可知,當該寄存器的值為0x002f0002時,使用外部晶振作為時鐘源,允許主時鐘,以及時鐘穩(wěn)定計數(shù)值設(shè)定為47。然后設(shè)置延時等待20ms,等待晶振的pll合成器時鐘發(fā)生器穩(wěn)定工作。延時結(jié)束之后,將寄存器的值設(shè)置為0x032f4102,先使pll合成器時鐘發(fā)生器的倍頻時鐘為16mhz,最后變到32mhz。系統(tǒng)時鐘頻率設(shè)置完成后,cpu將穩(wěn)定運行在32mhz時鐘頻率。再次是設(shè)置ebi控制寄存器。由于flash連接cpu的cs0,因此需要設(shè)置ebi_csr0寄存器,寄存器地址為0xffe00000。ebi_csr0寄存器用于設(shè)置外部所接設(shè)備的數(shù)據(jù)總線寬度、等待狀態(tài)的時鐘周期、頁大小、片選使能等信息。根據(jù)flash芯片sst36vf3203的數(shù)據(jù)手冊設(shè)置ebi_csr0寄存器對應(yīng)的bit區(qū)域值,并且一直允許片選cs0,這樣jlink就能對flash進行持續(xù)的操作。最后設(shè)置ebiremapcontrolregister寄存器,寄存器地址為0xffe00020,將其值設(shè)置為1,這樣設(shè)置可以取消cpu的ram重映射功能,使計算機從flash啟動。
s3、裝載修改后的.jflash配置文件。
在projectsettings下的targetinterface中設(shè)置下載方式為jtag,設(shè)置jtagspeedbeforeinit值為30khz,設(shè)置jtagspeedafterinit為12000khz,設(shè)置jtagscanchaininformation為autodetection。
s4、裝載嵌入式固件程序。
使用target->connect連接到cpu,使cpu停止程序運行,并使cpu處于halt狀態(tài),回到初始化狀態(tài)。使用target->erasechip對flash進行整片擦除,再使用target->program&verify對flash進行寫操作,也就是下載固件程序到flash。
上述僅對本發(fā)明中的幾種具體實施例加以說明,但并不能作為本發(fā)明的保護范圍,凡是依據(jù)本發(fā)明中的設(shè)計精神所做出的等效變化或修飾或等比例放大或縮小等,均應(yīng)認為落入本發(fā)明的保護范圍。