490 likes | 608 Views
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:
E N D
Cortex – LPC1769 Seminario de capacitación docente 2012 SD card en modo SPI Pablo Irrera Condines Ayudante de TP Pablo Irrera Condines
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
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
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
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
Cortex – LPC1769 Conexión entre dispositivos Un maestro y un esclavo: Un maestro y varios esclavos: Pablo Irrera Condines 6
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
Cortex – LPC1769 Formas de onda de cada modo MODO 0 MODO 1 Pablo Irrera Condines
Cortex – LPC1769 Formas de onda de cada modo MODO 2 MODO 3 Pablo Irrera Condines
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
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
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
Cortex – LPC1769 • Power control: PCONP= 1<10; para alimentar al periférico aunque ya amanece así Pablo Irrera Condines 13
Cortex – LPC1769 • Registros de configuración: Pablo Irrera Condines 14
Cortex – LPC1769 • Registros de configuración: ver despues… Pablo Irrera Condines 15
Cortex – LPC1769 • Registros de configuración: ojo! mejor escribir este registro al final solo para slave, don’tcare Pablo Irrera Condines 16
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
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
Cortex – LPC1769 • Prescaler SSP Valor par entre 2 y 254 Pablo Irrera Condines
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
Cortex – LPC1769 • Registro de datos Es el mismo registro para enviar y recibir datos Pablo Irrera Condines 21
Cortex – LPC1769 • Registro de estado Pablo Irrera Condines 22
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
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
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
Cortex – LPC1769 • Pinout SD Pablo Irrera Condines 26
Cortex – LPC1769 • PinoutmicroSD Pablo Irrera Condines 27
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
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
Cortex – LPC1769 • Set de comandos mas habituales (1) Pablo Irrera Condines
Cortex – LPC1769 • Set de comandos mas habituales (2) Pablo Irrera Condines 31
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
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
Cortex – LPC1769 • Tramas de respuesta (1): • Respuesta R1 La mayoria de los comandos reciben esta respuesta Pablo Irrera Condines 34
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
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
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
Cortex – LPC1769 • Inicialización (1): Pablo Irrera Condines 38
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
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
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
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
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
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
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
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
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
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
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