Diseño e Implementación de un Lector de Tarjeta...

7
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, [email protected], [email protected] 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. VIII Semana Nacional de Ingeniería Electrónica 3 a 5 de octubre 2012. Colima, Col. México ISBN 978-607-477-902-8 583

Transcript of Diseño e Implementación de un Lector de Tarjeta...

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,

[email protected], [email protected]

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.

VIII Semana Nacional de Ingeniería Electrónica

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

46 1 ‘1’

Identificador

de comando

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

VIII Semana Nacional de Ingeniería Electrónica

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.

Fig. 2. Proceso de identificación e inicialización de

a tarjeta SD [6].

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.

VIII Semana Nacional de Ingeniería Electrónica

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

VIII Semana Nacional de Ingeniería Electrónica

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.

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.

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.

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.

VIII Semana Nacional de Ingeniería Electrónica

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

VIII Semana Nacional de Ingeniería Electrónica

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; Ren-

nong 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.

VIII Semana Nacional de Ingeniería Electrónica

3 a 5 de octubre 2012. Colima, Col. México ISBN 978-607-477-902-8 589