sd card en modo spi
Post on 23-Feb-2016
96 Views
Preview:
DESCRIPTION
TRANSCRIPT
Pablo Irrera Condines 1
SD card en modo SPI
Seminario de capacitación docente 2012
Pablo Irrera CondinesAyudante de TP
Cortex – LPC1769
Pablo Irrera Condines 2
SPICortex – LPC1769
Serial Peripheral Interface (SPI) es una interfaz estándar de comuniciones entre circuitos integrados a nivel de placa
Características:
• Comunicación serie sincrónica• Es full-duplex• De tipo maestro-esclavo• De tipo "Data exchange"• Se utilizan 4 pines para comunicar 2 dispositivos
Pablo Irrera Condines 3
PinesCortex – LPC1769
• MOSI: master output slave input. Por este pin se envían los datos del maestro al esclavo.
• MISO: master input salve output. Por este pin se envían los datos del esclavo al maestro.
• SCK: serial clock. Para los pulsos generados por el maestro.
• SSEL o CS: slave select o chip select. Para habilitar a cada dispositivo esclavo. En general es activo bajo.
Pablo Irrera Condines 4
Comunicación serie sincrónicaCortex – LPC1769
• Hay un pin de clock (SCK)• El movimiento de los datos se hace con los pulsos de clock• No hay transmisión de datos sin pulsos de clock• La velocidad de comunicación depende de la frecuencia del clock y
puede ser variable durante la comunicación
Tipo maestro-esclavo• El dispositivo maestro es quien genera el clock• Los esclavos reciben el clock del maestro y no pueden modificarlo• Los esclavos son habilitados por el maestro mediante su pin de
selección (SSEL)• Hay un pin de selección por cada esclavo conectado al bus
Pablo Irrera Condines 5
Tipo "data exchange"Cortex – LPC1769
Los pulsos de clock hacen que los datos entren y salgan simultáneamente del dispositivo.
Data exchange: ningún dispositivo puede actuar solo como transmisor o solo como receptor. Los dispositivos intercambian datos. Si el maestro quiere solo recibir datos, entonces debe escribir "basura" en la linea MOSI y generar pulsos de clock
El maestro controla el intercambio con los pulsos de clock
Pablo Irrera Condines 6
Conexión entre dispositivosCortex – LPC1769
Un maestro y un esclavo:
Un maestro y varios esclavos:
Pablo Irrera Condines 7
Modos del relojCortex – LPC1769
La polaridad y la fase del reloj son configurables mediante los registros de cada microcontrolador. En general se configuran mediante 2 bits:
• CPOL: clock polarity. Determina si en el estado idle, el reloj está en 0 (CPOL=0) o en 1 (CPOL=1)
• CPHA: clock phase. Determina con que flanco del reloj se latchean los datos. CPOL=0 determina que es en el primer flanco y CPOL=1 en el segundo flanco.
A partir de esto surgen 4 modos:• Modo 0: CPOL=0 CPHA =0• Modo 1: CPOL=0 CPHA =1• Modo 2: CPOL=1 CPHA =0• Modo 3: CPOL=1 CPHA =1
Pablo Irrera Condines 8
Cortex – LPC1769Formas de onda de cada modo
MODO 0
MODO 1
Pablo Irrera Condines 9
Cortex – LPC1769Formas de onda de cada modo
MODO 2
MODO 3
10
SPI en el LPC1769Cortex – LPC1769
Pablo Irrera Condines
El LPC1769 tiene 3 módulos pensados para comunicarse con dispositivos SPI: el módulo SPI propiamente dicho y los módulos SSP0 y SSP1.
SSP significa Synchronous Serial Port. Permite establecer comunicaciones serie sincrónicas en buses de tipo SPI, National Semiconductor Microwire y Texas Instruments synchronous serial frame.
El módulo SPI es heredado de versiones anteriores y se recomienda usar el SSP0 en su lugar. Solo uno puede ser usado al mismo tiempo.
Pablo Irrera Condines 11
En el kitCortex – LPC1769
Conectado a MOSI1, MISO1, SCK1 y SSEL1 Hay que usar el SSP1!
Conector SD
Conector micro SD
Microcontrolador
Pablo Irrera Condines 12
Configuración de los pines:Cortex – LPC1769
Por que GPIO?
Para controlarlo a gusto ya que la SD requiere que este en nivel bajo durante la transacción completa
Pablo Irrera Condines 13
Power control:Cortex – LPC1769
PCONP= 1<10; para alimentar al periférico aunque ya amanece así
Pablo Irrera Condines 14
Registros de configuración:Cortex – LPC1769
Pablo Irrera Condines 15
Registros de configuración:Cortex – LPC1769
ver despues…
Pablo Irrera Condines 16
Registros de configuración:Cortex – LPC1769
ojo! mejorescribireste registro al final
solo para slave, don’t care
Pablo Irrera Condines 17
Configurando la frecuencia del serial clock:Cortex – LPC1769
Necesario si se configura como master
𝐟𝐂𝐋𝐊=𝐏𝐂𝐋𝐊
𝐂𝐏𝐒𝐃𝐕𝐒𝐑× (𝐒𝐂𝐑+𝟏 )
PCLK: clock del periférico. Se configura con el registro PCLKSEL0.
CPSDVSR: prescaler. Se configura con el registro SSPnCPSR.
SCR: multiplicador de prescaler. En el registro SSPnCR0 visto antes.
Pablo Irrera Condines 18
Selección de PCLK:Cortex – LPC1769
PCLK_SSP1:00: CCLK/401: CCLK10: CCLK/211: CCLK/8
CCLK: core clock
Pablo Irrera Condines 19
Prescaler SSPCortex – LPC1769
Valor par entre 2 y 254
Pablo Irrera Condines 20
Cortex – LPC1769Ejemplo: algunos valores útiles
Para 400KHz:
PCLK = CCLK = 100MHzCPSDVSR = 250SCR = 0
𝐟𝐂𝐋𝐊=𝟏𝟎𝟎𝐌𝐇𝐳𝟐𝟓𝟎× (𝟎+𝟏 )
=𝟒𝟎𝟎𝐊𝐇𝐳
Para 25MHz:
PCLK = CCLK = 100MHzCPSDVSR = 4SCR = 0
𝐟𝐂𝐋𝐊=𝟏𝟎𝟎𝐌𝐇𝐳𝟒× (𝟎+𝟏 )
=𝟐𝟓𝐌𝐇𝐳
Pablo Irrera Condines 21
Registro de datosCortex – LPC1769
Es el mismo registro para enviar y recibir datos
Pablo Irrera Condines 22
Registro de estadoCortex – LPC1769
Pablo Irrera Condines 23
Cortex – LPC1769Memorias Secure Digital
Es un formato de tarjeta de memoria ampliamente utilizado en dispositivos portátiles como cámaras fotográficas, celulares, etc.
Internamente tiene celdas de memoria flash y un controlador que acepta comandos para leer y escribir la memoria.
Las especificaciones simplificadas son gratuitas pero las especificaciones completas no. Se debe ser miembro de la SD association para tener acceso a ellas.
La tensión de operación es 2.7-3.6V
Pablo Irrera Condines 24
Cortex – LPC1769Clasificación por capacidad Standard capacity SD (SDSC): hasta 2GB
High capacity SD (SDHC): de 4 a 32GB
Extended capacity SD (SDXC): hasta 2TB
Clasificación por formato físico Full SD
miniSD
microSD
Pablo Irrera Condines 25
Cortex – LPC1769Modos de transferencia• Modo nativo de 1 bit• Modo nativo de 4 bits• Modo SPI
Los modos nativos requieren de una interfaz host especial
Usan pines diferentes para enviar/recibir comandos y datos. El modo de 1 bit usa 1 pin de datos, el modo de 4 bits usa 4 pines de datos.
El modo SPI utiliza una interfaz SPI estándar en modo 0 y con un ancho de palabra de 8 bits
En aplicaciones de bajo costo con microcontroladores se suele usar el modo SPI
Pablo Irrera Condines 26
Cortex – LPC1769Pinout SD
Pin No.SD Mode SPI Mode
Name Type Description Name Type Description
1 CD/DAT I/O/PPCard
Detect/Data Line [Bit 3]
CS I Chip Select (active low)
2 CMD PP Command/Response DI/MOSI I
Data In/Master
Out Slave In
3 Gnd1/Vss1 S Ground GND/VSS S Ground
4 Vdd S Power (2.7V to 3.6V DC) VDD S Power (2.7V
to 3.6V DC)
5 CLK I Clock SCLK I Clock
6 Gnd2/Vss2 S Ground Gnd2/Vss2 S Ground
7 DAT0 I/O/PP Data Line [Bit 0] DO/MISO O/PP
Data Out/Master In Slave Out
8 DAT1 I/O/PP Data Line [Bit 1] RSV Reserved
9 DAT2 I/O/PP Data Line [Bit 2] RSV Reserved
Pablo Irrera Condines 27
Cortex – LPC1769Pinout microSD
Pin No.SD Mode SPI Mode
Name Type Description Name Type Description
1 DAT2 I/O/PP Data Line [Bit 2] RSV Reserved
2 CD/DAT3 I/O/PPCard Detect /
Data Line [Bit 3]
CS I Chip Select
3 CMD PP Command/Response DI/MOSI I
Data In/Master
Out Slave In
4 Vdd S Power Vdd S Power
5 CLK I Clock SCLK I Clock
6 Gnd/Vss S Ground Gnd/Vss S Ground
7 DAT0 I/O/PP Data Line [Bit 0] DO/MISO O/PP
Data Out/Master In Slave Out
8 DAT1 I/O/PP Data Line [Bit 1] RSV Reserved
Pablo Irrera Condines 28
SD card en modo SPICortex – LPC1769
Es un modo alternativo con menos funcionalidad que el modo nativo pero más simple para implementar.
El set de comandos es reducido pero permite realizar las funciones básicas de leer y escribir, suficientes para almacenar datos o incluso trabajar con un sistema de archivos FAT/FAT32.
En modo SPI, la SD funciona como slave en modo 0. La frecuencia máxima de clock es de 25MHz, aunque durante la inicialización debe estar entre 100KHz y 400KHz. Las memorias MMC también son soportadas.
Pablo Irrera Condines 29
Trama de comandosTodas las tramas que se envían y reciben de la memoria SD están compuestas por una determinada cantidad de bytes. La comunicación se hace a través de comandos. La trama para enviar un comando está formada por 6 bytes:
Cortex – LPC1769
Start Bit Transmission Bit
Command Bit Pattern Argument CRC7 End Bit
Bit position 47 46 [45:40] [39:8] [7:1] 0
Width (Bits) 1 1 6 32 7 1
Value 0 1 1
Pablo Irrera Condines 30
Set de comandos mas habituales (1)Cortex – LPC1769
Command index Argument Response Data Abbreviation Description
CMD0 None(0) R1 No GO_IDLE_STATE Software reset.
CMD1 None(0) R1 No SEND_OP_CONDInitiate
initialization process.
ACMD41(*1)Reserved bit[31]
HCS[30]Reserved bits[29:0] R1 No APP_SEND_OP_COND
For only SDC. Initiate
initialization process.
CMD8Reserved bits[31:12]Supply Voltage[11:8]Check pattern[7:0]
R7 No SEND_IF_CONDFor only SDC V2.
Check voltage range.
CMD9 None(0) R1 Yes SEND_CSD Read CSD register.
CMD10 None(0) R1 Yes SEND_CID Read CID register.
CMD12 None(0) R1b No STOP_TRANSMISSION Stop to read data.
CMD16 Block length[31:0] R1 No SET_BLOCKLEN Change R/W block size.
Pablo Irrera Condines 31
Set de comandos mas habituales (2)Cortex – LPC1769
Command index Argument Response Data Abbreviation Description
CMD17 Address[31:0] R1 Yes READ_SINGLE_BLOCK Read a block.
CMD18 Address[31:0] R1 Yes READ_MULTIPLE_BLOCK Read multiple blocks.
CMD23 Number of blocks[15:0] R1 No SET_BLOCK_COUNT
For only MMC and SDSC. Define
number of blocks to transfer with next multi-block
read/write command.
ACMD23(*1) Number of blocks[22:0] R1 No SET_WR_BLOCK_ERASE_COUNT
For only SDC. Define number of
blocks to pre-erase with next
multi-block write command.
CMD24 Address[31:0] R1 Yes WRITE_BLOCK Write a block.
Pablo Irrera Condines 32
*1: Los comandos ACMD<n> son comandos "application specific". Para avisar a la memoria que el siguiente comando es de tipo ACMD primero se debe enviar el comando CMD55.
Cortex – LPC1769Set de comandos mas habituales (3)Command index Argument Response Data Abbreviation Description
CMD25 Address[31:0] R1 Yes WRITE_MULTIPLE_BLOCK Write multiple blocks.
CMD55(*1) None(0) R1 No APP_CMDLeading command
of ACMD<n> command.
CMD58 None(0) R3 No READ_OCR Read OCR.
Pablo Irrera Condines 33
Una transacción completa está formada por una trama de comando enviada por el host, una trama de respuesta enviada por la memoria, y de acuerdo al comando puede haber tramas de datos en ambas direcciones.
Antes de iniciar este proceso y mientras dure, se debe seleccionar la memoria con SSEL en estado bajo (assert sd card)
Cortex – LPC1769
El CRC es opcional en modo SPI pero el campo CRC de la trama es obligatorio. Excepto para los comandos CMD0 y CMD8 durante la inicialización.
La demora entre comando y respuesta (NCR) es entre 0 y 8 clocks.
Pablo Irrera Condines 34
Cortex – LPC1769Tramas de respuesta (1): Respuesta R1
Bit Name Description
0 In idle state The card is in idle state and running the initializing process.
1 Erase reset An erase sequence was cleared before executing because an out of erase sequence command was received.
2 Illegal command An illegal command code was detected.3 Communication CRC error The CRC check of the last command failed.4 Erase sequence error An error in the sequence of erase commands occurred.
5 Address error A misaligned address that did not match the block length was used in the command.
6 Parameter error The command’s argument (e.g. address, block length) was outside the allowed range for this card.
7 MSB Always Zero
La mayoria de los comandos reciben esta respuesta
Pablo Irrera Condines 35
Cortex – LPC1769Tramas de respuesta (2): Respuesta R1b
Igual a R1, pero seguido por el busy flag. Este flag implica recibir uno o mas bytes en 0 indicando que la memoria está ocupada. Cuando el byte recibido es distinto de 0 (se recibe 0xFF) significa que está lista para otro comando.
Respuesta R3Respuesta al comando READ_OCR(CMD58). Tiene5 bytes de longitud. El primero es igual a R1. El resto es el contenido del registro OCR
Pablo Irrera Condines 36
Cortex – LPC1769Tramas de respuesta (3):
Respuesta R22 bytes de longitud. El primero es igual a R1. El segundo es:
Bit Name Description
0 Card is locked Set when the card is locked by the user. Reset when it is unlocked.
1 Write protect erase skip | lock/unlock command failed
This status bit has two functions overloaded. It is set when the host attempts to erase a write-protected sector or makes a sequence or password errors during card lock/unlock operation.
2 Error A general or an unknown error occurred during the operation.
3 CC error Internal card controller error.
4 Card ECC failed Card internal ECC was applied but failed to correct the data.
5 Write protect violation The command tried to write a write-protected block.
6 Erase param An invalid selection for erase, sectors or groups.
7 out of range | csd overwrite
Pablo Irrera Condines 37
Cortex – LPC1769Tramas de respuesta (4):
Respuesta R7Respuesta al comando SEND_IF_CON (CMD8). Tiene 5 bytes de longitud. El primero es igual a R1. El resto son la tensión de operación y el eco del " check pattern" enviado por CMD8.
Pablo Irrera Condines 38
Cortex – LPC1769Inicialización (1):
Pablo Irrera Condines 39
Cortex – LPC1769Inicialización (2):
*1: El host debe mantener MOSI y SSEL en estado ALTO y enviar al menos 74 pulsos de clock. Lo habitual es enviar 8 bytes 0xFF (80 pulsos de clock)
*2: Deben enviarse con el CRC correcto. Para CMD0(0) el CRC7 es 0x95 y para CMD8(0x1AA) el CRC es 0x87.
Diagrama originalhttp://elm-chan.org/docs/mmc/sdinit.png
Otra versión un poco más completa de inicialización:http://www.chlazza.net/imgs/SDcardInitFlowchart_3.01.png
Durante la inicialización el clock debe ser bajo (entre 100KHz y 400KHz)
Luego se puede aumentar a 25MHz como máximo
Pablo Irrera Condines 40
Cortex – LPC1769Transferencia de datos: La mínima unidad de información es el byte
La mínima unidad de transferencia es el bloque
El tamaño del bloque en las SDSC puede ser configurable con el comando CMD16. En las SDHC y SDXC es de 512 bytes
Hay comandos para leer y escribir un único bloque y para leer y escribir múltiples bloques. Para más de 1 bloque se recomienda usar estos últimos ya que la memoria pasa menos tiempo en estado "busy"
En SDSC la dirección de donde se lee o escribe se especifica en bytes. En SDHC y SDXC se especifica en números de bloque
Los comandos de lectura y escritura de datos son procedidos por bloques de datos (del host a la SD o de la SD al host ya sea escritura o lectura). Cada bloque de datos es procedido por 2 bytes de CRC
Cada bloque de datos está precedido por un "token"
Pablo Irrera Condines 41
Cortex – LPC1769Lectura: De un único bloque
Se utiliza el comando READ_SINGLE_BLOCK (CMD17) y el argumento es la dirección del bloque.
Se recibe la respuesta R1 y a continuación el bloque de datos precedido por un start block token.
Pablo Irrera Condines 42
Cortex – LPC1769Lectura: De múltiples bloques
Se utiliza el comando READ_MULTIPLE_BLOCK (CMD18) y el argumento es la dirección del bloque.
Se recibe la respuesta R1 y a continuación los bloques de datos precedidos por un start block token.
Para detener la transmisión, se debe mandar el comando STOP_TRANSMISSION (CMD12). Por haberse interrumpido se debe descartar el siguiente byte antes de leer la respuesta R1b
Pablo Irrera Condines 43
Cortex – LPC1769Lectura: Error de lectura
En caso de error de lectura, luego de la respuesta al comando CMD17 o CMD18 se recibe un data error token.
Pablo Irrera Condines 44
Cortex – LPC1769Escritura: De un único bloque
Se utiliza el comando WRITE_BLOCK (CMD24) y el argumento es la dirección del bloque.
Se recibe la respuesta R1 y a continuación se debe enviar el bloque de datos precedido por un start block token
Se recibe un data response token y la memoria envía busy flags hasta que termina su proceso interno de escritura
Pablo Irrera Condines 45
Cortex – LPC1769Escritura: De múltiples bloques
Se utiliza el comando WRITE_MULTIPLE_BLOCK (CMD25) y el argumento es la dirección del bloque.
Se recibe la respuesta R1 y a continuación se debe enviar el primer bloque de datos precedido por un start block token
Se recibe un data response token y la memoria envía busy flags hasta que termina su proceso interno de escritura.
Se sigue repitiendo el procedimiento por cada bloque que se desee escribir. Para avisar que se terminó la transmisión, se debe enviar un stop transmission token. Luego la memoria queda en estado busy.
Pablo Irrera Condines 46
Cortex – LPC1769Tokens: Data response token
Status puede ser:• 010: Datos aceptados• 101: Datos rechazados por error de CRC• 110: Datos rechazados por error de escritura
En caso de error durante un proceso de escritura de múltiples bloques, el host debería enviar el comando CMD12 para detener la transmisión.
Pablo Irrera Condines 47
Cortex – LPC1769Tokens: Start block tokens:
• Para lectura de uno o múltiples bloques y escritura de un único bloque:
• Para escritura de múltiples bloques:
Luego de recibido/enviado el token, se recibe/envía el bloque de datos, y a continuación, el CRC
Luego de haber enviado el token, se envía el bloque de datos, y a continuación, el CRC
Pablo Irrera Condines 48
Cortex – LPC1769Tokens: Stop transmission token:
Se envía durante un proceso de escritura de múltiples bloques para indicar que se termina la transmisión.
Pablo Irrera Condines 49
Cortex – LPC1769Referencias
http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf
http://elm-chan.org/docs/mmc/mmc_e.html
http://www.chlazza.net/sdcardinfo.html
https://www.sdcard.org/downloads/pls/(Simplified Version of the Physical Layer Specification)
top related