本帖最后由 mengshenshen 于 2016-5-19 09:11 编辑
现在问题定位到在路径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("\r\n %u",irqstat);得出官网的打印结果为33,自己做的板子的打印结果为1。在此函数之前添加打印信息printf("\r\n 0x%08x\n",regs->irqstat);得出官网和自己做的板子的打印信息都为0x00000001。
结论:因为readl()为从内存映射的 I/O 空间读取数据,readl 从 I/O 读取 32 位数据 ( 4 字节 )。readl(为地址位)即在读取地址位0x00000001的数据的时候出了问题。即硬件地址位0x00000001的GPIO口出了问题
|