1 / 49

SD card en modo SPI

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:

skyler
Download Presentation

SD card en modo SPI

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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: slaveselect o chip select. Para habilitar a cada dispositivo esclavo. En general es activo bajo. Pablo Irrera Condines 3

  4. 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. Cortex – LPC1769 Tipo "data exchange" • 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. Cortex – LPC1769 Conexión entre dispositivos Un maestro y un esclavo: Un maestro y varios esclavos: Pablo Irrera Condines 6

  7. Cortex – LPC1769 Modos del reloj • La polaridad y la fase del reloj son configurables mediante los registros de cada microcontrolador. En general se configuran mediante 2 bits: • CPOL: clockpolarity. Determina si en el estado idle, el reloj está en 0 (CPOL=0) o en 1 (CPOL=1) • CPHA: clockphase. 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. Cortex – LPC1769 Formas de onda de cada modo MODO 0 MODO 1 Pablo Irrera Condines

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

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

  12. 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. Cortex – LPC1769 • Power control: PCONP= 1<10; para alimentar al periférico aunque ya amanece así Pablo Irrera Condines 13

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

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

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

  17. 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. Cortex – LPC1769 • Selección de PCLK: PCLK_SSP1: 00: CCLK/4 01: CCLK 10: CCLK/2 11: CCLK/8 CCLK: coreclock Pablo Irrera Condines 18

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

  20. 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. Cortex – LPC1769 • Registro de datos Es el mismo registro para enviar y recibir datos Pablo Irrera Condines 21

  22. Cortex – LPC1769 • Registro de estado Pablo Irrera Condines 22

  23. 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 2.7-3.6V Pablo Irrera Condines 23

  24. 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. 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. Cortex – LPC1769 • Pinout SD Pablo Irrera Condines 26

  27. Cortex – LPC1769 • PinoutmicroSD Pablo Irrera Condines 27

  28. Cortex – LPC1769 • SD card en modo SPI 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. Cortex – LPC1769 • Trama de comandos 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: Pablo Irrera Condines

  30. Cortex – LPC1769 • Set de comandos mas habituales (1) Pablo Irrera Condines

  31. Cortex – LPC1769 • Set de comandos mas habituales (2) Pablo Irrera Condines 31

  32. Cortex – LPC1769 • Set de comandos mas habituales (3) *1: Los comandos ACMD<n> son comandos "applicationspecific". 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. 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 (assertsdcard) • 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. Cortex – LPC1769 • Tramas de respuesta (1): • Respuesta R1 La mayoria de los comandos reciben esta respuesta Pablo Irrera Condines 34

  35. Cortex – LPC1769 • Tramas de respuesta (2): • Respuesta R1b Igual a R1, pero seguido por el busyflag. Este flagimplica 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. Cortex – LPC1769 • Tramas de respuesta(3): • Respuesta R2 2 bytes de longitud. El primero es igual a R1. El segundo es: Pablo Irrera Condines 36

  37. 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 " checkpattern" enviado por CMD8. Pablo Irrera Condines 37

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

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

  40. 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. Cortex – LPC1769 • Lectura: • 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. Cortex – LPC1769 • Lectura: • 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. Cortex – LPC1769 • Lectura: • 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. Cortex – LPC1769 • Escritura: • 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 tokeny la memoria envía busyflags hasta que termina su proceso interno de escritura Pablo Irrera Condines 44

  45. Cortex – LPC1769 • Escritura: • 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 tokeny la memoria envía busyflags 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 transmissiontoken. Luego la memoria queda en estado busy. Pablo Irrera Condines 45

  46. Cortex – LPC1769 • Tokens: • 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. Cortex – LPC1769 • Tokens: • 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. Cortex – LPC1769 • Tokens: • Stop transmissiontoken: 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. Cortex – LPC1769 Referencias 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) Pablo Irrera Condines 49

More Related