La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

SD card en modo SPI Pablo Irrera Condines Ayudante de TP

Presentaciones similares


Presentación del tema: "SD card en modo SPI Pablo Irrera Condines Ayudante de TP"— Transcripción de la presentación:

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

2 Cortex – LPC1769 SPI 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 2

3 Cortex – LPC1769 Pines 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 3

4 Comunicación serie sincrónica
Cortex – LPC1769 Comunicación serie sincrónica 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 4

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 5

6 Conexión entre dispositivos
Cortex – LPC1769 Conexión entre dispositivos Un maestro y un esclavo: Un maestro y varios esclavos: Pablo Irrera Condines 6

7 Modos del reloj Cortex – 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 7

8 Formas de onda de cada modo
Cortex – LPC1769 Formas de onda de cada modo MODO 0 MODO 1 Pablo Irrera Condines

9 Formas de onda de cada modo
Cortex – LPC1769 Formas de onda de cada modo MODO 2 MODO 3 Pablo Irrera Condines

10 SPI en el LPC1769 Cortex – LPC1769
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 kit Cortex – LPC1769 Microcontrolador Conector micro SD
Conectado a MOSI1, MISO1, SCK1 y SSEL1 Hay que usar el SSP1! Conector SD Pablo Irrera Condines 11

12 Configuración de los pines:
Cortex – LPC1769 Configuración de los pines: 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 12

13 Power control: Cortex – LPC1769
PCONP= 1<10; para alimentar al periférico aunque ya amanece así Pablo Irrera Condines 13

14 Registros de configuración:
Cortex – LPC1769 Registros de configuración: Pablo Irrera Condines 14

15 Registros de configuración:
Cortex – LPC1769 Registros de configuración: ver despues… Pablo Irrera Condines 15

16 Registros de configuración:
Cortex – LPC1769 Registros de configuración: ojo! mejor escribir este registro al final solo para slave, don’t care Pablo Irrera Condines 16

17 Configurando la frecuencia del serial clock:
Cortex – LPC1769 Configurando la frecuencia del serial clock: 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 17

18 Selección de PCLK: Cortex – LPC1769 PCLK_SSP1: 00: CCLK/4 01: CCLK
CCLK: core clock Pablo Irrera Condines 18

19 Prescaler SSP Cortex – LPC1769 Valor par entre 2 y 254
Pablo Irrera Condines

20 Ejemplo: algunos valores útiles
Cortex – LPC1769 Ejemplo: algunos valores útiles Para 400KHz: PCLK = CCLK = 100MHz CPSDVSR = 250 SCR = 0 𝐟 𝐂𝐋𝐊 = 𝟏𝟎𝟎𝐌𝐇𝐳 𝟐𝟓𝟎× 𝟎+𝟏 =𝟒𝟎𝟎𝐊𝐇𝐳 Para 25MHz: PCLK = CCLK = 100MHz CPSDVSR = 4 SCR = 0 𝐟 𝐂𝐋𝐊 = 𝟏𝟎𝟎𝐌𝐇𝐳 𝟒× 𝟎+𝟏 =𝟐𝟓𝐌𝐇𝐳 Pablo Irrera Condines

21 Registro de datos Cortex – LPC1769
Es el mismo registro para enviar y recibir datos Pablo Irrera Condines 21

22 Cortex – LPC1769 Registro de estado Pablo Irrera Condines 22

23 Memorias Secure Digital
Cortex – LPC1769 Memorias 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 V Pablo Irrera Condines 23

24 Clasificación por capacidad
Cortex – LPC1769 Clasificació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 24

25 Modos de transferencia
Cortex – LPC1769 Modos 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 25

26 Pinout SD Cortex – LPC1769 Pin No. SD Mode SPI Mode Name Type
Description 1 CD/DAT I/O/PP Card Detect/Data Line [Bit 3] CS I Chip Select (active low) 2 CMD PP Command/Response DI/MOSI Data In/Master Out Slave In 3 Gnd1/Vss1 S Ground GND/VSS 4 Vdd Power (2.7V to 3.6V DC) VDD 5 CLK Clock SCLK 6 Gnd2/Vss2 7 DAT0 Data Line [Bit 0] DO/MISO O/PP Data Out/Master In Slave Out 8 DAT1 Data Line [Bit 1] RSV Reserved 9 DAT2 Data Line [Bit 2] Pablo Irrera Condines 26

