我们的DM8168 DVR电路使用1个ddr3控制器(板上使用4片2Gb的ddr3芯片而不是8片ddr3芯片),需用非交织访问模式。u-boot-04.04.00.01 源代码修改方式如下:
1. "arch/arm/include/asm/arch-ti81xx/ddr_defs_ti816x.h"文件中宏USE_EMIF1的值修改为0。
2. "include/configs/ti8168_evm.h"文件中的宏CONFIG_TI816X_TWO_EMIF的值修改为0。
3. "board/ti/ti8168/evm.c"文件中的DMM_LISA_MAPP__0/4配置参数的代码修改为非交织访问模式:
__raw_writel(0x0, DMM_LISA_MAP__0);
__raw_writel(0x0, DMM_LISA_MAP__1);
__raw_writel(0x0, DMM_LISA_MAP__2);
__raw_writel(0x80600100, DMM_LISA_MAP__3);
将DDR访问模式修改为非交织访问模式后,"make ti8168_evm_min_sd"编译生成第一阶段BOOT文件MLO文件,"ti8168_evm_config_sd"编译生成第二阶段BOOT文件u-boot.bin,然后使用mksd-ti816x.sh脚本格式化SD Card并拷贝BOOT文件进SD卡中。但在板上设置好SD启动模式后,出现SD卡访问超时,不能读取第二阶段BOOT文件的错误,不能运行第二阶段BOOT。启动时串口打印信息如下:
U-Boot 2010.06 (Aug 23 2012 - 10:51:19)
DRAM: 2 GiB
MMC: OMAP SD/MMC: 0
Using default environment
Hit any key to stop autoboot: 0
raise: Signal # 8 caught
** Can't read from device 0 **
** Unable to use mmc 0:1 for fatload **
## Starting application at 0x80800000 ...
上面信息中的红色字部分为出错信息,在"drivers/mmc/omap_hsmmc.c"程序中增加打印语句将在存取SD卡时的mmc控制器状态寄存器的值打印出来,串口打印信息显示如下:
U-Boot 2010.06 (Aug 24 2012 - 10:23:15)
DRAM: 2 GiB
MMC: OMAP SD/MMC: 0
Using default environment
Hit any key to stop autoboot: 0
TI8168_EVM#mmc rescan 0
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
raise: Signal # 8 caught
mmc_stat: 0x38000
Timeout IE_CTO error
TI8168_EVM#mmcinfo
raise: Signal # 8 caught
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x3
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
mmc_stat: 0x1
raise: Signal # 8 caught
mmc_stat: 0x38000
Timeout IE_CTO error
Device: OMAP SD/MMC
Manufacturer ID: 60
OEM: 4853
Name: 1GU2M
Tran Speed: 25000000
Rd Block Len: 512
SD version 2.0
High Capacity: No
Capacity: 999292928
Bus Width: 4-bit
TI8168_EVM#fatls mmc 0
mmc_stat: 0x38000
Timeout IE_CTO error
** Can't read from device 0 **
** Unable to use mmc 0:1 for fatls **
从以上信息中可以看到,在使用mmc rescan 0,mmcinfo以及fatls mmc 0的命令对SD卡进行访问时,mmc_stat值出现0x38000,造成超时错误而退出,从而不能正常读取第二阶段u-boot.bin文件去运行。经检查,电路连接未发现问题,在几块板上测试均有同样问题。另在第一阶段u-boot中用mm及md命令读写DDR内存也正常(应可排除DDR数据错误导致程序出错的可能性)。
请问该问题有可能是什么原因造成?应如何解决?