문제

나는 a를 사용하고있다 microSD 임베디드 디자인의 카드. 카드는 SPI 인터페이스를 사용하여 마이크로 컨트롤러에 연결됩니다. 이전에 사용한 모든 카드에 대해 잘 작동했지만 이제 새 카드는 초기화되지 않습니다. 이 카드는 2GB MicroSD 카드 (TS2GUSD)를 초월합니다.

SPI 모드로 전환하기 위해 초기 시계 열차를 보내면 다음을 수행합니다.

  1. CMD0 (Argument 0, CRC 0x95) -> 응답 0x01-> OK

  2. CMD8 (Argument 0x000001AA, CRC 0x87) -> 응답 0x01 0x000001AA->는 SDC V2+ 카드, 전압 범위 2.7 V -3.6 V가 지원되었음을 의미합니다 -> OK

그런 다음 ACMD41 명령을 보내야하지만 CMD41보다 우선 해야하는 CMD55 (Argument 0, CRC 0)를 보낼 때 응답 0x05-> 불법 명령을받습니다. 또한 CMD1 (MMC 카드 용)을 보내려고했지만 비슷한 불법 명령 응답. 이 코드는 내 Sandisk 2GB MicroSD 카드와 함께 잘 작동합니다.

이 문제를 해결하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

나는 문제를 발견 한 것 같습니다. CMD55에 대한 올바른 CRC를 계산하고 더미 CRC 대신이를 보내면 명령이 허용됩니다 (결과 0x01). 당신이 보면 물리적 층 사양 7.2.2 절에서는 다음과 같이 말합니다.

SPI 인터페이스는 CRC OFF 모드에서 기본값으로 초기화됩니다. (명령 CMD0 및 CMD8 명령 제외).

이 일련의 초월 카드의 경우에는 해당되지 않으므로 사양을 위반하는 것 같습니다. 또한 CRC 오류의 경우 응답은 0x05 대신 0x09 여야합니다. CMD59로 CRC 확인을 명시 적으로 끄려고했지만 도움이되지 않는 것 같습니다.

=> (모두?) 명령에 대한 올바른 CRC를 계산하면 카드가 작동합니다.

나는 이것에 대한 초월 지원과 접촉하고 있습니다. 내가 유용한 것을 배우면 여기서 알게 될 것입니다.

나는 이전에 다른 2GB 초월 카드를 사용했지만 대만에서 만들어졌지만 새로운 것은 한국에서 만들어졌으며 (삼성 카드 (MMAGR02GUDCA) 인 것 같습니다).

다른 팁

나는 거의 같은 문제를 가졌다. ACMD41을 보낼 때 CMD55를 보냈고 CMD41을 보냈습니다. CMD55에 대한 응답은 0x01로 유휴 상태를 나타내고 초기화 프로세스를 실행합니다 (이것은 정상이라고 생각합니다). CMD41은 0x05로 응답하여 불법 명령을 나타냅니다. 내 특정 카드는 SPI 모드에서도 기본적으로 CRC 확인을 수행하고 CRC 오류를 불법 명령으로 잘못보고합니다 (즉, SD 사양을 따르지 않음). 적절한 CRC를 계산하면 잘 작동합니다. 여기에 내가 사용한 CRC7 계산 코드는 다음과 같습니다.

https://github.com/hazelnusse/crc7

CRC 점검을 비활성화하지 않는 한, 비활성화되지 않았다고 가정하고 각 명령 프레임에 대해 적절한 CRC를 계산하는 것이 가장 좋을 것 같습니다. 내가 말할 수있는 것에서, 일부 카드는 SPI 모드에서 기본적으로 비활성화하고 다른 카드는 SD 사양에 따라 CMD8을 제외하고 SPI 모드에서 기본적으로 비활성화되어야한다고 말하지만이를 활성화합니다.

당신은 당신이 사용했다고 말했습니다 CRC 0 실패한 명령. 나는 당신이 마지막 바이트 전체를 0x00. CRC7은 마지막 바이트의 첫 7 비트에 불과합니다. 마지막 비트는 호출됩니다. end bit 항상 있어야합니다 1. 그래서 당신이 보내는 경우 0x00 마지막 바이트로 0 마지막으로, 실패는 이해할 수 있고 오류 코드조차도 의미가 있습니다. 당신이 보내는 경우 1 마지막 비트로서 작동해야합니다. 같은 것을 사용하십시오 0x01 또는 0xFF 마지막 바이트로.

정상적으로, 준비하는 데 평소보다 시간이 오래 걸리는 지우기 전압을 만드는 데 사용되는 내부 전하 펌프 일 가능성이 높습니다. 초기화가 완료 될 때까지 CMD55+ACMD41 콤보를 고집해야합니다.

CMD58은 또한 올바른 전압 레벨을 공급하는지 확인하는 데 도움이 될 수 있습니다 (때로는 소켓에 접촉 문제가 있음).

Chip Select (0)만으로 CMD0을 보내는 것은 SPI 모드에서 카드를 초기화하지 않습니다. 이것은 SPI 모드 만 설정합니다. ACMD41이 수락 될 때까지 카드가 초기화되지 않습니다. 그런 다음 CRC가 기본적으로 꺼져 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top