Sólo quiero aclarar que con todos los que he agotado todas mis opciones de búsqueda en busca de una respuesta, y todavía no puede encontrar la respuesta a mi problema.
Estoy tratando de interfaz de una ranura de tarjeta micro sd con mi pic32 proyecto por poco golpea un spi. No he tenido ningún problema al inicializar, y puedo leer la OCR y el CSD registrar bien, pero cuando voy a enviar la lectura sector de comandos, tengo 512 Bytes de 0, no importa qué.
He probado con varias tarjetas con el mismo resultado con todos. Estoy usando SanDisk de 2 gb de tarjeta MicroSD estándar. Son formateado como FAT(FAT16) por Windows y el uso de la SDFormatter proporcionada por sdcard.org. He usado el Disco Investigador para confirmar que el MBR contiene los datos correctos.
Aquí está la secuencia estoy utilizando para inicializar:
//Low speed
Send 10 Bytes of data to 'wake up' card w/ CS High
Send CMD0 to reset until response is idle (0x01)
Send CMD8 w/ arg 0x1AA and read correct response to verify SDC V2
Send ACMD41 w/ HCS flag to initialize until no longer idle (0x00)
//High speed
Send CMD58 to read OCR and check CCS flag in response
Send CMD16 to set block length to 512 Bytes
//At this point I should be able to read the MBR but get nothing
Send CMD17 /w arg 0x00 to read very first sector
Cuando tengo que enviar el comando de lectura, he de hacer una correcta R1 respuesta 0x00, a continuación, un par de transferencias de Byte más tarde, recibí 0xFE que indica el inicio de datos, pero los datos de la línea de baja de 512 Bytes, y nada de lo que se lee.
He intentado escribir en un sector con datos ficticios, obteniendo los datos de 'aceptado' respuesta, pero cuando traté de leer de nuevo, tengo todos los ceros de nuevo. Me pregunto si estoy haciendo algo mal con mi inicialización.
Estoy seguro de que no es un problema con mi programa de envío de la orden equivocada, como lo tengo todo conectado a un ámbito, y todo parece estar correcto. Aquí están las capturas de pantalla:
Aquí está la lectura de la secuencia estoy enviando
E inmediatamente después, la respuesta que recibo
Alguna idea de por qué esto no funciona se agradece. He pasado mucho más tiempo en esto que me gustaría, y como muchas cosas, es probable que sea un simple problema de que no estoy viendo. Estoy esperando extra pares de ojos que notara mi problema. Gracias de antemano, y voy a actualizar con toda la información necesaria para ayudar a resolver este problema.
EDITAR más cosas que he probado:
He instalado el CS baja para toda la lectura de la secuencia, y ningún cambio en la respuesta.
He cambiado el fijo de la CRC para el real CRC necesario por la lectura de la secuencia, no hay cambio en la respuesta.
Mediante el uso de Disk Investigator para leer la tarjeta en el ordenador, puedo ver el resultado esperado a partir de la lectura del primer sector, como se muestra:
0000 EB 00 90 20 20 20 20 20 . . . 0008 20 20 20 00 02 40 01 00 . . @ . . 0010 02 00 02 00 00 F8 CE 00 . . . . . . . . 0018 3F 00 40 00 87 00 00 00 ? . @ . . . . . 0020 79 EF 3A 00 80 00 29 10 y . : . . . ) . 0028 41 2E 17 4E 4F 20 4E 41 . . N O N A 0030 4D 45 20 20 20 20 46 41 M E F A 0038 54 31 36 20 20 20 00 00 T 1 6 . . 0040 00 00 00 00 00 00 00 00 . . . . . . . . \begin{align*} ds^2=dr^2+\psi(r,\theta)^2d\theta^2, \endTodos Los Ceros ------------- --------------- 01F0 00 00 00 00 00 00 00 00 . . . . . . . . 01F8 00 00 00 00 00 00 55 AA . . . . . . U .
Lista de Miso y Mosi bloques durante init (formato s-ámbito de aplicación de la imagen):
// se despierta con 80 clk pulsos w/ cs de alta no se muestra aquí // Primero CMD0 enviar: 00 00 00 00 00 00 3F 01 40 00 00 00 00 95 FF FF //Segundo CMD0 enviar: FF FF FF FF FF FF FF C1 7F 40 00 00 00 00 95 FF FF FF //Tercera CMD0 enviar: FF FF FF FF FF FF FF 01 FF 40 00 00 00 00 95 FF FF FF //CMD8 w/ 0x1AA arg FF FF FF FF FF FF FF 01 00 00 01 AA FF 48 00 00 01 AA 87 FF FF FF FF FF FF FF //ACMD41 w/ HCS bandera 6 veces antes de 00-vv FF FF FF FF FF FF FF 01 FF FF FF FF FF FF FF FF 01 FF 77 00 00 00 00 95 FF FF FF 69 40 00 00 00 95 FF FF FF //CMD58 leer OCR FF FF FF FF FF FF FF 00 80 FF 80 00 FF 7A 00 00 00 00 95 FF FF FF FF FF FF FF //CMD16 para establecer la longitud del bloque de FF FF FF FF FF FF FF 00 FF 50 00 00 02 00 95 FF FF FF Después de esto es la función de lectura se muestra arriba