Omap 35x Emmc проблема чтения/записи

Я столкнулся с проблемой чтения/записи EMMC. Я пытаюсь написать драйвер EMMC на Omap35x. После того, как я инициализировал карту 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 Ident State
  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. Ответ = 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, но я не смог наблюдать никаких данных, отправляемых по линии данных.

Пожалуйста, дайте мне знать, если вы обнаружите какие-либо проблемы с шагами, которые я сделал, или у вас есть пример, чтобы заставить его работать.


person Ytterbia    schedule 17.09.2014    source источник


Ответы (1)


Вы когда-нибудь пробовали писать/читать со скоростью по умолчанию? вы можете пропустить шаг 9., не меняйте часы на 48 МГц в шаге 10. и попробуйте еще раз.

Кроме того, ваш ответ CMD6 переключается в высокоскоростной режим на шаге 9, бит READY_FOR_DATA не готов. Я думаю, вы можете добавить CMD13, чтобы убедиться, что eMMC готов к данным. Если емкость eMMC превышает 2 ГБ, вам не нужно отправлять CMD16 на шаге 10. eMMC большой емкости по умолчанию работает в секторном режиме.

Каково ваше ограниченное значение тайм-аута данных? В моих экспериментах некоторые eMMC отправляют первые данные более чем через 8 мс после ответа.

person Hsin-Hsiang    schedule 08.12.2014