1

我遇到了 EMMC 读/写问题。我正在尝试在 Omap35x 上编写 EMMC 驱动程序。在我初始化了 emmc 卡和 omap 之后,卡进入了 tran 状态。我的读写命令永远不会成功。这是我所做的:

  1. 发送 CMD0 (MMCHS_CMD = 0x00000000 MMCHS_ARG = 0xf0f0f0f0)
  2. 忙时发送 CMD1 (MMCHS_CMD = 0x01020000 MMCHS_ARG = 0x40FF8080)
  3. 发送 CMD2 (MMCHS_CMD = 0x02090000 MMCHS_ARG = 0x00000000)
  4. 发送 CMD3 (MMCHS_CMD = 0x031a0000 MMCHS_ARG = 0x00010000) 响应 = 0x500 身份状态
  5. m_regs->MMCHS_CON &= ~0x00000001;
  6. 发送 CMD9 (MMCHS_CMD = 0x009090000 MMCHS_ARG = 0x00010000)
  7. 发送 CMD13 检查状态 (MMCHS_CMD = 0x0D1a0000 MMCHS_ARG = 0x00010000) 响应 = 0x700
  8. 发送 CMD7 (MMCHS_CMD = 0x071a0000 MMCHS_ARG = 0x00010000) 响应 = 0x700
  9. 虽然不是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 但我无法观察到通过数据线发送的任何数据。

如果您在我已完成的步骤中发现任何问题,或者您有一个使其工作的示例,请告诉我。

4

1 回答 1

0

你有没有尝试过以默认速度写/读?您可以跳过第 9 步,不要在第 10 步中将时钟更改为 48 MHz。然后重试。

此外,您在第 9 步 CMD6 切换到高速模式的响应,READY_FOR_DATA 位未准备好。我认为您可以添加一个 CMD13 以确保 eMMC 是否已准备好数据。如果 eMMC 的容量大于 2GB,则步骤 10 中不需要发送 CMD16。大容量 eMMC 默认为扇区模式。

数据超时的限制值是多少?在我的实验中,一些 eMMC 在响应后超过 8 毫秒发送第一个数据。

于 2014-12-08T01:27:54.160 回答