Сбой инициализации SD-карты SanDisk с использованием SPI после сброса HW
Я использую микроконтроллер STM32 для сопряжения памяти SD-карты с помощью периферийного устройства SPI. Я провел тесты с картами SanDisk 2 ГБ, 4 ГБ, 8 ГБ и 16 ГБ. Когда я выполняю сброс с картами 2Gb и 8Gb, ничего не происходит, и я продолжаю свои тесты. Однако с 4Gb и 16Gb после сброса инициализация завершается неудачно. На самом деле, при первой вставке в слот SD эти карты неплохо инициализируются, но одну, которую я выполняю, она не проходит.
Когда я попытался отладить эту проблему, я обнаружил, что при сбросе ответ на команду CMD0 является неправильным. Я получаю 0x00 вместо 0x01, что означает, что моя карта не находится в состоянии ожидания.
Я предположил, что проблема связана с временными проблемами с линией CS. Итак, я попытался отменить утверждение CS перед отправкой команды CMD0 и отправкой фиктивных байтов, чтобы заставить карту ждать 8 часов. Затем я отправляю CMD0 и утверждаю линию CS в High. (увидеть ниже)
SD_IO_CSState(0);
SD_IO_WriteByte(SD_DUMMY_BYTE);
response = SD_SendCmd(SD_CMD_GO_IDLE_STATE, 0, 0x95, SD_ANSWER_R1_EXPECTED);
SD_IO_CSState(1);
SD_IO_WriteByte(SD_DUMMY_BYTE);
Используя это решение, инициализация проходит после нескольких тестов сброса. Но в любой момент может произойти сбой, чего нельзя сказать о картах 2Гб и 8Гб.
Любые предложения, чтобы решить это??
2 ответа
Я также сталкиваюсь с той же самой проблемой с моей SD-картой SanDisk 24 ГБ. Что я узнал, так это то, что, возможно, SD-карты, однажды инициализированные в режиме SPI, не принимают CMD0 снова (что является командой сброса программного обеспечения!), Единственный способ вернуть их в исходное состояние - выполнить их цикл питания.
Я заметил, что карта microSD на 32 ГБ от SanDisk не отвечает должным образом на CMD0, пока она не завершит свой поток данных в ответ на команды «читать блок» или «писать блок». Я получаю ожидаемый 0x01 после CMD0 только тогда, когда он отправляется после последнего байта с SD-карты. С 8 Гб от Transcend (полноразмерная карта) таких проблем нет.