我们初步复制了uboot的2410增加了2440
编译后下载发现串口没有数据?
通过阅读代码发现是时钟问题,导致uboot的内存即sdram不可用?
首先我们要确定我们的sdram到底读写有没有问题?
通过写数据到sdram再读出数据判断,我们的代码是否有问题,导致sdram不可以正常使用。这个测试我们要借助openjtag来调试!
1、先用oflash+openjtag下载出厂uboot,(要设为nand启动再下载,下载后重启到nor启动)。
2、利用旧的uboot,连接penjtag,连接开发板的串口到串口助手,启动开发板,倒计时的时候按空格。
进入菜单我们用串口线界面+dnw通过usb数据线发送新的uboot文件到sdram开始地址30000000.
下载新的uboot到内存sdram中
OpenJTAG>usb 1 30000000
取消nandflash的写保护
OpenJTAG> protect off all
Un-Protect Flash Bank # 1
擦除nandflash上的0地址到7ffff地址上的内容
OpenJTAG> erase 0 7FFFF
… done
Erased 11 sectors
把什么拷贝到内存sdram的开始地址30000000起 512k,复制到norflash
OpenJTAG> cp.b 30000000 0 80000
Copy to Flash… done
OpenJTAG> >
3、打开OpenJTAG.exe,Connect加打开telnet
下面两张图是是看程序运行的地址在哪里
> halt
target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0x600000d3 pc: 0x0002ad04
MMU: disabled, D-Cache: disabled, I-Cache: enabled
> step 0
target state: halted
target halted in ARM state due to single-step, current mode: Supervisor
cpsr: 0x600000d3 pc: 0x00000054
MMU: disabled, D-Cache: disabled, I-Cache: enabled
> step
target state: halted
target halted in ARM state due to single-step, current mode: Supervisor
cpsr: 0x600000d3 pc: 0x00000058
MMU: disabled, D-Cache: disabled, I-Cache: enabled
在0x98的00000098 <call_board_init_f>:的位置上打个断点
> bp 0x98 4 hw
breakpoint set at 0x00000098
继续运行
resume
target state: halted
target halted in ARM state due to breakpoint, current mode: Supervisor
cpsr: 0x600000d3 pc: 0x00000098
MMU: disabled, D-Cache: disabled, I-Cache: enabled
写个值再读出来,验证是否有问题?
mw 0x30000000 0x87654321
invalid command name “mw”
mww 0x30000000 0x87654321
mdw 0x30000000
0x30000000: 87654323确实有问题