Diseño e Implementación de un Lector de Tarjeta...
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