Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Помогите разобраться с SDIO на физическом уровне.

Сб мар 25, 2017 16:42:52

Здравствуйте. Помогите разобраться с SDIO. Ни для кого не секрет, что сейчас полно информации о том, как прикрутить SD карту к аппаратному SDIO на старших линейках STM32. Но.. То-то и оно, что поработав с аппаратным SDIO столкнулся с кучей багов и ошибок. Во первых, определяет не все карточки, во вторых - не со всеми карточками работает корректно. А если с FatFS, то бывают такие ошибки и тормоза, что и в страшном сне не приснится. Короче, что касается аппаратного SDIO - нафиг.!
Ну тут решил разобраться на более низком уровне, как же всё там организовано. В общем, решил с SDIO разобраться на уровне "ногодрыга". С SPI всё понятно, а вот по родному режиму SD карты в плане тайминга и т.д. информации маловато. Нашел организацию тактирования.
Тут вроде всё понятно. Тоже самое что и в SPI mode 0:
Изображение
Известно, что частота на этапе инициализации низкая и составляет порядка 400кГц. Также и то, что команда и ответ в режиме SD передаются по одной линии (CMD)
Изображение

Для того чтобы разобраться, решил посмотреть, что же происходит на линиях SCLK и CMD при работе аппаратного SDIO с заведомо рабочей картой.
И вот что интересно. Карточка хорошо определяется. Но я не могу никак понять, почему на осциллографе я не вижу ответов на команды (конкретно на CMD8). Ведь используется одна и та же линия - CMD. Клоки команд я хорошо наблюдаю. А вот ответов не вижу. Ну а аппаратный SDIO говорит что ответ получен и определяет карту. :shock:
Посылаю CMD0. Ответа на неё быть не должно. Затем CMD8.. Вот как идет команда - хорошо на экране видно. А ответа (должен прийти R7) - нет (после команды линия CMD в чистом нуле)!!! Ну а МК мне говорит в это время - что всё ОК, и ответ пришел. Но я его НЕ ВИЖУ и не видел! А он должен быть. И две "1"-цы в ответе точно есть.
Изображение
Может ответы приходят по какой-то другой линии?? Я не понимаю. Почему я не вижу ответ на CMD8 на экране осциллографа, а только команду. :dont_know: Причем команды корректные. Наблюдаю стартовый бит, сам аргумент, контрольную сумму, стоповый бит.. А вот после этого линия CMD на экране пуста... Но ответ каким-то образом приходит. :dont_know:

Просьба.Давайте только по теме, без советов - "А чем вас SPI не устраивает?" и т.д. Спасибо.

Добавлено after 1 minute 20 seconds:
Просто хохма.. Ещё выяснилось вот что. При вставленной карте при получении ответа на команду CMD8 зажигается светодиод (сделал для контроля). Если карты нет, индикация соответственно не работает, т.к. контроллер ответа от карты не получает. Карта то отсутствует.

Но вот.. Прикол.. Если карточку вынуть, и коснуться щупом осциллографа к линии CMD, и запустить программу.. То.. Вуаля, светодиод загорается, мол карта (а её там нет) прислала ответ. Я просто в ШОКе!!! :shock:

Так позвольте выяснить, это как так работает аппаратный SDIO в STM??
Не знаю как, но в очередной раз убедился - однозначно в печь. :kill:
Ответить