现在问题定位到在路径u-boot-2009.08/drivers/mmc/imx_esdhc.c这个文件中,u-boot卡死在while(!(readl(®s->irqstat)&IRQSTAT_BRR));这里。
在与官方板子对比中发现在u-boot-2009.08/drivers/mmc/imx_esdhc.c路径中函数下static int esdhc_send_cmd()中(第231行中)irqstat = readl(®s->irqstat);的函数后面添加打印信息,printf("
%u",irqstat);得出官网的打印结果为33,自己做的板子的打印结果为1。在此函数之前添加打印信息printf("
0x%08x
",regs->irqstat);得出官网和自己做的板子的打印信息都为0x00000001。
结论:因为readl()为从内存映射的 I/O 空间读取数据,readl 从 I/O 读取 32 位数据 ( 4 字节 )。readl(为地址位)即在读取地址位0x00000001的数据的时候出了问题。即硬件地址位0x00000001的GPIO口出了问题
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>