Domanda

Io sto usando un scheda microSD in un design integrato. La scheda è collegata ad un microcontrollore utilizzando l'interfaccia SPI. Ha funzionato bene per tutte le carte che ho usato prima, ma ora la mia nuova carta non verrà inizializzato. La carta è una carta GB microSD Transcend 2 (TS2GUSD).

Dopo aver inviato il treno orologio iniziale per passare alla modalità SPI, faccio la seguente:

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

  2. CMD8 (Argument 0x000001AA, CRC 0x87) -> risposta 0x01 0x000001AA -> significa che è DSC V2 + carta, la gamma di tensione di 2,7 V - 3,6 V è supportata -> OK

Allora dovrei inviare il comando ACMD41, ma quando si invia il CMD55 (argomento 0, CRC 0) che deve precedere CMD41, ottengo risposta 0x05 -> Comando illegale. Ho anche provato a mandare CMD1 (per schede MMC), ma dà una simile Comando illegale risposta. Il codice funziona bene con la mia Sandisk 2 GB memory card microSD.

Come posso risolvere questo problema?

È stato utile?

Soluzione

mi sembra di aver trovato il problema. Quando ho calcolare il corretto CRC per CMD55 e mando che invece di un manichino CRC, il comando è accettato (risultato 0x01). Se si guarda a la specifica strato fisico nella sezione 7.2.2 , si dice esplicitamente che:

  

L'interfaccia SPI viene inizializzato in modalità OFF CRC in default. (Tranne per i comandi e CMD0 CMD8).

Questo non sembra essere il caso di questa serie di schede Transcend, violando così la specifica. Anche in caso di un errore di CRC la risposta dovrebbe essere 0x09 invece di 0x05. Ho cercato di trasformare in modo esplicito fuori controllo CRC con CMD59, ma che non sembra aiutare.

=> Calcolo del corretto CRC per (tutti?) I comandi rende il lavoro della carta.

Sono in contatto con il supporto di Transcend su questo. Se imparo qualcosa di utile Io ti conosco qui.

Si noti che ho usato altre 2 carte GB Transcend prima, ma sono state fatte a Taiwan, mentre quello nuovo è fatto in Corea (e sembra essere una scheda di Samsung (MMAGR02GUDCA)).

Altri suggerimenti

ho avuto quasi lo stesso problema. Quando si invia ACMD41, ho inviato CMD55 seguito da CMD41. La risposta di CMD55 era 0x01, indicando stato di riposo e l'esecuzione del processo di inizializzazione (questo è normale, credo). CMD41 avrebbe risposto con 0x05, indicando il comando illegale. Risulta che la particolare carta fa il controllo CRC per impostazione predefinita, anche in modalità SPI, e misreports errori CRC come comandi non validi (cioè, non segue le specifiche SD). Quando ho calcolare il corretto CRC, funziona benissimo. Ecco il codice di calcolo CRC7 ho usato, che ha funzionato bene per me:

https://github.com/hazelnusse/crc7

A meno che non avete preso cura di disattivare il controllo CRC, penso che sia probabilmente meglio assumere non è disabilitato e fare in modo di calcolare il corretto CRC per ogni fotogramma di comando. Da quello che posso dire, alcune schede disabilitare di default in modalità SPI e altri consentono, anche se la specifica SD afferma che dovrebbe essere disabilitato per impostazione predefinita in modalità SPI tranne CMD8.

Hai detto che hai utilizzato CRC 0 per il comando in errore. Suppongo che volevi dire che hai inviato l'intero ultimo byte come 0x00. Si noti che il CRC7 solo i primi 7 bit dell'ultimo byte - dovrebbe essere sempre end bit l'ultimo bit chiamato 1. Quindi, se si stesse inviando 0x00 come l'ultimo byte, con 0 come l'ultimo bit, il fallimento sarebbe comprensibile, e anche il codice di errore avrebbe senso. Se si invia 1 come l'ultimo pezzo, dovrebbe funzionare, vale a dire. usare qualcosa come 0x01 o 0xFF come l'ultimo byte.

E 'normale, è probabile che il pompa di carica interno utilizzato per fare tensione di cancellazione che richiede più tempo del solito per essere pronti ... si deve insistere sulla combo CMD55 + ACMD41 fino al termine di inizializzazione.

Il CMD58 potrebbe anche aiutare a controllare se si sta fornendo livelli di tensione corretti (a volte prese hanno problemi di contatto).

Invio CMD0 con chip select (0) da sola non inizializza la scheda in modo SPI. Questo imposta solo modo SPI. La scheda non è inizializzata fino al ritorno ACMD41 accettati. Poi CRC è disattivata per impostazione predefinita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top