淺談ARM裸板調(diào)試
如我前面所說,剛拿到ARM裸板的時(shí)候,首先就是要上電。不過上電之前,最好測一下電源和地是否短路。然后就可以上電了,我一般采用穩(wěn)壓電源,這樣可以看到電流的大小,如果電流太大,說明硬件可能有問題,用手摸摸板子上的芯片,看看是否燙手,查一下各個(gè)電源模塊的供電電壓是否正常。如果ARM板正常,就可以開始了。下面根據(jù)我個(gè)人經(jīng)驗(yàn),介紹調(diào)試步驟和可能遇到的問題:
1.連接仿真器,讀寫寄存器
將硬件仿真器插到ARM板的JTAG口上,然后連接PC,現(xiàn)在的ARM仿真器好像都是通過USB和PC相連了。連接好后,就給板子上電,然后打開PC端的調(diào)試軟件,我在這里用的是ARM11的仿真器,調(diào)試軟件用AXD。如果AXD識(shí)別出ARM處理器表示連接成功,如果沒識(shí)別出來就是有問題了。
(1)確認(rèn)ARM處理器的所有供電是否正確
(2)確認(rèn)ARM處理器的RESET管腳
(3)確認(rèn)ARM處理器的晶振是否震動(dòng)
(4)確認(rèn)JTAG接口是否正確
如果上面這4條都正常,仿真器就應(yīng)該可以找到ARM。
2.通過腳本初始化ARM處理器及DRAM
由于是裸板,所以ARM上電以后沒有做過任何的初始化。一般會(huì)通過執(zhí)行一個(gè)腳本來對(duì)ARM做一個(gè)基本的初始化。腳本一般就是一個(gè)txt文件,例如:
setmem 0x36001004 0x4 32
setmem 0x36001010 0x40d 32
setmem 0x36001014 0x6 32
setmem 0x36001018 0x3 32
setmem 0x3600101c 0xf 32
setmem 0x36001020 0xf 32
setmem 0x36001024 0xf 32
mem 0x36001000 +1 32
mem 0x36001004 +1 32
mem 0x36001008 +1 32
mem 0x3600100c +1 32
….
上面的腳本命令是用于AXD軟件的,其中“setmem”命令表示設(shè)置某個(gè)值到某個(gè)地址上,而“mem”命令表示從某個(gè)地址讀一個(gè)值并打印出來。通過這兩條命令,可以設(shè)置ARM內(nèi)部的寄存器,也可以讀出寄存器的值。腳本的作用主要是對(duì)ARM做初始化,一般包括關(guān)閉Interrupt和watchdog,配置clock,配置GPIO,配置DRAM控制器。
如何在AXD中運(yùn)行腳本呢?首先在AXD菜單中選擇”System Views”,然后選擇”Command Line Interface”,會(huì)彈出一個(gè)窗口,在窗口中輸入如下命令:
ob c:/init.txt
該命令的意思是運(yùn)行C盤根目錄下的init.txt中的腳本命令。如圖:
腳本運(yùn)行完成以后,板子上的ARM和DRAM就應(yīng)該已經(jīng)被初始化好了。這時(shí)候可以做讀寫Memory的測試,在菜單中選擇”Process Views”,然后選擇”Memory”,輸入DRAM的地址,然后修改一些地址上面的值,被改變后的值會(huì)變成紅色,如果可以修改,表示DRAM應(yīng)該工作正常了,這里給一張截圖:
3.通過AXD下載程序到DRAM中運(yùn)行
接下來就是下載程序到DRAM中運(yùn)行了,主要目的是通過該程序來燒錄bootloader?,F(xiàn)在的ARM處理器都很強(qiáng)大,支持多種啟動(dòng)模式。根據(jù)不同的啟動(dòng)模式,要將bootloader燒到不同的介質(zhì)當(dāng)中。在AXD菜單中選擇”File”,然后選擇”Load Memory from File…”,會(huì)彈出一個(gè)窗口,如下:
如圖要在”Address”輸入下載的地址,這個(gè)地址就是Loader_RAM.bin的運(yùn)行地址。下載成功以后,打開串口,然后在AXD的”Command Line Interface”中輸入命令”setpc 0x50000000”,將PC指針指到0x50000000地址上,然后輸入命令”go”開始運(yùn)行。
4.燒錄bootloader,啟動(dòng)ARM板
被下載的程序運(yùn)行以后,就可以通過該程序?qū)ootloader燒錄到Nandflash,NORflash或者SD卡中,具體取決于板子所支持的啟動(dòng)模式。這個(gè)程序可以通過串口下載bootloader。還有一種方法就是在AXD中暫停程序運(yùn)行,然后通過仿真器下載bootloader到DRAM中,然后再在AXD中恢復(fù)程序運(yùn)行,通過最開始下載的程序?qū)⑾螺d的bootloader燒到flash或者SD卡當(dāng)中。
燒錄成功以后,關(guān)電,拔掉仿真器的JTAG,重新上電,這個(gè)時(shí)候ARM板中的bootloader就可以運(yùn)行了。
bootloader運(yùn)行后,工作就容易了?,F(xiàn)在的bootloader都很強(qiáng)大,Linux有uboot,WinCE有Eboot,都能支持燒錄,下載等功能。一般如果是買的開發(fā)板,都會(huì)提供燒錄工具。不過在更換了DRAM和Nandflash以后,燒錄工具可能也需要重新調(diào)試了。而且使用的bootloader也需要做改動(dòng)。
評(píng)論