上一篇日记提到,我的板板的FLASH挂了

所以这一篇日记讲讲如何在开发板没有uboot或者flash没有内容的情况下裸奔调试code。以下以AXD为例子,我用j-link。
大多数CPU上电正常工作之前都需要配置好各种寄存器,以确定工作环境,比如内存,总线,时钟,外设等。因此正式裸奔之前,必须初始化CPU。
PS:J-LINK在下载程序到flash的前,就需要执行一系列的初始化CPU的命令。
初始化的内容大家可以打开开发板自带的任意一个程序,找到初始化汇编文件44binit.S,这个文件就是我们开机初始化44b0的模板拉,初始化之后跳到main执行c。
44b0要初始化的寄存器包括:
setmem 0x01C00000 0x0E 8 ;SYSCFG
setmem 0x01E0000C 0x07FFFFFF 32 ;INTMSK
setmem 0x01D30000 0x0 16 ;WTCON
setmem 0x01D80000 0x0003A031 32 ;PLLCON,10MHZ OSC,66M OUT
setmem 0x01C40000 0x80001B1B 32 ;SBUSCON
setmem 0x01C80000 0x11110112 32 ;BWSCON
setmem 0x01C80004 0x00000600 32 ;BANKCON0
setmem 0x01C80008 0x00000700 32 ;BANKCON1
setmem 0x01C8000C 0x00000700 32 ;BANKCON2
setmem 0x01C80010 0x00000700 32 ;BANKCON3
setmem 0x01C80014 0x00000700 32 ;BANKCON4
setmem 0x01C80018 0x00000700 32 ;BANKCON5
setmem 0x01C8001C 0x00018000 32 ;BANKCON6
setmem 0x01C80020 0x00018000 32 ;BANKCON7
setmem 0x01C80024 0x0086041A 32 ;REFRESH
setmem 0x01C80028 0x00000016 32 ;BANKSIZE
setmem 0x01C8002C 0x00000020 32 ;MRSRB6
setmem 0x01C80030 0x00000020 32 ;MRSRB7
setmem 0x01D20000 0x000001FF 32 ;PCONA
setmem 0x01D20004 0x00000000 32 ;PDATA
setmem 0x01D20010 0x5F555555 32 ;PCONC
setmem 0x01D20014 0x00000000 32 ;PDATC
setmem 0x01D20018 0x00003000 32 ;PUPC
setmem 0x01D2001C 0x0000AAAA 32 ;PCOND
setmem 0x01D20020 0x00000055 32 ;PDATD
setmem 0x01D20024 0x00000000 32 ;PUPD
setmem 0x01D20028 0x0000556B 32 ;PCONE
setmem 0x01D2002C 0x00000357 32 ;PDATE
setmem 0x01D20030 0x00000006 32 ;PUPE
setmem 0x01D20034 0x0022445A 32 ;PCONF
setmem 0x01D20038 0x00000000 32 ;PDATF
setmem 0x01D2003C 0x000001D3 32 ;PUPF
setmem 0x01D20040 0x00000000 32 ;PCONG
setmem 0x01D20044 0x000000FF 32 ;PDATG
setmem 0x01D20048 0x00000000 32 ;PUPG
其中SYSCFG,INTMASK,WTCON,PLLCON,SBUSCON,BWSCON,BANKCON0~7,REFRESH,BANKSIZE,MRSRB6/7一定要根据自己的开发板的配置来设置寄存器的值!设置这些值的时候要参考44b0的datasheet。


寄存器的地址可以参考44b.h,可以少牺牲点脑细胞,呵呵。
AXD下面要用到如下命令设置寄存器的值,这里写的是set memory,好像是设置内存哦,呵呵,44b的特殊寄存器是在。。。。。。。
下面是setmem命令的说明如下:

大家也可以用fillmem命令

这么多初始化命令最好用AXD的obey命令载入批处理,就是将上面的初始化命令存为txt
然后用obey载入

好,let's go!
以下假设我们已经用J-LINK或者wiggler连接上AXD跟开发板
1.打开命令行

2.载入批处理txt初始化主板

3.初始化之后可以看到三个LED已经灭了,然后load memory

4.选择无敌的Led_test.bin,注意load到的目标地址是0x0c000000及sdram起始处!

5.然后可以看到当前pc指针指向的是0x0,未定义指令,执行的话会发生异常哦。需要修改pc指针。打开处理器寄存器窗口。

6.修改pc为0x0c000000

7.可爱的中断向量表呵呵出来拉,接下去可以debug了。
用户1620250 2009-12-22 22:29
用户240011 2009-12-20 21:15