Diseño e Implementación de un Lector de Tarjeta de Memoria SD en FPGA Raúl Ruiz Meza, César Luis Pérez Bautista Instituto Politécnico Nacional, Unidad Profesional Adolfo López Mateos s/n. México, D.F., México, rarumerrm@hotmail.com, cesarluispb@yahoo.com.mx Resumen Los nuevos sistemas de procesamiento de imágenes, video o audio basados en FPGA requieren la utilización de grandes cantidades de información. Los dispositivos FPGA tienen cierta cantidad de memoria integrada que suele ser insuficiente; para solucionar este requerimiento es necesario utilizar algún dispositivo de memoria externo. Aquí se propone el diseño y la implementación de un sistema para la lectura de tarjetas de memoria SD (SD Card), utilizando la tarjeta de desarrollo Spartan 3E de Xilinx. Analizando el comportamiento de la tarjeta SD se decide utilizar el protocolo de comunicación 1-bit SD Bus y una velocidad de transmisión de datos predefinida de 25 MHz. En este documento se describe los módulos necesarios para la inicialización y la comunicación con la tarjeta SD. Todos los módulos fueron escritos directamente en el lenguaje VHDL. Palabras Clave: FPGA, SD card, spartan 3E. I. Introducción El uso de dispositivos FPGA ha aumentado en la mayoría de aplicaciones que necesitan procesamiento paralelo, altas velocidades de desarrollo y bajo consumo de energía. Estos dispositivos están siendo utilizados actualmente en muchos sistemas de procesamiento de imágenes, video o audio [1, 2, 3]. En estos sistemas generalmente se usan gran cantidad de datos, éstos mismos necesitan ser almacenados y/o leídos para su procesamiento. Muchos sistemas utilizan la tarjeta SD como el medio predilecto para almacenar datos, debido a sus ventajas como: portabilidad, gran capacidad de almacenamiento, alta velocidad en la transferencia y recuperación de la información además de múltiples protocolos de comunicación [4, 5]. La necesitad de desarrollo de sistemas más completos que manejen un medio de almacenamiento de datos, es la principal razón para implementar y desarrollar un sistema lector de tarjetas SD. Este sistema será utilizado en aplicaciones futuras como un visor de imágenes y visualización de archivos de texto. Se desarrolla el lector de tarjeta SD en el dispositivo FPGA XC3S500E de la empresa Xilinx, este chip esta integrado en la tarjeta Spartan 3E. Esta tarjeta se usa frecuentemente en investigaciones y proyectos académicos, razón por la cual se decide realizar este sistema en dicha tarjeta. Xilinx no proporciona soporte en cuanto a un módulo para controlar la tarjeta SD, por tanto este sistema es desarrollado desde cero hasta obtener un sistema que realizará la comunicación satisfactoria con la tarjeta SD. Como es descrito en [6] la tarjeta SD tiene múltiples protocolos de comunicaciones y velocidades de transferencia de datos. Aquí se utiliza el protocolo 1-bit SD Bus y una tasa de transferencia de datos a 25 MHz. El primer paso en el desarrollo de este sistema es entender el comportamiento de la tarjeta SD y con ello desarrollar el código y módulos que manejen la lógica necesaria para la comunicación con la tarjeta. 3 a 5 de octubre 2012. Colima, Col. México ISBN 978-607-477-902-8 583
II. Funcionamiento de la tarjeta SD a. Protocolos de comunicación La tarjeta SD permite dos diferentes protocolos de comunicación, uno de ellos es el protocolo SPI, que es utilizado por la mayoría de los microcontroladores existentes en el mercado, para acceder e introducir información en la tarjeta SD. El segundo protocolo es nombrado SD Bus ; éste tiene dos modalidades de funcionamiento: 1- bit o 4-bits, es decir, el protocolo de comunicación usará una sola línea de datos o las cuatro disponibles en la tarjeta SD. La transferencia de datos en este protocolo se basa en una cadena de datos que contiene al principio un bit de inicio y al final un bit de paro. El protocolo SD Bus, se basa en la comunicación comando-respuesta, mediante estos comandos y sus correspondientes respuestas, se establece el intercambio de información entre el controlador (host) de la tarjeta y la tarjeta. Como lo fue dicho antes una o cuatro líneas son dedicadas especialmente para la transferencia de datos. En la figura 1 se ejemplifica la comunicación con la tarjeta SD en una operación de lectura de datos. Fig. 1. Lectura de un bloque de datos con el protocolo SD bus [6]. La figura 1 también muestra que la transferencia de datos se realiza en bloques cuya longitud puede ser definida, mediante un comando por el controlador. Sin embargo, la longitud de los bloques de información esta predefinida a 512 bytes. Los comandos tienen una longitud de 48 bits [5, 6], estos bits están ordenados en 6 grupos de diferente longitud y propósito, de acuerdo a la siguiente descripción: Bit de Inicio, Bit de transmisión ( 1 controlador a tarjeta, 0 tarjeta a controlador), identificador de comando, argumento, código de redundancia cíclica (CRC), para corrección de errores y por último el bit de paro. Ver tabla 1. Descripción Posición de bit Cantidad de bits Valor Bit de inicio 47 1 0 Bit de transmisión Identificador de comando 46 1 1 45:40 6 X Argumento 39:8 32 X CRC 7:1 7 X Bit de paro 0 1 1 Tabla 1.Formato de comando. Cada comando enviado recibe una determinada respuesta. De acuerdo a [6] existen 4 tipos diferentes de respuesta y estas varían tanto en su longitud como en su contenido. En general su longitud puede variar entre 48 bits o 136 bits. b. Descripción de funcionamiento. Como se menciona en [4] la tarjeta SD necesita dos diferentes frecuencias de reloj, una de 400 KHz para el proceso de identificación e inicialización de la tarjeta y otra frecuencia de 25 MHz para el proceso de transferencia de datos. El proceso de identificación inicia cuando la tarjeta se inserta en el conector y se energiza. El controlador debe proporcionar la frecuencia de 400 KHz a la tarjeta al pin correspondiente. Antes de enviar cualquier comando el controlador debe esperar un periodo de 74 ciclos de reloj [6]. Después de esta espera, el controlador debe enviar la serie de comandos que confirmarán que la tarjeta está conectada en el conector, y que 3 a 5 de octubre 2012. Colima, Col. México ISBN 978-607-477-902-8 584
tanto la tarjeta como el controlador tienen capacidades similares para sostener la comunicación y la transferencia de datos. El proceso de inicialización conlleva la serie de comandos: CMD0, ACMD41, CMD2 y CMD 3. Cada uno de estos comandos tiene una función determinada que en conjunción dejarán lista la conexión con la tarjeta para la transferencia de información. El comando 0 (CMD0) tiene la función de reiniciar cualquier tarjeta que se encuentre conectada al bus de comunicaciones. Después de este comando la tarjeta conectada está lista para recibir nuevos comandos. El comando ACMD41 es un comando especial y antes de enviarlo es necesario enviar el comando 55 (CMD55) [6]. El ACMD41 solicita a la tarjeta el registro de condiciones de operación (OCR) para ser comparado con las capacidades del controlador y tener certeza de que la comunicación será exitosa. Después de saber que se podrá comunicar con la tarjeta, se envía un CMD2 que solicita a la tarjeta el número de identificación de esta (CID). Por último se envía CMD3 para solicitar su dirección relativa o RCA por sus siglas en inglés, esta cadena es útil cuando se tiene un bus multitarjeta, ya que mediante el CMD7 y la RCA es posible seleccionar con que tarjeta se desea comunicar. El proceso de inicialización termina cuando se recibe la respuesta al comando 3. Esta respuesta contiene la dirección relativa (RCA) de la tarjeta SD. La figura 2 muestra el diagrama de flujo de este proceso. Después de terminar el modo de identificación, la tarjeta pasa al modo de transferencia de datos y la frecuencia de reloj debe cambiar a 25MHz. Inmediatamente después de entrar al modo de transferencia de datos, el controlador debe enviar un CMD9 para preguntar a la tarjeta su registro de datos específico o CSD por sus siglas en inglés. Después de este comando le sigue un CMD4 para configurar el registro DSR. Aunque la longitud del bloque de datos está predefinida en 512 bytes, es necesario estar seguros de éstos; por lo tanto, antes de enviar un comando de lectura de datos es necesario enviar el comando CMD16 para establecer la longitud del bloque a 512 bytes. Para hacer lo antes mencionado enviar el comando CMD7 antes del CMD16 para establecer una comunicación directa con la tarjeta cuya RCA sea la contenida en el argumento del CMD7. Después de estas acciones los siguientes comandos que sean enviados serán los relacionados con las operaciones de lectura, escritura o borrado de datos. La figura 3 muestra los comandos utilizados en el modo de transferencia de datos y las transiciones internas de estado de la tarjeta SD. Fig. 2. Proceso de identificación e inicialización de a tarjeta SD [6]. 3 a 5 de octubre 2012. Colima, Col. México ISBN 978-607-477-902-8 585
Fig. 3. Modo de transferencia de datos [6]. c. Estructura de Datos La tarjeta SD es un tipo de memoria flash, internamente ésta tiene una estructura de datos de tipo FAT [2]. En la estructura de datos FAT el área total de almacenamiento de datos está dividida en varias secciones que se muestran en la figura 4. Es importante tener en cuenta la ubicación de cada una de estas secciones en la tarjeta SD para recuperar satisfactoriamente los datos deseados. III. Diseño e implementación El sistema diseñado está compuesto básicamente por 4 módulos y un DCM (Digital Clock Manager) este último proveerá las frecuencias requeridas por la tarjeta SD. Los módulos: Generador de Comandos, Receptor de Respuesta, Receptor de Datos y Control de estados, realizan las comunicaciones y transacciones de datos entre el chip FPGA y la tarjeta SD. En principio el DCM provee la frecuencia de 400KHz hasta que el proceso de identificación e inicialización termina; este módulo también provee la frecuencia de 25 MHz para el modo de transferencia de datos. Estas frecuencias son generadas por el DCM a partir de la frecuencia de entrada de 50 MHz. El módulo generador de comandos se encarga de generar la serie de 48 bits que serán transmitidos [5]. Esta cadena de bits tiene el formato mencionado en secciones anteriores. Este módulo contiene un registro que auxilia al módulo 3 a 5 de octubre 2012. Colima, Col. México ISBN 978-607-477-902-8 586
receptor de respuesta informando de la respuesta que es esperada para el comando generado. El módulo receptor de respuestas, está encargado de almacenar la serie de bits que la tarjeta envíe, además de almacenar la respuesta este módulo debe asegurar que la respuesta sea recibida sin errores de comunicación, esta tarea la realiza haciendo una evaluación con el CRC y la información recibida. Ya que la información esté libre de errores, el módulo redirige la información a los registros correspondientes en el controlador. En conjunto, el sistema integra los 4 módulos desarrollados y el DCM en un sistema capaz de leer datos de la tarjeta SD, estos mismos pueden ser desplegados o utilizados de acuerdo a las necesidades del sistema que integre este lector de tarjeta SD, ver figura 5. Fig. 5. Diagrama de bloques del sistema. Fig. 4. Estructura del área de datos en el sistema de archivos FAT [6]. El siguiente módulo, receptor de datos, se encarga de almacenar la información de archivos almacenada en la tarjeta SD. Esta información, como se dijo antes, está en bloques de 512 bytes, éstos son almacenados en una memoria temporal en el dispositivo FPGA y analizados para comprobar que los datos fueron recopilados sin errores, mediante una evaluación de errores con CRC. El último de los módulos diseñados, Control de estado, es una máquina de estados que se encarga de controlar las transiciones necesarias en la comunicación entre el controlador y la tarjeta. Cierto estado realiza el proceso de inicialización y otro por ejemplo realiza la tarea de enviar un comando. IV. Resultados Para demostrar el funcionamiento de este sistema se modificó por software el primer sector del área de usuario, de una tarjeta SD de 2GB, introduciendo a lo largo de este sector la cadena 0x00FF55AA. El funcionamiento de este sistema se demuestra con la obtención satisfactoria de esta cadena de datos. Fig. 6. Implementacions del Modulo SD Card Reader en la tarjeta SPARTAN 3E. 3 a 5 de octubre 2012. Colima, Col. México ISBN 978-607-477-902-8 587
Fig. 7. Window of software ChipScope Pro. El sistema enviará continuamente el comando de lectura de un solo sector (CMD17) direccionado hacia el primer sector del área de usuario de la tarjeta. La dirección de este sector esta contenida en el argumento del CMD17 y ésta se debe calcular de acuerdo a lo establecido en [6] y al sistema de archivos FAT16. Xilinx proporciona la herramienta ChipScope Pro que es un analizador lógico que permite observar señales internas, salidas o entradas del sistema, mientras este se encuentra en funcionamiento. Gracias a esta herramienta se seleccionan tres datos importantes del funcionamiento del sistema. La primera de ellas es un registro interno del sistema diseñado, que indica el último comando enviado. La segunda señal es el registro que almacena la RCA, este dato es importante ya que una vez que la tarjeta está identificada e inicializada se tendrá en el registro un valor diferente de 0. La última señal se trata de la línea de datos, en esta línea se encuentra repetidamente, de manera serial, la cadena 0x00FF55AA correctamente. La figura 7 es un fragmento de la ventana del software ChipScope Pro que muestra las señales seleccionadas y el valor actual del sistema en funcionamiento. Como puede verse, los resultados obtenidos son los esperados, el registro muestra que último comando enviado es CMD17 el cual es el comando de lectura de un bloque de datos, se observa también la cadena binaria serial antes dicha, por último se observa el registro de la RCA. Debido a lo anterior se puede asegurar el funcionamiento del sistema lector de tarjeta SD. V. Conclusiones líneas futuras La combinación de una tarjeta de bajo costo, con uso generalmente académico, y la implementación del lector de tarjeta SD en la misma, genera una variedad considerable en las capacidades futuras de desarrollo de aplicaciones, que requieran un dispositivo de almacenamiento. Se ha demostrado el éxito en la recuperación de los datos. A partir de esto es posible la implementación de un sistema más complejo, lo cual es la intención principal en este trabajo. El sistema será combinado, en un futuro, junto con una memoria RAM y una pantalla LCD, en un sistema que permita desplegar imágenes que estarán almacenadas en la tarjeta SD. Por otra parte, el sistema se seguirá desarrollando para que las subsecuentes versiones del mismo permitan una lectura múltiple de bloques de 3 a 5 de octubre 2012. Colima, Col. México ISBN 978-607-477-902-8 588
datos. Además de esto, también es la intención que el sistema soporte la escritura de datos dentro de la tarjeta. VI. Referencias [1] Kun Gao; JunboCai; Long Zhang; Rennong Sheng;, "A SoPC-based mini VGA video capture and storage system," Biomedical Engineering and Informatics (BMEI), 2010 3rd International Conference on, vol.7, no., pp.2770-2774, 16-18 Oct. 2010. [2] Chen Zhangjin; Jin Chen; Wang Hao; "Development of OLED demonstration system based on SD card," Electronic Packaging Technology & High Density Packaging, 2008. ICEPT-HDP 2008. International Conferenceen, vol., no., pp.1-4, 28-31 July 2008. [3] Hong-wei, Liang; Jian-ai, Li; Ling-ling, Kan;, "Implementation of SD Card Music Player Using Altera DE2-70," Multimedia and Signal Processing (CMSP), 2011 [4] International Conference on, vol.2, no., pp.150-153, 14-15 May 2011. [5] Elkeelany, O.; Todakar, V.S.; "Data Archival to SD Card Via Hardware Description Language," Embedded Systems Letters, IEEE, vol.3, no.4, pp.105-108, Dec. 2011. [6] Zhenlin Lu; Jingjiao Li; Yao Zhang;, "The Reading/Writing SD Card System Based on FPGA," Pervasive Computing Signal Processing and Applications (PCSPA), 2010 First International Conference on, vol., no., pp.419-422, 17-19 Sept. 2010. [7] SD Group, SD Specifications, Part 1: Physical Layer Simplified Specification, Version 3.01, May 18, 2010. VII. Autores Ing. César Luis Pérez Bautista egresado de la ESIME Zac. del Instituto Politécnico Nacional. Dr. Raúl Ruiz Meza, doctor en Tecnologías y Sistemas de Comunicaciones de la Universidad Politécnica de Madrid. 3 a 5 de octubre 2012. Colima, Col. México ISBN 978-607-477-902-8 589