Я столкнулся с проблемой чтения/записи EMMC. Я пытаюсь написать драйвер EMMC на Omap35x. После того, как я инициализировал карту 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 Ident State
- 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. Ответ = 0x900
После описанных выше шагов я попытался отправить команду CMD24 (MMCHS_CMD = 0x182A0002 MMCHS_ARG = 0x00000001 и MMCHS_BLK = 0x00000200), Omap успешно входит в MMCHS_STAT_BWR, а затем я отправляю данные размером 512 байт. Я могу наблюдать за отправкой этих данных по линии данных с помощью осциллографа, но затем, когда я опрашивал TC/DTO, я получил 0x108111 от MMCHS_STAT, что указывает на тайм-аут данных. Я могу получить ответ 0x900 на команду.
Для чтения я бы отправил CMD17 (MMCHS_CMD = 0x112A0012 MMCHS_ARG = 0x00000001 и MMCHS_BLK = 0x00000200). Я также могу получить ответ 0x900 на команду. Omap успешно входит в MMCHS_STAT_BRR, но я не смог наблюдать никаких данных, отправляемых по линии данных.
Пожалуйста, дайте мне знать, если вы обнаружите какие-либо проблемы с шагами, которые я сделал, или у вас есть пример, чтобы заставить его работать.