1. Funcionamiento de la tarjeta SD. Versión 0.0.1
GEDA 2005 2005
Funcionamiento de la tarjeta SD.
Introducción.
Las tarjetas SD (SecureDigital) son tarjetas de memoria Flash
(NAND) con controlador inteligente incorporado. Derivan de las
tarjetas MMC (MultiMediaCard). Son las tarjetas de memoria más
utilizadas en el mercado. Las tarjetas SD, mini-SD y micro-SD son
eléctricamente compatibles entre sí, pero de distintos tamaños.
Hay dos tipos de tarjetas: la SD (original) y SDHC (SD High
Capacity). La SD original puede almacenar hasta 4GB de memoria; la
SDHC, hasta 32GB.
ESTE DOCUMENTO NO REEMPLAZA LA LECTURA DE LOS
MANUALES Y ESPECIFICACIONES PROVISTAS. SOLAMENTE ES
UNA GUÍA INTRODUCTORIA PARA SIMPLIFICAR EL PRIMER
“APPROACH” AL USO DE LAS TARJETAS SD.
Comunicación con el Host.
El Host (microprocesador) se comunica con la tarjeta mediante una
interfaz eléctrica de 9 pines:
Las tarjetas soportan 2 modos de comunicación: Modo SD y Modo
SPI. El Modo SD es el modo nativo, y permite mayor velocidad de
transferencia que el modo SPI. Las ventajas de este último modo son
la simplicidad y la disponibilidad del periférico de comunicaciones SPI
en la mayoría de los microcontroladores. Vamos a ver sólo el modo
SPI.
1
2. Funcionamiento de la tarjeta SD. Versión 0.0.1
GEDA 2005 2005
Modo SPI.
Pines.
La interfaz consta de 4 pines:
Pin Nombre Funcionalidad
1 nCS Chip Select (activo bajo)
2 MOSI Entrada de datos
3 GND Power
4 VCC Power
5 SCK Clock
6 GND Power
7 MISO Salida de datos
8y9 RSV Reservados, conectar pullups
Las tarjetas se alimentan en genera con una tensión entre 2.7V y
3.6V. Las entradas y salidas son LVCMOS.
Comunicación.
La transferencia (full duplex) se realiza de a bytes, alineados con la
señal de reloj, MSb primero. La figura muestra el diagrama de
tiempos, visto desde el host (microcontrolador).
Según esta figura, la tarjeta y el host muestrearán las líneas de datos
en el flanco ascendente del clock.
2
3. Funcionamiento de la tarjeta SD. Versión 0.0.1
GEDA 2005 2005
Velocidad.
En general, la tarjeta SD acepta velocidades de reloj desde 0Hz hasta
25MHz. Sin embargo, durante la inicialización, la línea CLK debe
estar detenida o entre 100KHz y 400KHz.
Protocolo.
Como ya se ha dicho, la transferencia de datos se hace de a bytes. La
comunicación con la tarjeta se basa en comandos de 6 bytes, y
respuestas asociadas.
La estructura de un comando se muestra en la figura.
• BYTE 1 (MSB)
o Bit 7 (MSb). Siempre 0.
o Bit 6. Siempre 1.
o Bit 5 a bit 0 (LSb). Comando.
• BYTE 2 a 5
o Bit 31 (MSb) a bit 0 (LSb). Argumento, big
endian.
• BYTE 6 (LSB)
o Bit 7 (MSb) a bit 1. CRC del comando.
o Bit 0 (LSb). Siempre 1.
Luego de la recepción de un comando, la tarjeta debe responder.
Hay varios tipos de respuesta:
R1 (respuesta a la mayoría de los comandos).
R1b (respuesta idéntica a R1 + algunos bytes de “busy”).
R2 (respuesta al comando SEND_STATUS).
R3 (respuesta a la lectura del registro OCR – se verá más
adelante).
Data response (respuesta a la lectura de un sector).
Write response (respuesta a la escritura de un sector).
3
4. Funcionamiento de la tarjeta SD. Versión 0.0.1
GEDA 2005 2005
Respuesta R1.
Respuesta a la mayoría de los comandos. Consta de 1 byte:
Un ‘1’ indica que ha habido un error.
Respuesta de lectura de datos.
Dependiendo del éxito de la operación de lectura, la tarjeta
responderá de dos formas diferentes:
1. Lectura exitosa.
Bloque de n=4 a n=515 bytes de longitud:
• BYTE 1 (MSB). Siempre 0xFE.
• BYTES 2 a n-2. Datos.
• BYTE n-1 y n. CRC de los datos.
2. Error en el proceso.
Un solo byte, con valor dependiente del error:
4
5. Funcionamiento de la tarjeta SD. Versión 0.0.1
GEDA 2005 2005
Respuesta de escritura de datos.
Luego de enviar un bloque para ser escrito en la tarjeta, ésta
devuelve una respuesta, indicando el estado de la operación de
escritura:
• Status = ‘010’ Data accepted
• Status = ‘101’ Data rejected due to CRC error
• Status = ‘110’ Data rejected due to a write
error
Comandos importantes.
El controlador de la tarjeta acepta varios comandos. Debajo se
exponen algunos importantes. Se obvian comandos de
lectura/escritura multibloque, etc.
Command
Argument Response Abbreviation Description
Index
CMD0 None R1 GO_IDLE_STATE Software reset.
CMD1 None R1 SEND_OP_COND Initiate initialization process.
For only SDC. Initiate
ACMD41 None R1 APP_SEND_OP_COND
initialization process.
CMD9 None R1 SEND_CSD Read CSD register.
CMD17 Address[31:0] R1 + DATA READ_SINGLE_BLOCK Read a block.
CMD24 Address[31:0] R1 WRITE_BLOCK Write a block.
Leading command of ACMD<n>
CMD55 None R1 APP_CMD
command.
CMD58 None R3 READ_OCR Read OCR.
Registros.
Para que el Host pueda obtener información sobre la tarjeta (tensión
de funcionamiento, capacidad de almacenamiento, velocidad máxima
de transferencia, etc.), existen dos registros principales que se
pueden leer:
5
6. Funcionamiento de la tarjeta SD. Versión 0.0.1
GEDA 2005 2005
OCR: Operating Conditions Register.
Ejemplo:
6
7. Funcionamiento de la tarjeta SD. Versión 0.0.1
GEDA 2005 2005
CSD: Card Specific Data.
Proporciona información sobre la tarjeta, como:
o Tamaño del bloque de escritura/lectura
o Capacidad de la tarjeta
o Velocidades de lectura/escritura
o Consumo de corriente
o etc.
Inicialización.
Luego de aplicar tensión a la tarjeta, el controlador interno entra en
modo SD (no modo SPI). Para pasar a modo SPI, hay que seguir los
siguientes pasos para inicializarla1:
Power Up: Luego de que la alimentación llegue a 2V, esperar 1ms y
aplicar (como mínimo) 74 pulsos de SCK, con MOSI=nCS=1. Luego de
esto, la tarjeta responderá a un set reducido de comandos (CMD0,
ACMD41, etc).
Soft reset: Enviar CMD0 con nCS=0. La tarjeta detecta que nCS=0
mientras se recibe CMD0, y entra en modo SPI. Como la tarjeta tiene el
chequeo de CRC (byte6) activado por default, hay que enviar CMD0 con
el CRC apropiado. Cuando se pasa al modo SPI, se desactiva
automáticamente el chequeo de CRC. Si la tarjeta recibe correctamente
el CMD0, responderá R1 con el bit Idle en 1 (R1 = “Idle” = 0x01). En
estado Idle, la tarjeta acepta CMD0, CMD1, ACMD41 y CMD58.
Inicialización: Si se desea saber el rango válido de alimentación de la
tarjeta, enviar CMD58, y leer R3. Todas las tarjetas deben aceptar VDD
entre 2.7V y 3.6V, así que muchas veces no es necesario este chequeo.
Enviar ahora ACMD41 (CMD55+CMD1). Como las MMC no aceptan
CMD55 (devolverá R1 = “Illegal Command” = 0x04), se podrá detectar
el tipo de tarjeta conectada (MMC/SD). Para ver las diferencias MMC/SD,
consultar la documentación provista. Como respuesta a ACMD41, la SD
devuelve R1=“Idle” hasta que termine la inicialización (R1 = 0x00). El
host deberá pollear a la tarjeta con ACMD41 hasta que R1 = 0x00.
Cuando finalice la inicialización, la velocidad de clock de la interfaz podrá
ser aumentada al máximo (frecuentemente 25MHz; consultar los bits
apropiados de CSD para más detalles).
Si la tarjeta es MMC, no reconocerá el comando CMD55. La inicialización
deberá continuar con CMD1 en lugar de ACMD41. Todo lo demás es
(casi) idéntico. La velocidad de transferencia máxima es, en gral. 20MHz.
Si la tarjeta es SDHC, hay que continuar con la secuencia de
inicialización. No vamos a ver este caso.
1
Se presupone que el host está configurado con la polaridad, fase y velocidad correcta de CLK (100KHz
a 400KHz para la inicialización). En HC12, CPHA=CPOL=0.
7
8. Funcionamiento de la tarjeta SD. Versión 0.0.1
GEDA 2005 2005
Ya está!. El host debería enviar CMD9 para obtener información
específica de la tarjeta, leyendo CSD: velocidad máxima de
transferencia, capacidad, etc.
8
9. Funcionamiento de la tarjeta SD. Versión 0.0.1
GEDA 2005 2005
Lectura/escritura de 1 bloque:
Lectura
Escritura
9