之前介紹了使用ARM JTAG仿真器將映像文件加載到ARM處理器內(nèi)部SRAM中進(jìn)行程序調(diào)試的方法,而在實(shí)際操作中,將映像文件加載到外部SDRAM中進(jìn)行調(diào)試的方式更為常見(jiàn)。
要把映像文件加載到SDRAM中,除了要正確設(shè)置好映像文件的RO段基地址外(對(duì)于一個(gè)加載時(shí)域和運(yùn)行時(shí)域相同的映像文件來(lái)說(shuō),RO段基地址實(shí)際上就是該映像文件在存儲(chǔ)空間的起始地址),更關(guān)鍵的是要對(duì)SDRAM進(jìn)行初始化。因?yàn)樵谏想姇r(shí),SDRAM是沒(méi)有被初始化的,所謂初始化SDRAM,就是要設(shè)置處理器的SDRAM空間以及讀寫(xiě)SDRAM的時(shí)序參數(shù),因而SDRAM在初始化之前是不能進(jìn)行讀寫(xiě)操作的。
對(duì)于PXA270處理器,初始化SDRAM的工作通過(guò)配置存儲(chǔ)控制器寄存器來(lái)完成,這些寄存器包括MDCNFG,MDREFR,MDMRS。
由于這些寄存器都映射到了某一存儲(chǔ)空間地址,因而可以在A(yíng)XD的命令行窗口(System Views->Command Line Interface [Alt+L])中使用setmem命令來(lái)對(duì)寄存器進(jìn)行配置。setmem命令(簡(jiǎn)寫(xiě)為smem)可以為存儲(chǔ)空間的某一地址單元指定值。例如“setmem 0x48000000 0xac9 32”的含義就是將常數(shù)0xac9保存到地址為0x48000000的字中(一個(gè)字32bit)。實(shí)際上,通過(guò)查閱Intel PXA27x Processor Family Developer’s Manual可知,0x48000000正是寄存器MDCNFG的地址,因而這條命令實(shí)質(zhì)上完成了對(duì)MDCNFG寄存器的配置,使能SDRAM partition 0,使用32bit寬的SDRAM數(shù)據(jù)總線(xiàn),9位列地址,13位行地址,SDRAM內(nèi)部采用4 bank設(shè)計(jì),tRP=3,CL=3,tRCD=3,tRAS=7,tRC=10,采用普通尋址模式;不使用SDRAM partition 2/3。具體設(shè)置要根據(jù)實(shí)際所使用的SDRAM芯片進(jìn)行。
因此,可使用3~4條setmem命令初始化SDRAM,之后就可以正確地將映像文件加載到SDRAM中運(yùn)行了。順便提一句,PXA270有兩種SDRAM存儲(chǔ)模式,一種是小空間模式,支持4個(gè)64M的partition共計(jì)256M字節(jié),起始地址為0xa0000000;另一種是大空間模式,支持4個(gè)256M的partition共計(jì)1GB,起始地址為0x80000000。應(yīng)根據(jù)實(shí)際情況設(shè)置正確的RO BASE地址。
關(guān)于使用ob命令自動(dòng)初始化SDRAM:
由于每次上電后往SDRAM加載映像時(shí)都需要對(duì)其進(jìn)行初始化,手工輸入多條命令有時(shí)是很繁瑣的。這時(shí),可以把初始化SDRAM的命令序列保存在一個(gè)*.ini文本文件中(也可以是*.txt文件),每條命令占一行。然后在A(yíng)XD命令行窗口使用obey命令調(diào)用該*.ini文件,就可以將文件中的命令順序執(zhí)行,繼而完成SDRAM的初始化。
例如,將SDRAM初始化命令序列保存在PXA270.ini文件中,執(zhí)行命令:
ob $PATH/PXA270.ini
就可自動(dòng)執(zhí)行初始化SDRAM的命令。其中,ob是obey的簡(jiǎn)寫(xiě),$PATH是PXA270.ini文件的絕對(duì)路徑。
更多AXD命令和內(nèi)容可以參考ADS手冊(cè)之《AXD and armsd Debuggers Guide》。
啟動(dòng)AXD時(shí)自動(dòng)初始化SDRAM:
感謝網(wǎng)友Garfield的指點(diǎn),他提出了在硬件平臺(tái)不變的情況下,在啟動(dòng)AXD時(shí)自動(dòng)初始化SDRAM的一勞永逸的辦法,經(jīng)筆者證實(shí),該方法確實(shí)是可行的。
具體辦法如下:
將初始化SDRAM的命令序列保存為一個(gè)*.txt文本文件(可以直接將上述的*.ini文件后綴改為.txt),然后在A(yíng)XD的主窗口下選擇菜單Options->Configure Interface...,在Session File一頁(yè)中選擇“Run Configuration Script”,將該.txt文本文件作為一個(gè)腳本加進(jìn)來(lái),確定。這樣以后每次啟動(dòng)AXD時(shí),就會(huì)自動(dòng)運(yùn)行該腳本來(lái)完成對(duì)SDRAM的初始化。
附:每次系統(tǒng)重新上電或硬件復(fù)位后都需要重新初始化SDRAM才能把映像文件加載到SDRAM??梢栽O(shè)置在A(yíng)XD啟動(dòng)時(shí)自動(dòng)對(duì)SDRAM進(jìn)行初始化,見(jiàn)“啟動(dòng)AXD時(shí)自動(dòng)初始化SDRAM”部分。有時(shí)候AXD啟動(dòng)后需要重新配置,這是ADS自身的問(wèn)題,主要是看啟動(dòng)后在CommandLineInterface窗口有沒(méi)有出現(xiàn)初始化SDRAM的命令,另外在A(yíng)XD的源碼窗口右鍵InterleaveDisassembly,看各條代碼在SDRAM中對(duì)應(yīng)地址的內(nèi)容是否為正確的機(jī)器碼,來(lái)檢查映像文件是否成功加載。
評(píng)論