Omap 35x Emmc读/写问题

时间:2014-09-17 18:48:07

标签: omap

我遇到了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.将时钟设置为48 MHz发送CMD 16(MMCHS_CMD = 0x101a0000 MMCHS_ARG = 0x00000200) 11.发送CMD13检查状态(MMCHS_CMD = 0x0D1a0000 MMCHS_ARG = 0x00010000)响应= 0x900
  10. 完成上述步骤后,我尝试发送命令CMD24(MMCHS_CMD = 0x182A0002 MMCHS_ARG = 0x00000001和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,但我无法观察到通过数据线发送的任何数据。

    如果您发现我已经完成的步骤有任何问题或者您有一个示例可以让它发挥作用,请告诉我。

1 个答案:

答案 0 :(得分:0)

你有没有尝试以默认速度写/读? 您可以跳过步骤9.,不要在步骤10中将时钟更改为48 MHz。再试一次。

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

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