sd card en modo spi

49
Pablo Irrera Condines 1 SD card en modo SPI Seminario de capacitación docente 2012 Pablo Irrera Condines Ayudante de TP Cortex – LPC1769

Upload: skyler

Post on 23-Feb-2016

93 views

Category:

Documents


1 download

DESCRIPTION

Cortex – LPC1769. Seminario de capacitación docente 2012. SD card en modo SPI. Pablo Irrera Condines Ayudante de TP. Cortex – LPC1769. SPI. Serial Peripheral Interface (SPI) es una interfaz estándar de comuniciones entre circuitos integrados a nivel de placa. Características: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: SD  card  en modo SPI

Pablo Irrera Condines 1

SD card en modo SPI

Seminario de capacitación docente 2012

Pablo Irrera CondinesAyudante de TP

Cortex – LPC1769

Page 2: SD  card  en modo SPI

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

Page 3: SD  card  en modo SPI

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.

Page 4: SD  card  en modo SPI

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

Page 5: SD  card  en modo SPI

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

Page 6: SD  card  en modo SPI

Pablo Irrera Condines 6

Conexión entre dispositivosCortex – LPC1769

Un maestro y un esclavo:

Un maestro y varios esclavos:

Page 7: SD  card  en modo SPI

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

Page 8: SD  card  en modo SPI

Pablo Irrera Condines 8

Cortex – LPC1769Formas de onda de cada modo

MODO 0

MODO 1

Page 9: SD  card  en modo SPI

Pablo Irrera Condines 9

Cortex – LPC1769Formas de onda de cada modo

MODO 2

MODO 3

Page 10: SD  card  en modo SPI

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.

Page 11: SD  card  en modo SPI

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

Page 12: SD  card  en modo SPI

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

Page 13: SD  card  en modo SPI

Pablo Irrera Condines 13

Power control:Cortex – LPC1769

PCONP= 1<10; para alimentar al periférico aunque ya amanece así

Page 14: SD  card  en modo SPI

Pablo Irrera Condines 14

Registros de configuración:Cortex – LPC1769

Page 15: SD  card  en modo SPI

Pablo Irrera Condines 15

Registros de configuración:Cortex – LPC1769

ver despues…

Page 16: SD  card  en modo SPI

Pablo Irrera Condines 16

Registros de configuración:Cortex – LPC1769

ojo! mejorescribireste registro al final

solo para slave, don’t care

Page 17: SD  card  en modo SPI

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.

Page 18: SD  card  en modo SPI

Pablo Irrera Condines 18

Selección de PCLK:Cortex – LPC1769

PCLK_SSP1:00: CCLK/401: CCLK10: CCLK/211: CCLK/8

CCLK: core clock

Page 19: SD  card  en modo SPI

Pablo Irrera Condines 19

Prescaler SSPCortex – LPC1769

Valor par entre 2 y 254

Page 20: SD  card  en modo SPI

Pablo Irrera Condines 20

Cortex – LPC1769Ejemplo: algunos valores útiles

Para 400KHz:

PCLK = CCLK = 100MHzCPSDVSR = 250SCR = 0

𝐟𝐂𝐋𝐊=𝟏𝟎𝟎𝐌𝐇𝐳𝟐𝟓𝟎× (𝟎+𝟏 )

=𝟒𝟎𝟎𝐊𝐇𝐳

Para 25MHz:

PCLK = CCLK = 100MHzCPSDVSR = 4SCR = 0

𝐟𝐂𝐋𝐊=𝟏𝟎𝟎𝐌𝐇𝐳𝟒× (𝟎+𝟏 )

=𝟐𝟓𝐌𝐇𝐳

Page 21: SD  card  en modo SPI

Pablo Irrera Condines 21

Registro de datosCortex – LPC1769

Es el mismo registro para enviar y recibir datos

Page 22: SD  card  en modo SPI

Pablo Irrera Condines 22

Registro de estadoCortex – LPC1769

Page 23: SD  card  en modo SPI

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

Page 24: SD  card  en modo SPI

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

Page 25: SD  card  en modo SPI

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

Page 26: SD  card  en 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

Page 27: SD  card  en modo SPI

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

Page 28: SD  card  en modo SPI

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.

Page 29: SD  card  en modo SPI

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

Page 30: SD  card  en modo SPI

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.

Page 31: SD  card  en modo SPI

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.

Page 32: SD  card  en modo SPI

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.

Page 33: SD  card  en modo SPI

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.

Page 34: SD  card  en modo SPI

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

Page 35: SD  card  en modo SPI

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

Page 36: SD  card  en modo SPI

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

Page 37: SD  card  en modo SPI

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.

Page 38: SD  card  en modo SPI

Pablo Irrera Condines 38

Cortex – LPC1769Inicialización (1):

Page 39: SD  card  en modo SPI

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

Page 40: SD  card  en modo SPI

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"

Page 41: SD  card  en modo SPI

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.

Page 42: SD  card  en modo SPI

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

Page 43: SD  card  en modo SPI

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.

Page 44: SD  card  en modo SPI

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

Page 45: SD  card  en modo SPI

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.

Page 46: SD  card  en modo SPI

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.

Page 47: SD  card  en modo SPI

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

Page 48: SD  card  en modo SPI

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.

Page 49: SD  card  en modo SPI

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)