27 Pinout microSD Cortex – LPC1769 Pin No. SD Mode SPI Mode Name Type
Description 1 DAT2 I/O/PP Data Line [Bit 2] RSV Reserved 2 CD/DAT3 Card Detect / Data Line [Bit 3] CS I Chip Select 3 CMD PP Command/Response DI/MOSI Data In/Master Out Slave In 4 Vdd S Power 5 CLK Clock SCLK 6 Gnd/Vss Ground 7 DAT0 Data Line [Bit 0] DO/MISO O/PP Data Out/Master In Slave Out 8 DAT1 Data Line [Bit 1] Pablo Irrera Condines 27

28 SD card en modo SPI Cortex – 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 28

29 Trama de comandos Cortex – LPC1769
Todas 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: Start Bit Transmission Bit Command Bit Pattern Argument CRC7 End Bit Bit position 47 46 [45:40] [39:8] [7:1] Width (Bits) 1 6 32 7 Value Pablo Irrera Condines

30 Set de comandos mas habituales (1)
Cortex – LPC1769 Set de comandos mas habituales (1) Command index Argument Response Data Abbreviation Description CMD0 None(0) R1 No GO_IDLE_STATE Software reset. CMD1 SEND_OP_COND Initiate initialization process. ACMD41(*1) Reserved bit[31] HCS[30] Reserved bits[29:0] APP_SEND_OP_COND For only SDC. Initiate initialization process. CMD8 Reserved bits[31:12] Supply Voltage[11:8] Check pattern[7:0] R7 SEND_IF_COND For only SDC V2. Check voltage range. CMD9 Yes SEND_CSD Read CSD register. CMD10 SEND_CID Read CID register. CMD12 R1b STOP_TRANSMISSION Stop to read data. CMD16 Block length[31:0] SET_BLOCKLEN Change R/W block size. Pablo Irrera Condines

31 SET_WR_BLOCK_ERASE_COUNT
Cortex – LPC1769 Set de comandos mas habituales (2) Command index Argument Response Data Abbreviation Description CMD17 Address[31:0] R1 Yes READ_SINGLE_BLOCK Read a block. CMD18 READ_MULTIPLE_BLOCK Read multiple blocks. CMD23 Number of blocks[15:0] 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] SET_WR_BLOCK_ERASE_COUNT For only SDC. Define number of blocks to pre-erase with next multi-block write command. CMD24 WRITE_BLOCK Write a block. Pablo Irrera Condines 31

32 Set de comandos mas habituales (3)
Cortex – LPC1769 Set 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) No APP_CMD Leading command of ACMD<n> command. CMD58 R3 READ_OCR Read OCR. *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. Pablo Irrera Condines 32

33 La demora entre comando y respuesta (NCR) es entre 0 y 8 clocks.
Cortex – LPC1769 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) 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 33

34 Tramas de respuesta (1):
Cortex – LPC1769 Tramas de respuesta (1): Respuesta R1 Bit Name Description 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 34

35 Tramas de respuesta (2):
Cortex – LPC1769 Tramas 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 R3 Respuesta 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 35

36 Tramas de respuesta (3):
Cortex – LPC1769 Tramas de respuesta (3): Respuesta R2 2 bytes de longitud. El primero es igual a R1. El segundo es: Bit Name Description 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 36

37 Tramas de respuesta (4):
Cortex – LPC1769 Tramas de respuesta (4): Respuesta R7 Respuesta 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 37

38 Cortex – LPC1769 Inicialización (1): Pablo Irrera Condines 38

39 Inicialización (2): Cortex – LPC1769
*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. Durante la inicialización el clock debe ser bajo (entre 100KHz y 400KHz) Luego se puede aumentar a 25MHz como máximo Diagrama original Otra versión un poco más completa de inicialización: Pablo Irrera Condines 39

40 Transferencia de datos:
Cortex – LPC1769 Transferencia 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 40

41 Lectura: Cortex – LPC1769 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 41

42 Lectura: Cortex – LPC1769 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 42

43 Lectura: Cortex – LPC1769 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 43

44 Escritura: Cortex – LPC1769 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 44

45 Escritura: Cortex – LPC1769 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 45

46 Tokens: Cortex – LPC1769 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 46

47 Tokens: Cortex – LPC1769 Start block tokens:
Para lectura de uno o múltiples bloques y escritura de un único bloque: Luego de recibido/enviado el token, se recibe/envía el bloque de datos, y a continuación, el CRC Para escritura de múltiples bloques: Luego de haber enviado el token, se envía el bloque de datos, y a continuación, el CRC Pablo Irrera Condines 47

48 Tokens: Cortex – LPC1769 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 48

49 Referencias Cortex – LPC1769
(Simplified Version of the Physical Layer Specification) Pablo Irrera Condines 49


Descargar ppt "SD card en modo SPI Pablo Irrera Condines Ayudante de TP"

Presentaciones similares


Anuncios Google