Инициализация SD-карты с использованием SPI - PullRequest
2 голосов
/ 04 мая 2010

Я увидел много информации о картах MMC / SD и попытался создать библиотеку для ее чтения (изменив Procyon AVRlib ).

Но у меня есть некоторые проблемы здесь. Я не изменяю оригинальный код и попробовал здесь. Моя проблема связана с инициализацией SD-карты. У меня есть два здесь, 256 МБ и еще 1 ГБ.

Я посылаю команды инициализации в следующем порядке: CMD0, CMD55, ACMD41 и CMD1.

Но SD-карта на 256 МБ возвращает только ответ 0x01 для каждой команды. Я отправляю CMD1 много раз, и SD-карта на 256 МБ всегда возвращает только 0x01, а не 0x00.

SD на 1 ГБ более сумасшедший ... CMD0 возвращается с 0x01. Хорошо, но команда CMD55 отвечает 0x05. В других случаях он отвечает 0xC1, а также иногда отвечает 0xF0 с 0x5F при следующем взаимодействии ...

В интернете есть информация и примеры, но это немного запутано. Здесь, в моем проекте, я должен использовать карту 1 ГБ, и я пытаюсь использовать карту microSD с адаптером SD (я думаю, что это не проблема).

Как мне решить эту проблему?

PS: Моя проблема похожа на проблему в вопросе переполнения стека Инициализация SD-карты в проблемах SPI , но решение не решило мою проблему. SD-карта на 1 ГБ возвращает только 0x01 когда-либо ...: cry:

Ответы [ 4 ]

2 голосов
/ 16 августа 2010

Зачем вам CMD1? И читали ли вы ниже примечание, в котором говорится, что «CMD1 является допустимой командой для тонкой (1,4 мм) карты памяти SD стандартного размера, только если она используется после повторной инициализации карты (а не после сброса при включении питания).»?

О карте на 1 ГБ, идеи, которые приходят на ум:

  • После каждой команды (отправить команду, получить ответ), вы отправляете 8 фиктивных байтов, прежде чем сделать CS высоким?
  • Возвращенные значения кажутся странными (0x05 не имеет занятого бита, поэтому WTF?), Возможно, есть проблема с оборудованием?
  • Карта работает иначе?
1 голос
/ 17 мая 2011

Простое объяснение использования MMC / SD через SPI предоставляется здесь . Я также использовал связанную библиотеку файловой системы FAT , и она хорошо работает.

1 голос
/ 17 мая 2011

Однако решение может не работать для некоторых марок карт. Для таких карт вам, возможно, придется отредактировать процедуру / библиотеку. Это может быть причиной того, что ваша карта емкостью 1 ГБ работает иначе - это может быть карта другой марки. Режим SPI некоторых карт может быть не слишком популярен для коммерческого оборудования, и поэтому некоторые производители карт могут более отклоняться в спецификации.

Если вы слегка ударили по командам и часам, у вас может быть больше контроля и уверенности в том, что эти процедуры верны. Это полезно, потому что вам нужно твердое основание, чтобы постепенно развиваться. Я обнаружил, что тактовые частоты <400 кГц 80 были критичны для одной карты, но могли работать на частоте более 2 МГц для другой. </p>

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

1 голос
/ 04 августа 2010
...