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