我遇到了 EMMC 读/写问题。我正在尝试在 Omap35x 上编写 EMMC 驱动程序。在我初始化了 emmc 卡和 omap 之后,卡进入了 tran 状态。我的读写命令永远不会成功。这是我所做的:
- 发送 CMD0 (MMCHS_CMD = 0x00000000 MMCHS_ARG = 0xf0f0f0f0)
- 忙时发送 CMD1 (MMCHS_CMD = 0x01020000 MMCHS_ARG = 0x40FF8080)
- 发送 CMD2 (MMCHS_CMD = 0x02090000 MMCHS_ARG = 0x00000000)
- 发送 CMD3 (MMCHS_CMD = 0x031a0000 MMCHS_ARG = 0x00010000) 响应 = 0x500 身份状态
- m_regs->MMCHS_CON &= ~0x00000001;
- 发送 CMD9 (MMCHS_CMD = 0x009090000 MMCHS_ARG = 0x00010000)
- 发送 CMD13 检查状态 (MMCHS_CMD = 0x0D1a0000 MMCHS_ARG = 0x00010000) 响应 = 0x700
- 发送 CMD7 (MMCHS_CMD = 0x071a0000 MMCHS_ARG = 0x00010000) 响应 = 0x700
- 虽然不是tran状态,请发送cmd6(mmchs_cmd = 0x061a0000 mmchs_arg = 0x03b90100)响应= 0x800 10.set时钟到48 mhz发送CMD 16(MMCHS_CMD = 0x101A0000 MMCHS_ARG = 0x10000 MMCHS_RG = 0X00000 SSER = 0X00000 SSNENDESNEND = 0X00000200 = 0X00000200)响应 = 0x900
经过以上步骤,我尝试发送命令CMD24(MMCHS_CMD = 0x182A0002 MMCHS_ARG = 0x00000001 and MMCHS_BLK = 0x00000200),Omap成功进入MMCHS_STAT_BWR,然后我发送了512字节的数据。我可以使用示波器观察通过数据线发送的那些数据,但是当我轮询 TC/DTO 时,我收到了来自 MMCHS_STAT 的 0x108111,表示数据超时。我可以收到命令的响应 0x900。
对于读数,我将发送 CMD17(MMCHS_CMD = 0x112A0012 MMCHS_ARG = 0x00000001 和 MMCHS_BLK = 0x00000200)。我还可以收到命令的响应 0x900。Omap 成功进入 MMCHS_STAT_BRR 但我无法观察到通过数据线发送的任何数据。
如果您在我已完成的步骤中发现任何问题,或者您有一个使其工作的示例,请告诉我。