利用IAR調試Mini2440 收藏
利用IAR 調試mini2440,準備先玩玩裸奔
以前開發Lpc2214的時候用的是IAR調試環境 感覺還是很不錯的 當時一度錯怪的了這開發環境
因為Lpc對Jtag的引腳可以配置成普通IO
我當時一時疏忽把他配置成IO了 導致IAR無法逐步執行 一度覺得這個環境不好用 當時由於把Jtag口屏蔽了 導致下載一次以後JTAG口就不能用了 很多時候都是用串口擦除了片內Flash再燒寫 後來回憶起來當時有點傻(主要還是當時誤認為晶片被加密了,只能用串口擦除),當時完全不必用串口擦除程式。其實Jtag口被屏蔽了 直接把晶片的ISP使能引腳短接,然後晶片就從內部的Bootloader啟動了,然後Flashloader就可以下載程式了
開發Lpc時還有一個需要注意的地方就是如果MEMMAP設定的不對的話,一發生中斷就會跳到一個不對的地方 導致中斷無法調試 因為這個原因 讓我當時懷疑IAR是無法調試中斷的 後來發現我完全錯了
後來接觸了Samsung的一些片子,知道了Mac檔案的作用,mac檔案是在編譯成功的二進位檔案下載到硬體之前,用來配置ARM寄存器的檔案,比如2440帶有片上的SDRAM控制器,由於上電後SDRAM寄存器是預設不使能的,所以如果要在RAM中偵錯工具的話,程式是無法下載到RAM中的。所以在檔案下載之前必須配置SDRAM控制器。
我先在RAM中跑了一個RAM程式,mac檔案如下
execUserFlashInit()
{
__writeMemory32(0x00000000, 0x53000000, "Memory");
__writeMemory32(0xffffffff, 0x4a000008, "Memory");
__writeMemory32(0x000007ff, 0x4a00001c, "Memory");
__writeMemory32(0x00000000, 0x53000000, "Memory");
__writeMemory32(0x000055AA, 0x56000050, "Memory");
__writeMemory32(0x00000007, 0x4C000014, "Memory");
__writeMemory32(0x00FFFFFF, 0x4C000000, "Memory");
__writeMemory32(0x00061012, 0x4C000004, "Memory");
__writeMemory32(0x00040042, 0x4C000008, "Memory");
__writeMemory32(0x22111120, 0x48000000, "Memory");
__writeMemory32(0x00002F50, 0x48000004, "Memory");
__writeMemory32(0x00000700, 0x48000008, "Memory");
__writeMemory32(0x00000700, 0x4800000C, "Memory");
__writeMemory32(0x00000700, 0x48000010, "Memory");
__writeMemory32(0x00000700, 0x48000014, "Memory");
__writeMemory32(0x0007FFFC, 0x48000018, "Memory");
__writeMemory32(0x00018005, 0x4800001C, "Memory");
__writeMemory32(0x00018005, 0x48000020, "Memory");
__writeMemory32(0x008E0459, 0x48000024, "Memory");
__writeMemory32(0x00000032, 0x48000028, "Memory");
__writeMemory32(0x00000030, 0x4800002C, "Memory");
__writeMemory32(0x00000030, 0x48000030, "Memory");
}
將ICF檔案中的起始地址都設定成SDRAM的地址,程式就能下載運行並且調試了。
現在還沒有摸索出來怎麼將檔案利用flashloader下載到外部flash中。參考lpc的調試,發現不管是下載到片內的FLASH還是片外的Flash,flashloader在程式下載之前首先要將一個.out檔案下載到片子的RAM中,這點和HJTAG相似,HJTAG在下載時也是需要你指明RAM的起始地址的,他們這兩個工具下載原理是一樣的,加入你要將B程式燒寫進flash中,必須先將一個編譯好的二進位程式A下載到片子的內部RAM中,然後利用A這個程式在將要下載的B程式下載到flash中
IAR的flashloader提供很多片子的A程式,像LPC系列片子的A程式都有,但是對於2440就沒有這個程式,需要自己寫,如果不自己實現的話也可以採用HJTAG的HFALSHER來進行燒寫。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/dog0138/archive/2008/11/18/3321361.aspx