Está en la página 1de 180

Reproductor de MP3 con almacenamiento

en Multimedia Card y comunicación


a través de USB

David Martín de Vidales Mañez

Tutor del proyecto: José Antonio Boluda Grau

© David Martín de Vidales Mañez, 1 Julio 2008


Agradecimientos

A mis padres, por su apoyo, ánimo y paciencia, y por haber soportado


estoicamente el desorden de mi habitación todos estos meses.

A Paola, por apoyarme en todo momento, estar conmigo y soportar esos largos
meses sin apenas salir.

A mis compañeras de trabajo y todos los amigos que insistieron, casi a diario, en
que fuese constante, siento no haberos hecho más caso.

Muy especialmente a mis abuelos, que no han podido ver este proyecto
concluido.
Índice de contenido
1.Introducción......................................................................................................................15
1.1 Presentación..............................................................................................................15
1.2 Objetivos...................................................................................................................16
1.3 Contenidos................................................................................................................17
2. Estado de la tecnología....................................................................................................18
2.1 Contenido..................................................................................................................18
2.2 Reproductores de MP3.............................................................................................18
2.2.1 Los primeros decodificadores...........................................................................18
2.2.1 Los primeros reproductores..............................................................................19
2.2.2 Clasificación de los reproductores....................................................................21
2.2.3 Reproductores no comerciales..........................................................................24
2.3 Formato MP3............................................................................................................25
2.3.1 Orígenes del MP3.............................................................................................25
2.3.2 Principios psicoacústicos..................................................................................26
2.3.3 Introducción a la compresión de audio MPEG ................................................29
2.3.4 Algoritmo de codificación MPEG-1 Layer 3....................................................30
2.3.5 Algoritmo de decodificación MPEG-1 Layer 3................................................33
2.4 Tarjetas de memoria no volátil..................................................................................36
2.4.1 Memorias Flash.................................................................................................36
2.4.2 Tipos de tarjetas................................................................................................38
2.5 El interfaz de comunicación USB.............................................................................42
2.5.1 Orígenes del USB.............................................................................................43
2.5.2 Características del USB....................................................................................43
2.5.3 Topología...........................................................................................................46
2.5.5 Nivel físico........................................................................................................46
2.5.6 Protocolo...........................................................................................................47
2.5.7 Tipos de transferencias en USB 2.0..................................................................48
2.6 Microcontroladores...................................................................................................50
2.6.1 Definición y características...............................................................................50
2.6.2 Selección del microcontrolador........................................................................51
2.6.3 Aplicaciones......................................................................................................51
3. Diseño y desarrollo del hardware....................................................................................52
3.1 Introducción..............................................................................................................52
3.2 Selección de componentes........................................................................................52
3.2.1 El microcontrolador..........................................................................................53
3.2.2 El módulo USB.................................................................................................55
3.2.3 La tarjeta de memoria.......................................................................................57
3.2.4 El chip decodificador de MP3...........................................................................58
3.2.5 La pantalla LCD................................................................................................58
3.3 Programa, herramientas y metodología utilizada.....................................................60
3.3.1 Diseño...............................................................................................................60
3.3.2 Fabricación........................................................................................................61
3.3.3 Testeo................................................................................................................62
3.4 Diseño de la PCB......................................................................................................63
3.4.1 Alimentación.....................................................................................................63
3.4.2 Microcontrolador..............................................................................................70
3.4.3 Módulo USB.....................................................................................................72
3.4.4 Decodificador VS1001k....................................................................................78

5
3.4.5 Tarjeta Multimedia Card...................................................................................82
3.4.6 Pantalla LCD.....................................................................................................83
3.4.7 Botonera............................................................................................................85
3.4.8 Otros elementos................................................................................................85
4. Diseño y desarrollo del firmware....................................................................................87
4.1 Introducción..............................................................................................................87
4.2 Herramientas de desarrollo utilizadas.......................................................................87
4.3 Librerías desarrolladas..............................................................................................89
4.3.1 Introducción......................................................................................................89
4.3.2 Librería VS1001K.............................................................................................89
4.3.3 Librería Multimedia Card.................................................................................96
4.3.4 Librería FAT16................................................................................................103
4.3.5 Librería de la pantalla LCD............................................................................109
4.3.6 Librería USB...................................................................................................114
4.3.7 Lectura de ID3v1 y ID3v2.............................................................................115
4.3.8 Funciones de visualización de datos y menú..................................................117
4.4 Protocolo de comunicación Reproductor-PC..........................................................118
4.4.1 Introducción....................................................................................................118
4.4.2 Sistema de mensajes........................................................................................119
4.4.3 Inicialización de la comunicación...................................................................121
4.4.4 Comandos de navegación...............................................................................122
4.4.5 Comandos de control......................................................................................124
4.4.6 Comandos de reproducción.............................................................................125
4.4.7 Comandos para el decodificador.....................................................................126
4.4.7 Errores.............................................................................................................127
4.5 Programa principal..................................................................................................127
4.5.1 Introducción....................................................................................................127
4.5.2 Función principal............................................................................................127
4.5.3 Función temporizada.......................................................................................128
4.5.4 Otras funciones...............................................................................................131
5. Diseño y desarrollo de la aplicación..............................................................................132
5.1 Introducción............................................................................................................132
5.2 Herramientas de desarrollo utilizadas.....................................................................132
5.3 Librería del módulo USB........................................................................................133
5.4 Librería de control del reproductor.........................................................................134
5.5 Modos de reproducción..........................................................................................136
5.5.1 Introducción....................................................................................................136
5.5.1 Reproducción remota de archivos en el reproductor......................................136
5.5.2 Reproducción remota de archivos en el ordenador.........................................137
5.5.3 Reproducción local de archivos en el reproductor..........................................137
5.5.4 Reproducción remota de streams de internet..................................................138
5.6 Podcasting y streaming a través de internet............................................................139
5.6.1 Introducción....................................................................................................139
5.6.2 Obtención e identificación del tipo de recurso................................................139
5.6.3 Streaming........................................................................................................140
5.6.4 Podcasting.......................................................................................................142
5.6.5 Emisoras favoritas...........................................................................................144
6. Presupuesto y planificación...........................................................................................145
6.1 Introducción............................................................................................................145
6.2 Coste del software...................................................................................................145
6.3 Coste de las herramientas.......................................................................................146

6
6.4 Coste de los componentes y PCB...........................................................................147
6.5 Planificación y mano de obra.................................................................................148
7. Conclusiones y trabajo futuro........................................................................................151
7.1 Conclusiones...........................................................................................................151
7.2 Trabajo futuro.........................................................................................................152
APÉNDICE I Manual de usuario......................................................................................154
1. Introducción..............................................................................................................154
2. Especificaciones técnicas..........................................................................................154
3. Requisitos del sistema...............................................................................................155
4. Reproductor..............................................................................................................155
4.1 Vista general y controles....................................................................................155
4.2 Alimentación y recarga de pilas.........................................................................157
4.3 Pantalla LCD......................................................................................................157
4.4 Utilización..........................................................................................................159
5 Aplicación..................................................................................................................161
5.1 Instalación..........................................................................................................161
5.2 Ventana principal................................................................................................164
5.3 Contenido de la tarjeta de memoria...................................................................165
5.4 Reproducción de archivos en la tarjeta de memoria..........................................165
5.5 Reproducción en la aplicación de archivos de la memoria................................166
5.6 Reproducción de archivos almacenados en el PC..............................................167
5.7 Streaming...........................................................................................................168
APÉNDICE II Estructura de FAT16..................................................................................171
II.1 Introducción...........................................................................................................171
II.2 Estructura de FAT16...............................................................................................171
II.2.1 Master Boot Record.......................................................................................171
II.2.2 Sector de arranque de la partición..................................................................172
II.2.3 Tabla de asignación de archivos (FAT)..........................................................174
II.2.4 Directorio raíz................................................................................................175
II.2.5 Área de datos..................................................................................................176
Bibliografía........................................................................................................................177

7
8
Índice de imágenes
Imagen 2.1 Primer chip decodificador de MP3 de Micronas (1994)..................................18
Imagen 2.2 Primer prototipo de un reproductor de MP3 sin partes móviles (1994)...........19
Imagen 2.3 Reproductor MPMan F10.................................................................................19
Imagen 2.4 Interior del reproductor MPMan F10...............................................................19
Imagen 2.5 Reproductor Diamon Rio PMP300..................................................................20
Imagen 2.6 Interior del reproductor Diamon Rio PMP300.................................................20
Imagen 2.7 Reproductor con disco duro PJB-100 (1999)...................................................20
Imagen 2.8 Reproductor MP3 de CDs Mambo-X...............................................................20
Imagen 2.9 Nevera Centrlpark de Whirpool, con reproductor de DVD y MP3..................21
Imagen 2.10 Umbrales de sensibilidad y auditivo [Hacker00]...........................................27
Imagen 2.11. Bandas críticas aproximadas [Pan93]............................................................27
Imagen 2.12 . Umbral en silencio y umbral de enmascaramiento ......................................28
Imagen 2.13 Umbrales de enmascaramiento temporal [Hung]...........................................28
Imagen 2.14 Estructura de codificación MP3[Lagerstöm01].............................................30
Imagen 2.15 Representación del filtro................................................................................30
Imagen 2.16 Anchos de banda del filtro MPEG/Audio vs ancho de las bandas
críticas[Pan95].....................................................................................................................31
Imagen 2.17 Ecuación de la transformación MDCT [Hung]..............................................31
Imagen 2.18 Formato del marco MP3.................................................................................32
Imagen 2.19 Ejemplo de bit reservoir.................................................................................33
Imagen 2.20 Diagrama de bloques del decodificador MPEG-1 Layer 3 ...........................33
Imagen 2.21 Diagrama de bloques de la decodificación del flujo de datos........................33
Imagen 2.22 Ecuación del calculo de desescalado de las líneas de frecuencia...................34
Imagen 2.23 Diagrama de bloques del Mapeo de la frecuencia al tiempo..........................35
Imagen 2.24 Expresión analítica del MDCT inverso..........................................................35
Imagen 2.24 Evolución prevista de la memoria NAND flash según la capacidad y tipo de
aplicación [Samsung]..........................................................................................................37
Imagen 2.25 Evolución prevista de la memoria NAND flashsegún la capacidad, el tamaño
y la velocidad [Samsung]....................................................................................................38
Imagen 2.26 Tarjeta CompactFlash.....................................................................................38
Imagen 2.27 Tarjeta SmartMedia........................................................................................39
Imagen 2.28 Tarjeta Memory Stick Pro Duo MagicGate....................................................40
Imagen 2.29 Tarjeta xD-Picture...........................................................................................41
Imagen 2.30 Tarjeta Multimedia Card.................................................................................41
Imagen 2.31 Tarjetas SD, MiniSD y MicroSD....................................................................42
Imagen 2.32 Terminales MicroUSB A y MicroUSB B.......................................................43
Imagen 2.33 Topología USB [Axelson05]..........................................................................46
Imagen 2.34 Cable para low speed[Anderson01]...............................................................47
Imagen 2.35 Cable para full y high speed[Anderson01].....................................................47
Imagen 3.3 Módulo DLP-USB245M-G..............................................................................57
Imagen 3.6 Pantalla LCD con controlador Philips PCD8544.............................................59
Imagen 3.7 Materiales para realizar el hardware.................................................................60
Imagen 3.8 Procesos para el diseño del circuito.................................................................61
Imagen 3.9 Diseño modular del circuito.............................................................................63
Imagen 3.10 Control de alimentación USB.........................................................................65
Imagen 3.11 Circuito de carga.............................................................................................66
Imagen 3.12 Funcionamiento del diodo Zener como regulador..........................................67
Imagen 3.13 Regulador de tensión TC115..........................................................................68

9
Imagen 3.14 Esquemático del regulador TC115 ................................................................68
Imagen 3.15 Regulador MAX1675.....................................................................................69
Imagen 3.16 Esquemático del regulador MAX1675...........................................................69
Imagen 3.17 Esquemático del módulo de alimentación......................................................70
Imagen 3.18 Microcontrolador 18LF452............................................................................71
Imagen 3.19 Configuración del cristal del microcontrolador..............................................72
Imagen 3.20 Diagrama de bloques del funcionamiento del FT245BM..............................73
Imagen 3.21 Esquemático del módulo DLP-USB245M.....................................................74
Imagen 3.22 Configuración de la alimentación del USB....................................................76
Imagen 3.23 Control de alimentación según especificaciones............................................76
Imagen 3.24 Conexión del módulo USB con el microcontrolador.....................................77
Imagen 3.25 Cronograma del ciclo de lectura USB............................................................77
Imagen 3.26 Cronograma del ciclo de escritura USB.........................................................78
Imagen 3.27 Funcionamiento del decodificador VS1001k.................................................79
Imagen 3.31 Circuito recomendado del VS1001k..............................................................80
Imagen 3.32 Circuito implementado del VS1001k.............................................................80
Imagen 3.28 Cronograma del interfaz SDI.........................................................................81
Imagen 3.29 Ciclo de lectura SCI.......................................................................................82
Imagen 3.30 Ciclo de escritura SCI.....................................................................................82
Imagen 3.31 Conexión de la tarjeta MMC..........................................................................83
Imagen 3.32 Pinout de la pantalla LCD..............................................................................84
Imagen 3.33 Circuito usado con la pantalla LCD...............................................................84
Imagen 3.34 Cronograma de comunicación con la pantalla................................................85
Imagen 3.35 Circuito de la botonera...................................................................................85
Imagen 3.36 Esquemático de los interfaces ICSP y UART................................................86
Imagen 4.1 Esquemático usado con el MAX3232..............................................................88
Imagen 4.2 Programador de PICs........................................................................................88
Imagen 4.3 Esquema de librerías........................................................................................89
Imagen 4.4 Pinout de la tarjeta MMC.................................................................................97
Imagen 4.5 Diagramas de los protocolos MMC y SPI........................................................98
Imagen 4.6 Estructura de las respuestas R1 y R2..............................................................100
Imagen 4.7 Diagrama de inicialización.............................................................................101
Imagen 4.10 Mapeo de la memoria DDRAM en la pantalla. Extraído de las
especificaciones del controlador PCD8544.......................................................................110
Imagen 4.11 Diagrama de tiempos del envío de un byte...................................................112
Imagen 4.12 Estructura del mensaje..................................................................................119
Imagen 4.13 Diagrama de inicialización de la comunicación...........................................121
Imagen 4.14 Diagrama de funcionamiento del comando USB_DIR_LIST......................122
Imagen 4.15 Diagrama del funcionamiento del comando USB_DIR_GET.....................123
Imagen 4.16 Diagrama de flujo de la función principal....................................................128
Imagen 4.17 Diagrama de flujo de la función temporizada..............................................129
Imagen 4.18 Diagrama de flujo de la comprobación de la botonera.................................131
Imagen 5.1 Arquitectura del uso del driver USB D2XX..................................................133
Imagen 5.2 Estructura interna de la librería de comunicación..........................................135
Imagen 5.3 Reproducción remota de archivos en el reproductor......................................136
Imagen 5.4 Reproducción remota de archivos en el PC....................................................137
Imagen 5.5 Reproducción local de archivos remotos........................................................138
Imagen 5.6 Reproducción de audio de Shoutcast..............................................................141
Imagen 5.6 Podcast cargado en el navegador de la aplicación..........................................142
Imagen 5.7 Listado de Podcast favoritos...........................................................................144
Imagen 6.1 Diagrama de Gantt..........................................................................................149

10
Imagen I.1 Visión general del reproductor........................................................................155
Imagen I.2 Detalles de la botonera....................................................................................156
Imagen I.3 Pantalla LCD con el reproductor en espera.....................................................158
Imagen I.4 Pantalla del listado de archivos.......................................................................158
Imagen I.5 Pantalla del listado de opciones......................................................................158
Imagen I.6 Descripción de la información en pantalla......................................................159
Imagen I.7 Ventana de instalación del driver de USB.......................................................162
Imagen I.8 Asistente de instalación de la aplicación 1......................................................162
Imagen I.9 Asistente de instalación de la aplicación 2......................................................163
Imagen I.10 Asistente de instalación de la aplicación 3....................................................163
Imagen I.11 Asistente de instalación de la aplicación 4....................................................163
Imagen I.12 Iniciación de comunicación..........................................................................164
Imagen I.13 Regiones principales de la aplicación...........................................................164
Imagen I.14 Contenido de la tarjeta de memoria..............................................................165
Imagen I.15 Ventana de copia de un archivo.....................................................................165
Imagen I.16 Opción Reproducción remota.......................................................................166
Imagen I.17 Reproducción remota de archivos en la tarjeta.............................................166
Imagen I.18 Opción Reproducción local...........................................................................166
Imagen I.19 Reproductor local de audio...........................................................................167
Imagen I.20 Lista de reproducción....................................................................................167
Imagen I.21 Añadiendo archivos al listado de reproducción............................................168
Imagen I.22 Detalle de los iconos del estado del archivo.................................................168
Imagen I.23 Podcast Favoritos..........................................................................................169
Imagen I.24 Contenido de un Podcast...............................................................................169
Imagen I.25 Página web de SHOUTcast...........................................................................170
Imagen II.1 Estructura de una partición FAT16................................................................172
Imagen II.2 Ejemplo de tabla de asignación.....................................................................174

11
12
Índice de tablas
Tabla 2.1 Diferencias entre las tecnologías NOR y NAND................................................37
Tabla 2.2 Comparación de los interfaces más populares [Axelson05]................................45
Tabla 2.3 Comparación de los tipos de transferencia [Axelson05].....................................49
Tabla 3.1 Características de la familia 18Fxx2...................................................................55
Tabla 3.2 Comparación de diferentes integrados para el interfaz USB...............................56
Tabla 3.4 Comparación de tarjetas de memoria..................................................................57
Tabla 3.5 Comparación de decodificadores de MP3...........................................................58
Tabla 3.6 Comparativa de pantallas LCD............................................................................59
Tabla 3.7 Rango de tensiones de los componentes..............................................................64
Tabla 3.8 Consumo máximo de los componentes...............................................................64
Tabla 3.9 Conexiones del microcontrolador........................................................................72
Tabla 3.10 Explicación del pinout del módulo USB...........................................................75
Tabla 3.11 Pinout de la tarjeta Multimedia Card.................................................................82
Tablas 4.1 Funciones SDI....................................................................................................91
Tabla 4.2 Registros internos del decodificador...................................................................91
Tabla 4.3 Descripción de los bits del registro MODE.........................................................92
Tabla 4.4 Frecuencias según los bits del registro AUDATA...............................................93
Tabla 4.5 Bits de los registros HDAT0 y HDAT1...............................................................94
Tabla 4.6 Funciones SCI......................................................................................................96
Tabla 4.7 Comandos más utilizados del protocolo SPI.......................................................99
Tabla 4.8 Comparación de las versiones de FAT...............................................................104
Tabla 4.15 Líneas de comunicación de la pantalla LCD...................................................109
Tabla 4.16 Juego de instrucciones de la pantalla LCD......................................................111
Tabla 4.17 Estructura de la etiqueta ID3v1.......................................................................116
Tabla 4.18 Comandos del protocolo de comunicación......................................................120
Tabla 6.1 Precio del Software............................................................................................146
Tabla 6.2 Precio de las herramientas.................................................................................147
Tabla 6.3 Precio de componentes......................................................................................148
Tabla 6.4 Valoración del coste de mano de obra...............................................................150
Tabla 6.5 Coste total del proyecto.....................................................................................150
Tabla II.1 Estructura del Master Boot Record...................................................................171
Tabla II.2 Estructura del registro de partición en el MBR................................................172
Tabla II.3 Estructura del sector de arranque de FAT16.....................................................173
Tabla II.4 Calculo de la posición de los elementos de una partición................................173
Tabla II.5 Tamaños de cluster según tamaño de partición.................................................175
Tabla II.6 Estructura de entrada de directorio...................................................................175

13
14
1.Introducción

1.1 Presentación

Actualmente los sistemas multimedia están teniendo una gran importancia y una
amplia variedad de dispositivos incluyen entre sus características la reproducción de audio
y/o vídeo. Cada vez más estos dispositivos admiten una mayor variedad de formatos y
soportes de almacenamiento como discos duros, CDs, DVDs, memorias Flash, etc.
Muchos de los dispositivos poseen una capacidad de almacenamiento limitado lo que hace
necesario la utilización de formatos comprimidos que permitan almacenar estos elementos
multimedia con una calidad aceptable y en muchos casos sin pérdida aparente de ésta.

De la necesidad de obtener un formato de audio comprimido de alta calidad


surgió el estándar MP3, gracias a él se puede obtener audio comprimido a un ratio
aproximado de 1:12 con respecto al audio en PCM1 y con perdidas poco apreciables.
Gracias a este nivel de compresión han surgido gran cantidad de dispositivos que pueden
ser utilizados como reproductores portátiles de audio, como teléfonos móviles, PDAs y
gran cantidad de reproductores de alta capacidad basados en memoria Flash, disco duro o
CD. Pero el formato MP3 no ha sido sólo utilizado en dispositivos portátiles, hoy en día
puede encontrarse en reproductores para coche, mini cadenas, reproductores de DVD,
duchas, frigoríficos, centralitas telefónicas, etc.

Otra ventaja del tamaño reducido es que es muy adecuado para transmisiones
entre dispositivos ya sea a través de USB, redes cableadas o inalámbricas. Esto permite al
MP3 ser reproducido de forma remota, de hecho el MP3 es uno de los principales
formatos para la transmisión de audio por Internet.

El propósito general de este proyecto es el desarrollo de un dispositivo hardware


capaz de reproducir audio en formato MP3 almacenado de forma local en el propio
dispositivo y de forma remota siendo transmitido desde el ordenador a través del interfaz
USB.

1 Pulse Code Modulation, representación digital de una señal analógica donde la magnitud de la señal es
muestreada y cuantificada a intervalos regulares.

15
1.2 Objetivos
En el proyecto se pretende desarrollar un sistema que conste de un dispositivo
hardware y una aplicación para el control y transmisión de datos desde el ordenador. El
objetivo principal de este proyecto es:

El desarrollo de un dispositivo hardware que reproduzca ficheros en formato


MP3 y pueda ser utilizado tanto como reproductor portátil como periférico conectado a
un ordenador. El desarrollo de una aplicación a través de la cual se podrá controlar el
dispositivo desde el ordenador cuando esté conectado a éste, y el diseño del protocolo de
comunicación entre el dispositivo y la aplicación.

A continuación se enumeran las características que tendrá el dispositivo:

● Al tratarse de un dispositivo que puede funcionar de forma autónoma estará


alimentado por pilas cuando no esté conectado al ordenador y por USB cuando
lo esté. Estas pilas serán recargables y podrán cargarse mediante USB cuando el
dispositivo esté conectado.
● Tendrá un interfaz de usuario compuesto por una botonera y una pantalla, que
permitan un control sencillo e intuitivo del dispositivo.
● En la pantalla se mostrará el título y demás información del fichero MP3
obtenida de las etiquetas ID3 cuando estén disponibles.
● Almacenará los ficheros MP3 en tarjetas de memoria Flash intercambiables y
que podrán ser leídas y grabadas en cualquier otro dispositivo.
● Podrá conectarse a un ordenador mediante el interfaz USB 2 y ser controlado por
la aplicación que se desarrollará para este propósito.

Las características de la aplicación que se ejecutará en el ordenador son las


siguientes:

 La aplicación tendrá acceso a la estructura de ficheros de la tarjeta introducida


en el reproductor, de modo que podrá navegar por ella.
 Se podrá controlar la reproducción de los ficheros MP3 de la tarjeta de
memoria.
 Podrán transmitirse flujos de datos MP3 que serán reproducidos en tiempo real
por el dispositivo. De este modo se podrán enviar para su reproducción ficheros
que se encuentren en el ordenador, ficheros a los que se acceda a través de
Internet o flujos de audio procedentes de una radio a través de Internet.
 La aplicación podrá obtener ficheros que se encuentren en la tarjeta de
memoria, para su almacenamiento en el ordenador o para su reproducción en
tiempo real.
 Podrá crear listas de reproducción de ficheros locales que será reproducidos por
el dispositivo.

En cuanto a las características del protocolo de comunicación, este deberá


permitir un control total de la reproducción de ficheros almacenados en la tarjeta de
memoria, acceso a la estructura de ficheros y control de diferentes características y

2 La elección del USB como interfaz de conexión será discutida en posteriores apartados.

16
configuraciones, como el control del volumen. En líneas generales deberá permitir realizar
las características de la aplicación descritas.

1.3 Contenidos
La memoria se ha dividido en diferentes capítulos para intentar mostrar de forma
clara cada una de las partes del proyecto. Estos capítulos desarrollan los siguientes
contenidos:

 Capítulo 1: Enunciado y objetivos del proyecto, especificaciones del


reproductor y resumen del contenido de la memoria.
 Capítulo 2: Estado de la tecnología, donde se relata los inicios del sistema de
codificación MP3, los primeros reproductores, las tarjetas de memoria
existentes, y se da una visión general del funcionamiento de las diferentes
tecnologías de las que se compone el dispositivo realizado.
 Capítulo 3: Explica el diseño hardware del dispositivo desarrollado; selección
de componentes, herramientas utilizadas y diseño de cada uno de los módulos
de los que se compone el sistema (alimentación, microcontrolador, USB,
decodificador de MP3, pantalla, etc.).
 Capítulo 4: Diseño del firmware del microcontrolador. Se detallan las
herramientas utilizadas, las diferentes librerías implementadas (decodificador,
tarjeta de memoria, FAT16, pantalla, USB, ID3, etc.) y el protocolo de
comunicación desarrollado para el control del reproductor desde una aplicación
en el ordenador.
 Capítulo 5: Diseño de la aplicación. Explicación de las herramientas utilizadas,
y de la aplicación implementada para el control del reproductor.
 Capítulo 6: Estimación económica de los costes del proyecto y planificación
temporal de éste.
 Capítulo 7: Conclusiones y valoración del resultado del proyecto, y posibles
desarrollos y mejoras futuras.
 Apéndice I: Manual de usuario.
 Apéndice II: Estructura del sistema de archivos FAT16.
 Bibliografía.

17
2. Estado de la tecnología

2.1 Contenido
En este capítulo se hará una pequeña explicación de las tecnologías utilizadas en
el presente proyecto. Primero se hablará de los reproductores MP3 existentes, con un
resumen de su historia y una clasificación según características. Después se explicará el
funcionamiento de la codificación MP3, con una pequeña introducción a su origen, los
principios psicoacústicos en los que se basa y un resumen del algoritmo de codificación y
decodificación del formato.

Los tres siguientes apartados hacen referencia al hardware utilizado, el USB


como interfaz de comunicación, las tarjetas de memoria como medio de almacenamiento
y el microcontrolador, utilizado para gobernar el sistema.

2.2 Reproductores de MP3


El formato MP3 ha sido y sigue siendo el formato de audio más extendido y el
número de reproductores3 que se ha desarrollado y comercializado es enorme, lo que hace
imposible una enumeración de todos. Por tanto se hará una pequeña introducción con los
primeros dispositivos capaces de decodificar este formato y, posteriormente, una
clasificación de los reproductores según diferentes características.

2.2.1 Los primeros decodificadores

El formato de audio MPEG-1 Layer 3, más conocido como MP3 se convirtió en


estándar ISO/IEC a finales de 1991, los primeros equipos capaces de reproducirlo fueron
Racks de 19'' creados y distribuidos por Fraunhofer IIS para uso profesional, inicialmente
se crearon para transmisión de audio de alta calidad por líneas telefónicas RDSI y para
estaciones de radio.

Imagen 2.1 Primer chip decodificador de MP3 de Micronas (1994)


y tarjeta de PC codificadora (1996)

En 1992 Micronas4, un fabricante de circuitos integrados, comenzó el desarrollo


junto con del IIS el primer chip decodificador de MP3,el MAS3507 (Imagen 2.1), que fue
3 Cuando nos referimos a reproductores en este texto hacemos referencia a los dispositivos hardware
capaces de reproducir MP3, salvo que se indique lo contrario (reproductores software, de DVD, etc.)
4 Realmente fue diseñado por ITT Intermetall, adquirido por Micronas.

18
presentado en el verano de 1994, Micronas se encargó del hardware y el IIS desarrolló el
software. Con él se pretendía que el MP3 llegase a la electrónica de consumo. Aunque
todavía tardarían unos años en ser comercializados los primeros reproductores no tardaron
en desarrollarse los primeros prototipos (como el de la Imagen 2.2), algunos basados en
este chip, otros programados en un DSP genérico y otros en PCs de tamaño reducido con
un reproductor software [FraunHist].

Imagen 2.2 Primer prototipo de un reproductor de MP3 sin partes móviles (1994)

2.2.1 Los primeros reproductores.

Aunque existían integrados capaces de decodificar el formato MP3 desde 1994 no


fue hasta 1998 cuando Saehan Information System, fabricante coreano, comercializó un
reproductor portátil, el MPMan F10 distribuido por Eiger Labs (Imagen 2.3 e Imagen 2.4).
Este primer reproductor utiliza el decodificador fabricado por Micronas y como
almacenamiento una memoria Flash interna de 32 MB (ampliable a 64 enviándolo al
fabricante) en la que se puede almacenar 30 minutos de audio a una calidad equivalente a
la de un CD de audio. La transferencia de datos desde el PC a la memoria interna se
realiza a través del puerto paralelo y utiliza una batería interna de NiMH que le otorga 9
horas de autonomía. Poco después este mismo fabricante comercializó el MPMan F20, un
modelo muy similar también con 32MB de memoria interna pero expandible otros 32MB
mediante una tarjeta SmartMedia, en este caso el reproductor se alimentaba mediante una
pila AA que le otorga 12 horas de autonomía.

Imagen 2.4 Interior del reproductor MPMan F10.


Imagen 2.3 Reproductor 1. DSP y DAC de Phillips; 2. Controlador del LCD de Samsung; 3.
MPMan F10 Controlador de interfaces de Microchip; 4. Decodificador MP3
hardware de Micronas; 5. NAND flash de Samsung.

19
A pesar de ser el primer reproductor en salir al mercado poco meses después salio
el reproductor que fue líder en ventas y regalo por excelencia las navidades de ese año, el
Diamon Rio PMP300 (Imagen 2.5 e Imagen 2.6). Su popularidad se debió a un mejor
diseño, una pantalla LCD mayor y unos mejores controles. Utiliza también el MAS3507 y
posee una memoria interna de 32MB y, al igual que el MPMan F20, un slot de expansión
para tarjetas SmartMedia, se conecta al PC mediante un interfaz paralelo propietario y se
alimenta mediante una pila AA. En 1998 Recording Industry Association of America
demandó a Diamond por violación del Audio Home Recording Act y llegó a paralizar la
distribución del dispositivo, los jueces fallaron a favor de Diamon allanando el camino de
los reproductores MP3 portátiles [MPManReview].

Imagen 2.5 Reproductor Diamon


Rio PMP300 Imagen 2.6 Interior del reproductor Diamon Rio PMP300

El primer reproductor basado en disco duro fue el PJB-100 (Imagen 2.7) diseñado
por HanGo Electronics Co., Ltd. y lanzado a finales de 1999. Fue distribuido por Compaq,
usaba como CPU/DSP el Motorola 56309 DSP con 12MB de RAM, un interfaz USB 1.1 y
contaba inicialmente con 4,8GB de almacenamiento. Puede reproducir ficheros de 8 a
320Kbit/s a muestreo de 44.1KHz, la decodificación MP3 la hace la misma CPU que
funciona a 33MHz y posee una pantalla LCD de 128×64 píxeles [PJB100]. Poco después
aparecieron otros reproductores de Creative y Archos también basados en disco duro. En
ese mismo año, 1999, salió al mercado el Mambo-X (Imagen 2.8), primer reproductor de
MP3 que usaba el CD como almacenamiento y que permite además reproducir CDs de
audio.

Imagen 2.7 Reproductor con disco duro PJB-100 Imagen 2.8 Reproductor MP3 de CDs Mambo-X
(1999)

20
2.2.2 Clasificación de los reproductores

Existe una gran cantidad de reproductores de MP3, en pocos años han sustituido
al walkman y los reproductores portátiles de CD al igual que los teléfonos móviles
incorporan la posibilidad de leer este formato. A continuación se realiza una clasificación
según las características de cada uno.

Podríamos hacer una primera división entre los reproductores creados


expresamente con ese propósito, como los analizados en el apartado anterior, y los
dispositivos cuyo propósito principal es otro distinto a la reproducción de audio e
incorporan la reproducción de MP3 como característica adicional. Entre estos últimos
dispositivos podríamos encontrar:

 Teléfonos móviles: inicialmente surgieron con la posibilidad de reproducir


pequeños ficheros como tono de llamada y se han convertidos en auténticos
dispositivos multimedia capaces de reproducir audio y vídeo, y con una
capacidad de almacenamiento muy elevada gracias a las tarjetas de memoria.
 Reproductores DVD, que al igual que los móviles cada vez incorporan más
variedad de características, como la posibilidad de ver FotoCDs, reproducir
vídeos almacenados de forma remota por red (cableada o no) y en diferentes
formatos. Y por supuesto pueden reproducir audio MP3, esto es así
precisamente porque la codificación de audio utilizada los VideoCDs es
MPEG1 Layer 3, aunque en la práctica suelen ser utilizados para este fin.
 Navegadores GPS, algunos modelos de alta gama tienen la posibilidad de
reproducir audio y vídeo.
 Consolas de vídeo juegos, tanto las de sobremesa como las portátiles incluyen
esta capacidad en sus últimos modelos.
 En general cualquier electrodoméstico puede tener un reproductor integrado,
existen: neveras (Imagen 2.9), columnas hidromasaje, microondas, marcos de
fotos digitales, etc.

Imagen 2.9 Nevera Centrlpark de Whirpool, con reproductor de DVD y MP3

En cuanto a los dispositivos cuya función principal es la reproducción de audio se


puede diferenciar entre los que la reproducción de MP3 es su característica principal y
aquellos que la incorporan como un soporte más de audio que son capaces de reproducir,
como los AutoCDs o las cadenas musicales.

Sea cual sea el propósito por el cual un dispositivo tiene la capacidad de


reproducir audio MP3 se pueden hacer distintas clasificaciones basándonos en sus
características internas, esto es: el soporte de almacenamiento, interfaz de conexión con el
ordenador, la variedad de codificaciones de audio admitidas, otras funcionalidades, etc.

21
Además de otras características menos evidentes como si la decodificación la hace un
integrado especifico, se realiza mediante un DSP de propósito general o el reproductor se
basa en un SoC5.

Almacenamiento

Dependiendo del almacenamiento utilizado se pueden clasificar los dispositivos


según utilicen:

 Memoria interna, en concreto utilizan NAND Flash.


 Disco duro.
 Un soporte óptico, ya sea CD o DVD.
 Tarjetas de memoria
 Sin almacenamiento, reproduciendo el audio que les llega mediante USB,
puerto paralelo, ethernet, etc.

La mayoría de dispositivos actuales creados específicamente para la reproducción


de MP3 utilizan memoria interna o un disco duro como almacenamiento. La ventaja de la
memoria interna es que permite hacer dispositivos de menor tamaño, mientras que con el
disco duro se obtiene un almacenamiento mayor. El soporte óptico lo utilizan los
reproductores de CD y DVD que tienen la capacidad de reproducir MP3, las tarjetas de
memoria suelen usarse como ampliación de la capacidad de almacenamiento de los
reproductores con memoria interna y los dispositivos sin almacenamiento son los menos
comunes. Además de estos soportes muchos reproductores disponen de un interfaz USB
en el que se puede conectar un dispositivo de almacenamiento masivo, normalmente un
pendrive.

Interfaz

No todos los reproductores disponen de un interfaz de conexión al ordenador, esto


depende principalmente del tipo de almacenamiento utilizado ya que el interfaz suele
usarse para acceder a la memoria y transferirle los archivos MP3. Los dispositivos que
suelen disponer de interfaz de conexión son aquellos que utilizan memoria interna o disco
duro, mientras que los que utilizan como medio de almacenamiento un soporte óptico no
suelen tenerlos. Los interfaces normalmente utilizados son:

● Puerto paralelo, utilizado en los primeros reproductores, algunos usaban


interfaces paralelo propietario.
● USB, la mayoría de los reproductores con memoria interna o disco duro usan
este interfaz para poder acceder a la memoria.
● Firewire, aunque son pocos existen algunos reproductores que lo utilizan.
● Ethernet, algunos reproductores de sobremesa pueden conectarse a la red
mediante cable o de forma inalámbrica, pudiendo reproducir ficheros remotos o
radios que emiten por Internet.
● Sin interfaz de conexión, como la mayoría de los reproductores de CD o DVD.

5 System on a Chip, es la inclusión de todo un sistema o dispositivo dentro de un circuito integrado. Los
sistemas basados en SoC suelen necesitar tan solo un pequeño número de elementos pasivos externos.

22
Codificaciones soportadas

La codificación de audio más utilizada y extendida en los reproductores es el


MP3 pero existen otros formatos con calidades similares o superiores que, cada vez más,
están siendo soportadas por los reproductores. De hecho es muy común que las últimas
versiones de los integrados decodificadores de MP3 incluyan alguno de estos otros
formatos. Entre los formatos de codificación soportados por los reproductores podemos
encontrar además del MP3:

 RealAudio, es un formato de audio propiedad de RealNetworks utilizado


principalmente para la retransmisión de audio en tiempo real por Internet.
 Windows Media Audio, es un formato propiedad de Microsoft conocido como
WMA, es un competidor directo del MP3 y según Microsoft con una calidad
superior a este. Además este formato posee otras características como el poder
incluir tecnología DRM6 en los ficheros. Tiene una variante de compresión sin
perdidas denominada WMA Lossless.
 AAC o Advanced Audio Coding, es un formato desarrollado entre varias
compañías, entre ellas: Dolby, Fraunhofer IIS, AT&T, Sony y Nokia. Fue
declarado oficialmente estándar en 1997 y está incluido en las especificaciones
MPEG2 parte 7 y MPEG4 parte 3 aunque se suele hacer referencia a ella como
MPEG4 AAC o simplemente AAC. Puede incluir DRM pero no es muy común.
 Vorbis, formato de audio de código abierto surgido a partir del anuncio en 1998
de Fraunhofer Gesellschaft de cobrar royaltys por todos los codificadores o
decodificadores de MP3 fuesen gratuitos o no.
 MusePack o MPC, otro formato de código abierto especialmente desarrollado
para bitrates altos.
 Formatos sin pérdida como: Apple Lossless y FLAC.
 Otros formatos menos comunes como: Speex, WavPack, Shorten, etc. pueden
ser reproducidos en un iPod7 cambiándole el firmware por uno no oficial
denominado Rockbox.

En la actualidad muchos reproductores que se comercializan dicen reproducir


MP4, esto en realidad no es del todo cierto ya que el MP4 no es una formato de
codificación de audio, sino un contenedor multimedia estandarizado como parte del
MPEG4 (MPEG4 parte 14) y se usa como contenedor de audio y vídeo. Los ficheros de
audio con el contenedor MP4 suelen usar las extensiones .m4a o .mp4 y normalmente
utilizan como codificación AAC o MP3 (aunque soporta otras). Por tanto estos
reproductores lo que reproducen además del MP3 es el formato AAC.

Otro factor a tener en cuenta respecto a la codificación de audio es que es posible


que un reproductor no pueda reproducir todos los archivos MP3. Un archivo con
extensión .mp3 puede ser en realidad un MP2 (codificado con MPEG1 Layer 2) o estar
codificado con unas tasas de bits o una frecuencia de muestreo no incluido en el estándar 8,
también es posible que el reproductor no tenga la capacidad de decodificar tasas de bits

6 Digital Rights Management o Gestión de derechos digitales, hace referencia a un conjunto de tecnologías
dirigidas al control de los contenidos con el objetivo de proteger los derechos de autor.
7 Línea de reproductores portátiles de gran éxito desarrollados por Apple Inc.
8 En el estándar MPEG2 se añadieron nuevas tasas de bits y muestreos, al igual que en el estándar no
oficial MPEG 2.5 creado por Fraunhofer para tasas de bits muy bajas.

23
altos o no soportar VBR9. No obstante los chips decodificadores actuales suelen soportar
todas estas variantes.

Funcionalidades

Además de todas estas clasificaciones podemos ordenar los reproductores según


tengan o no alguna funcionalidad especifica, éstas pueden ser muy variadas. Algunos
ejemplos de estas son:

 Capacidad de leer ID3


 Función de Karaoke para ver la letra de las canciones.
 Conexión a red y posibilidad de reproducir radio por Internet.
 Organizaciones especiales automáticas: por álbum, autor, género o año.
 Etc.

2.2.3 Reproductores no comerciales

Existen varios reproductores de MP3 no comerciales, algunos han sido realizados


como partes de proyectos o tesis y otros por personas con buenos conocimientos de
electrónica que, basándose en otros proyectos, han decidido construir su propio
reproductor (en estos casos suele ser muy básico). De hecho existen reproductores que
surgieron como un proyecto personal y han terminado comercializándose u otros en los
que el autor vende un kit con todos los componentes y el firmware del microcontrolador
para montarlo. Un ejemplo es el reproductor Yampp-3, basado en un microcontrolador
Atmel y el decodificador VS1001k.

La mayoría de estos reproductores suelen estar controlados por un


microcontrolador (los mas utilizados PIC, Atmel y Motorola), un chip para la
decodificación del audio (de Micronas, ST microelectronics, VLSI Solutions o Texas
Instruments) y como almacenamiento, al igual que muchos comerciales, un disco duro,
tarjeta de memoria o CD.

El reproductor desarrollado en el presente proyecto implementa funcionalidades


que no están presentes en ninguno de ellos, como el control total de la reproducción
mediante el puerto USB. Son pocos los reproductores no comerciales que incluyen
conexión USB, y los que lo hacen lo utilizan exclusivamente para acceder a los archivos
almacenados en la memoria. Además se ha incluido la opción de reproducir audio en
formato MP3 descargada en tiempo real de internet (como archivos de Podcast y radio).

9 Variable Bit Rate o tasa de bits variable, permite que no todo el fichero este codificado con la misma tasa
de bits, usando mayores cuando sea necesario y menores cuando no (como en silencios).

24
2.3 Formato MP3
El formato de codificación de audio MPEG1 Layer 3, más comúnmente conocido
como MP3 debido a la extensión .mp3 que utilizan sus archivos, es un algoritmo de
compresión con perdidas diseñado para reducir la cantidad de datos necesaria para
almacenar audio sin degradación apreciable del sonido para el oído humano.

2.3.1 Orígenes del MP3

En 1987 se forma una alianza de investigación entre la universidad Erlangen-


Nuremberg y el Fraunhofer Institute for Integrated Circuits bajo el marco de un proyecto
de la Union Europea denominado EUREKA para la radiodifusión de audio digital (DAB).
Este equipo de investigación creó un codificador funcional en tiempo real del algoritmo
LC-ATC (Low Complexity Adaptive Transform Coding) como base de su investigación,
hasta ese momento el LC-ATC existía solo como simulación por ordenador. El sistema
hardware estaba compuesto por múltiples módulos DSP y varias tarjetas de entrada y
salida de audio y datos.

En 1989 Karlheinz Brandenburg termina su tesis doctoral sobre el OCF


(Optimum Coding in the Frequency Domain), que posee un gran número de
características que se encuentran en la tecnología MP3, como banco de filtrado de
resolución de alta frecuencia, cuantización no uniforme, codificación Huffman y su
estructura de información. La parte software del sistema de tiempo real es desarrollada
por Bernhard Grill bajo la supervisión del profesor Gerhäuser que lidera el grupo de
trabajo del Fraunhofer IIS.

En 1991 una nueva codificación de audio de altas prestaciones denominado


ASPEC (Adaptive Spectral Perceptual Entropy Coding) es presentada como resultado de
diferentes mejoras del OCF y con contribuciones de la universidad de Hannover, AT&T y
Thomson. Esta codificación se propone como nuevo estándar de audio al subcomité
MPEG (Movin Picture Experts Group), creado en enero de 1988 por ISO/IEC con la
finalidad de desarrollar estándares de compresión de audio y vídeo digital.

MPEG recibió un total de 14 propuestas de codificación de audio que son


combinadas finalmente en cuatro propuestas entre las que se encuentran incluidas ASPEC
y MUSICAM. Después de varias pruebas se sugieren tres esquemas de codificación de
audio basados en ASPEC y MUSICAM: Layer 1 es una variante de MUSICAM de baja
complejidad, Layer 2 es una versión optimizada de MUSICAM y Layer 3 está basado en
ASPEC.

Debido a su menor complejidad Layer 2 es elegido como formato de audio para la


radiodifusión de servicios de audio digital mientras que ASPEC/Layer 3, que ofrece una
codificación más eficiente al tiempo que una mayor complejidad, pasa a ser la clave en las
transmisiones de audio de alta calidad en las líneas RDSI. Fraunhofer IIS fabrica y vende
racks a estaciones de radio profesionales con su codificación ASPEC de forma que la
transmisión de audio de alta calidad por RDSI en tiempo real entre estudios de
radiodifusión fue la primera aplicación real de este algoritmo de codificación.

25
Al fin en 1992 MPEG concluye su primer estándar de compresión, MPEG1, para
el uso en VideoCDs. En la sección de audio se especifican tres familias genéricas de
formatos de codificación (Layer 1, 2 y 3). Siendo el más eficiente de las tres
codificaciones Layer 3 pronto se convierte en una popular manera de almacenar música en
los relativamente pequeños discos duros de los ordenadores y transferir ficheros de
música a través de Internet mediante los modems de ordenador de 28.8Kbps. [FraunHist]

2.3.2 Principios psicoacústicos.

La audición humana es un proceso extraordinariamente complejo, que comienza


cuando el sonido golpea el tímpano y es convertido de variaciones en la presión del aire a
impulsos nerviosos. De ahí en adelante la psicología se convierte en factor más importante
para estudiar y analizar los sonidos, así como las reacciones de las personas ante éstos. La
psicoacústica puede ser definida simplemente como el estudio psicológico de la audición.
El objetivo de la investigación psicoacústica es averiguar cómo funciona la audición. En
otras palabras, el objetivo es descubrir cómo los sonidos que entran en el oído son
procesados por éste y el cerebro, con el fin de dar a la persona que escucha información
útil acerca del mundo exterior.[VargasDuque01]

La mayoría de codificaciones de audio actuales consiguen la compresión


aprovechándose del hecho de que información irrelevante de la señal no es detectable por
el oyente [Lagerstöm01]. Los cuatro aspectos más relevantes en el desarrollo de
codificaciones de audio a lo que psicoacústica se refiere son: el mínimo umbral auditivo,
las bandas críticas, los enmascaramientos y joint stereo.

Mínimo umbral auditivo y bandas críticas

Nuestros órganos auditivos están preparados para sentir sólo un rango de


frecuencias de vibraciones de todo el espectro. Por lo general los seres humanos no
pueden oír frecuencias por debajo de los 20Hz ni por encima de los 20kHz. Además, los
humanos perciben el rango intermedio de frecuencias mejor que las altas y bajas
frecuencias (Imagen 2.10 ), y esta sensibilidad a altas frecuencias disminuye con la edad y
con la exposición prolongada a volúmenes altos. De hecho la mayoría de los adultos no
pueden oír por encima de los 16kHz. El rango de mayor sensibilidad se encuentra entre
los 2kHz y los 4kHz hecho probablemente relacionado con la evolución, ya que la voz
humana se encuentra entre el rango de los 500Hz y los 2kHz. [Hacker00]

26
Imagen 2.10 Umbrales de sensibilidad y auditivo [Hacker00]

Enmascaramiento simultáneo10

El oído realiza pequeños análisis de las bandas críticas donde se realizan


transformaciones tonotópicas en la membrana basilar11. Los espectros de energía no se
representan en una escala de frecuencias lineal sino en bandas de frecuencia limitada
llamadas bandas críticas (Imagen 2.11). El sistema de audición puede describir como un
banco de filtros pasa banda, consistentes en filtros pasa banda fuertemente solapados con
anchos de banda del orden de los 50Hz a 100Hz para señales por debajo de 500Hz y hasta
5kHz para señales de frecuencias altas.

Imagen 2.11. Bandas críticas aproximadas [Pan93]

10 Enmascaramiento simultaneo o en frecuencia, depende del autor.


11 Teoría del funcionamiento del oído interno iniciada por Helmholtz y continuada por Békésy según la cual
la zona de mayor estimulación de la membrana basilar depende de la frecuencia, es decir que a cada
frecuencia corresponde una posición específica en la membrana basilar.

27
El enmascaramiento simultáneo es un fenómeno del dominio de la frecuencia
donde una señal con nivel bajo (la enmascarada) se hace inaudible (enmascarada) debido
a una señal mas fuerte que ocurre simultáneamente (la enmascaradora), si la enmascarada
y la enmascaradora están muy cercana la una a la otra en frecuencia (Imagen 2.12). Este
enmascaramiento es mayor en la banda crítica en la que se encuentra el enmascarador, y
su efecto es menor en las bandas vecinas [IEEE97].

Imagen 2.12 . Umbral en silencio y umbral de enmascaramiento


(sonidos por debajo de los umbrales de las mascaras no son audibles) [Lagerstöm01]

Enmascaramiento temporal

Además del enmascaramiento simultáneo en el domino de la frecuencia, el


enmascaramiento temporal, también llamado enmascaramiento no simultáneo, juega un
rol importante en la percepción auditiva humana en el domino del tiempo. Cuando dos
señales aparecen en un corto intervalo de tiempo la señal más fuerte puede enmascarar a
la más débil incluso si la enmascarada precede a la enmascaradora.

Dos efectos de enmascaramiento temporal ocurren antes y después de una señal


fuerte. Si la señal es enmascarada después de una señal fuerte se llama post-
enmascaramiento, y si es enmascarada a continuación se le denomina pre-
enmascaramiento. Los tiempos del pre y post enmascaramiento son diferentes, la zona de
pre-enmascaramiento es aproximadamente 20ms antes de la señal enmascaradora, y la
zona de post-enmascaramiento 160ms después [Hung], como puede verse en la Imagen
2.13.

Imagen 2.13 Umbrales de enmascaramiento temporal [Hung]

28
El pre-enmascarado puede ayudar a enmascarar la aparición de pre-ecos. Si se
considera el caso en el que un periodo de silencio es seguido por un sonido de percusión,
estos sonidos transitorios causan una gran cantidad de errores de cuantización
instantáneos. Estos pre-ecos pueden hacerse audibles, especialmente con tasas de bit
bajas. El efecto de los pre-ecos se puede mitigar gracias al efecto de pre-enmascarado en
el dominio del tiempo si es de corta duración.

Joint Stereo

En realidad el Joint Stereo no es un principio psicoacústico sino una técnica usada


para la compresión de audio estereofónico aprovechándose de la correlación entre los dos
canales de audio y la irrelevancia de la diferencia de fase entre canales [Pan95]

2.3.3 Introducción a la compresión de audio MPEG 12

El algoritmo MPEG/Audio consiste en un algoritmo de compresión de audio con


pérdidas que se aprovecha de principios psicoacústicos de forma que no hayan pérdidas
aparentes para que al oído humano, por tanto es perceptualmente sin perdidas. El estándar,
desarrollado por el subcomité MPEG de ISO/IEC, fue el primer algoritmo de compresión
de audio estandarizado. El estándar es rígido únicamente donde es necesario para asegurar
la interoperabilidad, específica la sintaxis del flujo de bits codificados y define el proceso
de decodificación. Esto deja total libertad en la implementación del codificador
ofreciendo un gran potencial de diversidad.

La codificación MPEG/Audio tiene las siguientes características:

 La frecuencia de muestreo puede ser de 32, 44.1 o 48kHz13


 Soporte para canales de audio. Soporta uno o dos canales de audio en cuatro
posibles modos:
■ Modo monotónico con un único canal de audio.
■ Modo dual-monotónico con dos canales de audio independientes
■ Modo estéreo, con dos canales que comparten bits.
■ Modo Joint Stereo, que aprovecha la correlación entre los canales de audio
y la irrelevancia de la diferencia de fase entre canales
 Tasas de bit predefinidas, el flujo de bits puede utilizar una de las tasas de bit
predefinidas entre los rangos 32 y 224kbps por canal. Además en estándar tiene
un modo de tasa de bits libre para soportar otras tasas de bits diferentes a las
predefinidas.
 Capas de compresión (layers), MPEG ofrece tres capas de compresión
independientes. Esto ofrece un mayor rango de compromiso entre complejidad
de la codificación y la calidad del audio comprimido. Las capas son:
■ Layer 1, la más simple.
■ Layer 2, con una complejidad intermedia y tasas de bit alrededor de
128kbps por canal. Usado para DAB y VideoCD.
■ Layer 3, la más compleja y la que ofrece una mayor calidad de audio, se

12 La explicación de la codificación MP3 se realiza como referencia ya que en este caso se ha utilizado un
circuito integrado para la decodificación MP3.
13 En el estándar MPEG-2 se añadieron las frecuencias 16, 22,05 y 24kHz para tasas de bit bajas, y en el
estándar no oficial MPEG 2.5 se añadieron 8.000, 12.000 y 11.025Hz para tasas aún más bajas.

29
suele usar con tasas de bit de 64kbps por canal.
 Detección de errores, soporta de manera opcional CRC para la detección de
errores.
 Datos complementarios, no utilizados en la decodificación.

2.3.4 Algoritmo de codificación MPEG-1 Layer 3

El algoritmo de codificación sigue la estructura que puede verse en la Imagen


2.14. La entrada del codificador son datos normalmente codificados con PCM y separados
en marcos de 1152 muestras. Cada marco se divide a su vez en dos gránulos de 576
muestras cada uno. Cada uno de ellos se envía al banco de filtros polifásico (o de análisis)
y al bloque de transformada de fourier rápida (FFT).

Imagen 2.14 Estructura de codificación MP3[Lagerstöm01]

Banco de filtros polifásico

El banco de filtros divide la señal de entrada en 32 subbandas de frecuencia del


mismo tamaño, como puede verse en la Imagen 2.15. Los filtros proveen una buena
resolución temporal con una razonable resolución en frecuencia (Imagen 2.16). El igual
tamaño de las subbandas no refleja el sistema auditivo humano dependiente de la
frecuencia. Sin embargo el tamaño de las bandas críticas en función de la frecuencia es un
buen indicador de su comportamiento. Muchos efectos psicoacústicos son constantes con
la escala de frecuencias de una banda crítica [Pan95].

Imagen 2.15 Representación del filtro

30
Imagen 2.16 Anchos de banda del filtro MPEG/Audio vs ancho de las bandas críticas[Pan95]

Transformación discreta del coseno modificada

Después de este proceso las muestras en cada subbanda están aún en el dominio
del tiempo. A través de un transformación discreta del coseno modificada (MDCT), cuya
ecuación puede verse en la Imagen 2.17, las muestras de cada subbanda son mapeadas en
el dominio de la frecuencia que provee una mejor resolución espectral. El uso del
procesado MDCT proporciona las siguientes mejoras:

 Reducción del aliasing


 Cuantización no uniforme
 Bandas factor de escala, se aproxima a los tamaños de las bandas críticas.
 Codificación de entropía de los valores de los datos

Imagen 2.17 Ecuación de la transformación MDCT [Hung]

Bloque FFT

Al mismo tiempo el bloque FFT transforma los gránulos de 567 muestras al


dominio de la frecuencia mediante una trasformada de Fourier.

Umbrales de enmascaramiento

Las muestras en el dominio del tiempo procedentes del bloque FFT pasan a través
de un modelo psicoacústico para determinar la tasa de energía de cada umbral de
enmascaramiento para cada subbanda. Esto es utilizado por el cuantizador para determinar
cuantos bits son necesarios para codificar cada muestra. También se utilizan para
determinar si se necesitan cambios en las ventanas del bloque MDCT.

31
Escalado y cuantizado

Los umbrales de enmascaramiento se usan para determinar iterativamente cuantos


bits son necesarios en cada banda crítica para codificar las muestras y por tanto el ruido de
cuantización no sea audible. Generalmente el codificador tiene que satisfacer unos
requerimientos de tasa de bits fijados [Lagerstöm01].

Codificación Huffman

En este bloque se realiza una codificación de entropía de las líneas de frecuencia


cuantizadas usando el algoritmo de codificación Huffman basado en 32 tablas Huffman.
Esta codificación realiza una compresión sin pérdidas y por tanto reduce la cantidad de
datos sin pérdida de calidad [Hung].

Formateo del flujo de bits

El último bloque del proceso de codificación se encarga de producir un flujo de


bits que cumpla con MPEG-1 Layer 3. El flujo de bits está particionado en marcos, cada
uno representa 1152 muestras de audio. Cada marco esta compuesto por las líneas de
frecuencia codificadas con Huffman, información secundaria y una cabecera del marco
(Imagen 2.18).

Imagen 2.18 Formato del marco MP3

 Cabecera: Tiene un tamaño de 4 bytes y contiene información de la capa, la tasa


de bits, frecuencia de muestreo y modo de estéreo. También contiene 12 bits de
sincronismo usado para encontrar un marco dentro de un flujo de bits.
 Side information o información secundaria: Contiene información necesaria
para la decodificación de los datos principales, como la selección de la tabla
Huffman, factor de escalado, etc. Esta sección tiene un tamaño de 17 bytes con
canal simple y 32 bytes en modo de doble canal.
 Datos principales: Esta sección contiene los valores de factor escalado
codificados y las líneas de frecuencia codificadas con Huffman. El tamaño
depende de la tasa de bits.
 Datos auxiliares

Los marcos pueden no ser totalmente independientes entre sí debido al uso de bit
reservoir que es un buffer o deposito común de bits de los que se puede disponer para
codificación extra (Imagen 2.19). Esto hace que los marcos no sean totalmente
independientes unos de otros, en el peor de los casos se pueden necesitar 9 marcos para
empezar la decodificación. El codificador puede donar bits al bit reservoir cuando
necesita menos bits que la media de número de bits para codificar el marco. A su vez
cuando el codificador necesita más número de bits puede tomarlos del bit reservoir.

32
Imagen 2.19 Ejemplo de bit reservoir.

2.3.5 Algoritmo de decodificación MPEG-1 Layer 3

El decodificador está compuesto por tres partes principales: decodificación del


flujo de bits, cuantización inversa y mapeo del tiempo a la frecuencia (Imagen 2.20). El
flujo de bits de entrada pasa a través del primer bloque para sincronizarse, extraer las
líneas de frecuencia cuantizadas y la información de cada marco. El bloque de
cuantización inversa decuantiza las líneas de frecuencia procedentes del bloque anterior.
Finalmente el último bloque es un conjunto de operaciones inversas del MDCT y el banco
de filtros de polifase del codificador. La salida es una señal en formato PCM [Hung].

Imagen 2.20 Diagrama de bloques del decodificador MPEG-1 Layer 3

2.3.5.1 Decodificación del flujo de bits

Este bloque de decodificación realiza la sincronización y extracción de las líneas


de frecuencia cuantizadas y de otra información de cada marco. Es necesaria la
sincronización al inicio del marco y donde se encuentran los datos. El diagrama de este
bloque puede verse en la Imagen 2.21.

Imagen 2.21 Diagrama de bloques de la decodificación del flujo de datos

33
Sincronización

El propósito de este bloque es recibir el flujo de datos de entrada, identificar el


contenido y pasar la información a los siguientes bloques del decodificador.

Decodificación Huffman

En este bloque se realiza la decodificación de los bits de código Huffman. Debido


a que el código Huffman es de longitud variable, una única palabra del código en medio
del los bits del código no puede ser identificada sin empezar a decodificar desde un punto
en el código de bits conocido por ser el principio de la palabra del código.

Información para la decodificación Huffman

Este bloque sirve para iniciar todos los parámetros necesarios en el bloque de
decodificación Huffman para que la decodificación pueda efectuarse correctamente. La
primera tarea a realizar es obtener todas las características de los bits del código Huffman
de la información secundaria.

Decodificación del factor de escalado

Decodifica los factores de escalado, la entrada del bloque es la información de los


factores de escalado y la salida se utiliza en el bloque de cuantización inversa.

2.3.5.2 Cuantización inversa.

Este bloque restablece los datos perceptualmente idénticos de las líneas de


frecuencia generados por el bloque MDCT del codificador. El desescalado se basa en las
líneas de frecuencia cuantizadas y escaladas procedentes de la codificación Huffman y del
factor de escalado reconstruido en el bloque de decodificación. La ecuación de
desescalado puede verse en la Imagen 2.22.

Imagen 2.22 Ecuación del calculo de desescalado de las líneas de frecuencia

2.3.5.3 Mapeo de la frecuencia al tiempo.

Este bloque contiene varios subbloques (Imagen 2.23) para la transformación de


las líneas de frecuencia decuantizada en una señal de audio PCM.

34
Imagen 2.23 Diagrama de bloques del Mapeo de la frecuencia al tiempo

Reducción del aliasing

Dentro del bloque de MDCT del codificador se aplican reducción del aliasing.
Para obtener una reconstrucción correcta los artefactos del aliasing deben ser añadidos de
nuevo en el proceso de decodificación

MDCT inverso

A las líneas de frecuencia procedentes del bloque de reducción de aliasing se le


aplica una inversión del MDCT. La expresión analítica puede verse en la Imagen 2.24.

Imagen 2.24 Expresión analítica del MDCT inverso.

Inversión de frecuencia

Síntesis del banco de filtro de polifase

Cada vez que a las 32 muestras de cada 32 subbandas se le aplica la síntesis del
banco de filtro de polifase se calculan 32 muestras de audio consecutivas.

35
2.4 Tarjetas de memoria no volátil
Las tarjetas de memoria no volátil se basan en memoria flash, un tipo de memoria
muy utilizada en los últimos años para el almacenamiento de datos en dispositivos
portátiles como reproductores de música, cámaras de fotos y vídeo, teléfonos móviles,
PDAs, etc. Lo que ha hecho avanzar mucho la tecnología haciendo memorias cada vez
más rápidas y baratas y de tamaños cada vez más pequeños.

2.4.1 Memorias Flash

La memoria flash es un tipo de memoria EEPROM (memoria de solo lectura


programable y borrable eléctricamente) que permiten el borrado o la escritura de varias
posiciones de memoria en una única operación. Son básicamente memorias de estado
sólido que permiten el almacenamiento de información en ausencia de corriente
(memorias no volátiles). En las primeras versiones era necesario borrar todo el chip, las
posteriores versiones permiten el borrado individual de bloques más pequeños.

La principal ventaja de estas memorias frente a otros sistemas de almacenamiento


para dispositivos portátiles es su gran capacidad en un espacio muy reducido y muy poco
peso. Por ejemplo, las tarjetas MMC (multimedia card) permiten almacenar, en el tamaño
de un sello, hasta 4GB de información, y con un peso que no alcanza los 2g. Otra
característica de este tipo de memorias es su bajo consumo y alta velocidad de datos. Todo
esto hace que no solo se utilice este tipo de memorias para tarjetas, sino que se empiezan a
construir discos duros con este tipo de memoria, consiguiendo que sean más resistentes a
condiciones ambientales duras o a golpes que los hacen ideales para algunos tipos de
sistemas.

Existen dos tipos de tecnologías de memorias Flash, según se basen en puertas


NOR o NAND, ambas tienen características diferentes:

 Las memorias NOR poseen una alta velocidad de lectura y acceso aleatorio, son
capaces de leer y escribir datos en una posición específica de memoria sin
necesidad de acceder a la memoria de forma secuencial, pueden obtener un
único byte de la memoria.
 Las memorias NAND también pueden leer y escribir a alta velocidad pero su
acceso es secuencial, accediendo a los datos en pequeños bloques o páginas.
Estas memorias pueden acceder a una única página, pero no a un único byte
como las NOR.

Las tarjetas de memoria flash que se comercializan hoy en día utilizan NAND
flash, debido a que esta memoria es más rápida en operaciones de borrado y escritura, y
posee más densidad y menor coste, puede verse la evolución de esta tecnología en la
Imagen 2.24 e Imagen 2.25. En la Tabla 2.1 se comparan las tecnologías NOR y NAND.

36
Característica NOR NAND
Capacidad Hasta 256 MB Hasta 16GB
XIP* Si No
Velocidad Borrados muy lentos Borrado rápido
Escrituras lentas Escritura rápida
Lecturas rápidas Lectura rápida
Fiabilidad Estándar: Baja:
Tiene problemas de inversión Requiere algoritmos de detección y
de bits, menos de 10% que las corrección de errores debido a la
NAND inversión de bits.
Requiere control de sectores erróneos
Ciclos de borrado 10.000 - 100.000 100.000 – 1.000.000
Tiempo de vida Menos de un 10% que las 10 veces más que las NOR
NAND
Método de acceso Aleatorio Secuencial
Uso − Almacenamiento de − Almacenamiento de datos
código
− Almacenamiento de datos
(baja capacidad)
Precio Alto Bajo
Tabla 2.1 Diferencias entre las tecnologías NOR y NAND.
*eXecute In Place, habilidad de una memoria de permitir la ejecución del código que almacena.

Imagen 2.24 Evolución prevista de la memoria NAND flash según la capacidad y tipo de aplicación
[Samsung].

37
Imagen 2.25 Evolución prevista de la memoria NAND flashsegún la capacidad, el tamaño y la velocidad
[Samsung]

2.4.2 Tipos de tarjetas

Existen varios tipos de tarjetas de memoria, cada una la ha desarrollado una


empresa o un grupo de empresas. En este apartado se hará un pequeño resumen de las
características de las más importantes.

Tarjeta CompactFlash

Fue inicialmente especificado y producido por SanDisk Corp. en 1994, su


formato físico es utilizado en una gran variedad de dispositivos. Existen dos subdivisiones
de CF, el tipo I y el tipo II. Ofrecen compatibilidad PCMCIA-ATA y es funcionalmente
compatible con TrueIDE con ATA/ATAPI-4.

Imagen 2.26 Tarjeta CompactFlash

38
Sus características principales son:

 Conector similar al PCMCIA, pero con 50 pines.


 Tasas de transferencia de hasta 66 MB/s
 Soporta dos tensiones de alimentación, 3.3V y 5V
 Almacenamiento de hasta 16GB

Son tarjetas que actualmente están siendo muy utilizadas, tanto en computadores
portátiles como en cámaras de vídeo, por lo que su uso está muy extendido y el precio es
relativamente bajo.

Tarjeta SmartMedia

La tarjeta SmartMedia (Imagen 2.27) lanzada en el verano de 1995 creada por


Toshiba, originalmente llamada Solid State Floppy Disk Card (SSFDC). Se utilizan en
dispositivos de portátiles, sobre todo en cámaras de fotos, pero Actualmente su uso está
poco extendido. Fue respaldada por Fuji y Olympus, pero ambas la han sustituido, Fuji se
ha pasado a xD y Olympus a Secure Digital.

Imagen 2.27 Tarjeta SmartMedia

Sus características son:

 Tamaño reducido (45.0×37.0×0.76mm)


 Capacidad limitada (hasta 256MB)
 Terminales planos con 22 pins.
 Interfaz entrada/salida de 8 bits
 Dos versiones, a 3.3V y 5V
 Tasa de transferencia de 2MB/s

Aunque este tipo de tarjetas aún se siguen fabricando por Toshiba y Samsung
están en claro retroceso y es previsible que en poco tiempo desaparezcan.

Tarjeta Memory Stick

La tarjeta Memory Stick (Imagen 2.28) fue lanzada por Sony en octubre de 1998,
describe una familia de tarjetas:

39
 Original Memory Stick
■ Memory Stick
■ Memory Stick Select
■ Memory Stick MagicGate
■ Memory Stick Select MagicGate
 Memory Stick Pro
■ Memory Stick Pro
■ Memory Stick Pro High-Speed
 Memory Stick Duo
■ Memory Stick Duo
■ Memory Stick Duo MagicGate
■ Memory Stick Duo Adapter
 Memory Stick Pro Duo
■ Memory Stick Pro Duo
■ Memory Stick Pro Duo High Speed
 Memory Stick Micro
 Memory Stick Pro-HG

Imagen 2.28 Tarjeta Memory Stick Pro Duo MagicGate

Se utilizan en todo tipo de dispositivos portátiles, con capacidades de hasta 8GB.


Se trata de un formato propietario, por lo que Sony monopoliza este tipo de productos.
Cada tipo de memoria posee unas características, según las necesidades del dispositivo,
como pueden ser mayor capacidad o mayor velocidad de transferencia (en Memory Stick
Pro hasta 20 MB/s). Las tarjetas MagicGate poseen además un sistema de encriptación,
pensado para el mundo discográfico, de forma que solo puedan ser leídas por dispositivos
autorizados. En cuanto a su interfaz, Memory Stick usa un conector de tan solo 10 pines.

Debido a ser una tarjeta usada casi exclusivamente por Sony, y la necesidad de
cumplir con una licencia hace complicado el diseño de dispositivos que utilicen este tipo
de tarjetas.

Tarjeta xD-Picture

El formato xD-Picture (Imagen 2.29) fue introducido en Julio de 2002 por


Olympus y Fujifilm para ser usadas en sus cámaras fotográficas digitales. Está pensada
para que sea utilizada exclusivamente en cámaras digitales, y hasta el momento se usa
exclusivamente en cámaras Olympus y Fuji. Existen además, nuevos modelos de tarjeta,
llamados ‘Tipo M’ y ‘Tipo H’ que no son compatibles con el formato anterior y presentan
una capacidad de hasta 8GB.

40
Imagen 2.29 Tarjeta xD-Picture

Las características de esta tarjeta son:

 Reducido tamaño (20x25x1.7mm)


 Tasas de transferencia de hasta 5MB/s
 Capacidad de hasta 8GB en xD-Picture Tipo M
 Uso exclusivo en cámaras digitales

Tarjetas Multimedia Card (MMC)

Desarrolladas por SanDisk y Siemens AG en 1995, las tarjetas MMC (Imagen


2.30) han sido utilizadas en una gran variedad de dispositivos portátiles, destacan por su
reducido tamaño (24 x 32x 1.5mm). Una característica muy importante es su
compatibilidad con las tarjetas Secure Digital, de hecho estas últimas aparecieron a partir
de las especificaciones de la MMC.

Imagen 2.30 Tarjeta Multimedia Card

Las características principales de estas memorias son:

 Reducido tamaño (24 x 32x 1.5mm)


 Tasas de transferencia de hasta 52MB/s (Especificaciones v4)
 Capacidad de hasta 8GB
 Diferentes modos de bus: 1, 4 y 8 bits
 Rango de voltaje de 1.65V a 3.6V (según versiones)
 Posibilidad de protección por contraseña
 Uso de protocolo MMC y SPI (para compatibilidad con SD)

Existen gran cantidad de variantes de la multimedia card, como secureMMC, RS-


MMC, MMCmicro, MMCmobile y MMCplus. Dependientes todas de Multimedia Card
Association. Además, a partir de ella se desarrolló la tarjeta secure digital, con sus
correspondientes variantes. El número de pines va desde los 7 de la multimedia card
original hasta los 14 de la tarjeta MMCplus.

41
Tarjeta Secure Digial

En 1999 Matsushita Electric, SanDisk y Toshiba anunciaron un acuerdo de


colaboración para desarrollar tarjetas de memoria con un sistema de protección del
copyright para la industria discográfica. En 2000 anunciaron el nuevo estándar de tarjeta
de memoria que partía del estándar de la ya existente MMC y era compatible con esta.
Secure Digital está cubierto por una gran cantidad de patentes y marcas registradas y sólo
se puede licenciar a través de la Secure Digital Card Association, es necesario licencia
para el desarrollo de tarjetas y del host (excluyendo la comunicación SPI compatible con
MMC). Existen tres versiones publicadas del estándar de SD y varios formatos que han
aparecido a partir de ella: miniSD y microSD también llamada Transflash. En la Imagen
2.31 puede verse una comparación de los distintos formatos.

Imagen 2.31 Tarjetas SD, MiniSD y MicroSD

Las características principales de estas memorias son:

 Tamaño compatible con MMC (son solo algo más gruesas)


 Tasas de transferencia de hasta 200 Mbit/s
 Capacidad con especificaciones SDHC 8GB (hasta el momento)
 Diferentes modos de bus: 1 y 4 bits
 Rango de voltaje de 1.65V a 3.6V (según versiones)
 Protección de contenidos DRM (digital rights management).
 Uso de protocolo SD y SPI (para compatibilidad con MMC)

2.5 El interfaz de comunicación USB


Existen varios interfaces de comunicación usados en la actualidad para la
comunicación entre un periférico y un ordenador. Los interfaces de comunicación más
comunes en un ordenador son:

 Puerto serie (RS-232)


 Puerto paralelo (Centronics)
 USB
 Firewire
 SCSI
 Bluetooth

42
En capítulos posteriores de discutirá el por qué de la elección del interfaz USB,
podemos resumir que la elección se debe a que todos los ordenadores actuales poseen
dicho interfaz, a la necesidad de velocidad en las comunicaciones y por ser el más
utilizado por los periféricos actuales.

A continuación se realiza una exposición de las características y una pequeña


introducción al funcionamiento del interfaz USB.

2.5.1 Orígenes del USB

El USB o Universal Serial Bus (bus serie universal) es un estándar de interfaz de


comunicaciones entre dispositivos. Fue desarrollado en 1996 por IBM, Intel, Northern
Telecom, Compaq, Microsoft, Digital Equipment Corporation y NEC. La versión 1.1 salió
en septiembre de 1998 añadiendo un nuevo tipo de transferencia, interrupt Out. Las
especificaciones del USB 2.0 fueron liberadas en abril de 2000 y estandarizadas por el
USB-IF14 en 2001. La principal característica de USB 2.0 es que añade la opción de una
nueva velocidad de transferencia, la High Speed, manteniendo la compatibilidad con las
versiones anteriores.

En la actualidad la última versión es el USB 2.0 con diversas revisiones, como el


soporte de USB On-the-Go que permite que un dispositivo pueda actuar como maestro o
como esclavo, y nuevos conectores, el último es el MicroUSB (Imagen 2.32) cuyas
especificaciones fueron liberadas en abril de 2007.

Imagen 2.32 Terminales MicroUSB A y MicroUSB B

2.5.2 Características del USB

Los objetivos que se buscaban durante el diseño del USB fueron la facilidad de
uso, transferencias de datos rápidas y fiables, flexibilidad, bajo coste y ahorro de energía.
El resultado de dicho desarrollo resultó en un interfaz con las siguientes características:

 Un interfaz para múltiples dispositivos, el interfaz USB es muy versátil y se


puede utilizar para gran variedad de dispositivos con características diferentes.
 Configuración automática, cuando un periférico se conecta al ordenador

14 USB Implementers Forum, es una organización sin ánimo de lucro formada por varias empresas que
promueve el uso del USB.

43
mediante USB el sistema operativo lo detecta y carga los drivers apropiados.
 Fácil conexión, no es necesario abrir el ordenador para conectar un periférico,
las conexiones son externas.
 Cables sencillos, no se puede conectar mal el conector USB y su cable puede
ser de hasta 5 metros de largo. Si se utilizan concentradores puede haber hasta
30 metros entre el periférico y el ordenador.
 Conexiones en caliente, no es necesario apagar el equipo para conectar el
periférico.
 Sin ajustes del usuario, el usuario no necesita configurar puertos ni
interrupciones (IRQ)
 No se necesitan fuentes de energía, el interfaz proporciona una alimentación de
5V y corriente de hasta 500ma.

Además de estas características de facilidad de uso, el USB posee otras


prestaciones que lo hacen ser el más utilizado en los periféricos actuales. En la Tabla 2.2
se comparan los interfaces más populares.

Velocidad

Permite una transmisión de datos de alta velocidad, en concreto soporta tres


velocidades: low speed a 1,5 Mb/s, full speed a 12 Mb/s y high speed a 480 Mb/s. No
obstante el bus debe transmitir más datos además de los usados por el periférico como
datos de control, estado y chequeo de errores. Esto hace que el caudal efectivo para la
transmisión de datos sea algo menor, en concreto la velocidad máxima teórica sería
aproximadamente: 424 Mb/s para high speed, 9,6 Mb/s para full speed y 6,4 Kb/s para
low speed [Axelson05].

Fiabilidad

La fiabilidad se debe a dos elementos, el hardware y los protocolos de


transmisión. Los controladores, receptores y cables están diseñados para eliminar la
mayor cantidad de ruido que causa errores en los datos. Además, el protocolo de
transmisiones puede detectar posibles errores en los datos y notificarlo para su
retransmisión. Esto se hace a nivel de hardware y no requiere programación ni
intervención del usuario.

Bajo coste

A pesar de una mayor complejidad del USB que la de los interfaces anteriores,
tanto los componentes como los cables son baratos. Un dispositivo con interfaz USB
cuesta casi lo mismo o menos que uno equivalente con un interfaz más antiguo.

Bajo consumo

El código y circuitos de ahorro de energía pueden apagar automáticamente un


periférico USB cuando no se está utilizando.

44
Comunicaciones sin cables

El USB fue originalmente un interfaz cableado, pero existen diversas opciones


actuales para que dispositivos sin cables se puedan comunicar con el ordenador mediante
USB.

Interfaz Formato Nº de Distancia Velocidad Uso común


dispositivos (Máximo, (Máxima, bps)
(Máximos) metros)
USB Serie, 127 5 (hasta 29 m) 1.5M, 12M, 480M Ratón, teclado, HD,
asíncrona audio, impresora,
otros periféricos
Ethernet Serie 1024 488 m 10G Red de
comunicaciones
IEEE-1394b Serie 64 91 m 3.2G Vídeo y sistemas de
(FireWire 800) almacenamiento
IEEE-488 Paralelo 15 18 m 8M Instrumentación
(GPIB)
IrDA Serie 2 2m 16M Impresoras y PDAs
infrarrojos,
asíncrona
I2C Serie, síncrona 40 5.5 m 3.4M Comunicación de
microcontroladores
Microwire Serie, síncrona 8 3m 2M Comunicación de
microcontroladores
MIDI Bucle de 2 15 m 31.5k Música
corriente
Puerto Paralelo 2 (8 con daisy- 3-9 m 8M Impresoras,
paralelo chain) escáneres, unidades
de disco.
RS-232 Serie, 2 15-30 m 20k - 115k Módem, ratón e
asíncrona instrumentación
RS-485 Serie, 32 1220 m 10M Adquisición de
asíncrona datos y control de
sistemas
SPI Serie, sincrona 8 3m 2.1M Comunicación de
microcontroladores.
Tabla 2.2 Comparación de los interfaces más populares [Axelson05]

45
2.5.3 Topología

La topología del bus es una estrella con niveles, en el centro de cada estrella hay
un concentrador y cada punto de la estrella es un dispositivo que se conecta a un puerto en
el concentrador, como se observa en la Imagen 2.33. El número de puntos en cada estrella
puede variar, un concentrador tiene normalmente 2, 4 o 7 puertos. El USB permite hasta 6
niveles, y en el nivel 0 (Raíz o Root) se encuentra el Controlador USB que controla todo
el tráfico de información en el bus. Solo un dispositivo puede comunicarse con el
controlador del host a la vez, por lo que se suelen tener varios controladores de host para
incrementar el ancho de banda disponible.

Imagen 2.33 Topología USB [Axelson05]

2.5.5 Nivel físico

A nivel físico, el USB utiliza un cable de 4 conductores para transmitir una señal
diferencial (D+ y D-) y alimentación (VBus = 5V y GND) por medio de conexiones punto
a punto. Los dispositivos low speed van obligatoriamente equipados con un cable de
longitud adecuada (hasta unos 3 m, dependiendo de sus características eléctricas) (Imagen
2.34), mientras que los full speed pueden ir equipados con un cable o utilizar cables
independientes de hasta 5 m (también dependiendo de sus características eléctricas)
(Imagen 2.35).

46
Imagen 2.34 Cable para low speed[Anderson01] Imagen 2.35 Cable para full y high
speed[Anderson01]

La comunicación es bidireccional y utiliza codificación autoreloj NRZI (la línea


cambia de nivel si se transmite un 0 y no cambia si transmite un 1) con "bit stuffing"
(inserción de un cero tras la transmisión de 6 unos, para asegurar transiciones en la línea).
Los dispositivos disponen de un transmisor diferencial, receptores diferencial y I/O y
resistencias de terminación con los que pueden transmitir y detectar varios estados
eléctricos distintos en la línea [Fujitsu00]:

 Transmisión/Recepción diferencial de bits: Estados DIFF0 y DIFF1,


denominados también estados J y K.
 SE0 (Single-Ended 0): Ambas señales D+ y D- a 0V. Se utiliza para detectar la
conexión/desconexión de dispositivos, para indicar el EOP (fin de paquete) y
para generar reset.
 IDLE: reposo o línea en alta impedancia, necesario para permitir transferencias
semi-dúplex, detectar la conexión y desconexión de dispositivos y discriminar
entre dispositivos FS y LS.
■ El SOP (principio de paquete) se indica mediante una transición IDLE a K.
■ El EOP (fin de paquete) se indica mediante una secuencia SE0 (2 bits) + J
(1 bit) + IDLE.

2.5.6 Protocolo

El protocolo de nivel físico se basa en tokens (testigos). El controlador USB


transmite tokens que incluyen la dirección del dispositivo destino, y el dispositivo que
detecta su dirección en el token responde y lleva a cabo la transferencia de datos con el
controlador. De esta manera, el Controlador USB maneja la parte más compleja del
protocolo, generando los tokens de transferencias de datos a 480 Mbps, 12 Mbps o a 1,5
Mbps, y controlando la conexión lógica entre el sistema y las funciones internas de cada
dispositivo. El controlador USB también maneja el consumo en el bus a través de las
funciones Suspender/Continuar, por medio de las cuales controla los modos
Reposo/Activo de los dispositivos. Esta arquitectura permite el diseño de dispositivos
extremadamente simples y de bajo coste.

USB divide el tiempo en espacios de 1 ms denominados marcos, durante las


cuales se llevan a cabo las comunicaciones a través de Transacciones, las cuales se
componen a su vez de Paquetes. Existen tres tipos de paquetes: Token, Dato y Validación
(Handshake):

47
 El paquete Token contiene los campos:
■ PID (identifica el tipo de paquete). Todos los PIDs van protegidos por bits
redundantes,
■ Dirección del elemento destino (7 bits de dispositivo + 4 bits de elemento
interno al dispositivo), y
■ CRC.
 Cada paquete del tipo Dato se compone de los campos: PID, Datos, y CRC.
 Al final de la transacción se envía un paquete de Validación indicando que no
ha habido errores.

Adicionalmente, el Controlador USB indica el principio de cada Trama y la


transmisión hacia dispositivos low speed mediante tokens especiales [Fujitsu00].

2.5.7 Tipos de transferencias en USB 2.0

El interfaz USB fue diseñado para ser usado por una gran cantidad de periféricos
distintos con distintos requerimientos en cuanto a tasa de transferencia, tiempo de
respuesta y corrección de errores. Por tanto se han definido cuatro tipos de transferencia
(Tabla 2.3) para dar servicio a las diferentes necesidades que puedan tener los periféricos.
Los tipos de transferencia son:

Control

Las transferencias de control son las únicas de tienen funciones definidas en las
especificaciones USB. Las transferencias de control permiten al host15 leer información
sobre el dispositivo, fijar su dirección y seleccionar otras configuraciones y opciones.
Todos los dispositivos USB deben soportar las transferencias de control.

Masiva

Las transferencias masivas se utilizan cuando la tasa de transferencia no es


crucial, como enviar un fichero a la impresora, recibir datos de un escaner o acceder a
ficheros en un disco. Para este tipo de transferencias tener una rápida tasa de transferencia
es bueno, pero se puede esperar si es necesario en el caso de que el bus esté ocupado. Si el
bus está libre las transferencias masivas son muy rápidas. Solo los dispositivos full y high
speed pueden realizar este tipo de transferencias

Interrupción

Las transferencias de interrupción son para aquellos dispositivos que necesitan la


atención del host periódicamente. Este tipo de transferencia solo están en los dispositivos
low speed. Se usa para teclados, ratones, etc.

15 Dispositivo maestro que inicia la comunicación, generalmente el ordenador.

48
Isócrona

Las transferencias isócronas tienen garantizado el tiempo de entrega de los datos


pero no la corrección de errores. Se utiliza para la transmisión de vídeo y audio en tiempo
real. Esta transferencia es la única que no soporta retransmisión automática de los datos
recibidos con errores ya que errores ocasionales son aceptables. Solo los dispositivos full
speed y high speed tienen este tipo de transferencia.

Tipo de transferencia Control Masiva Interrupción Isócrona


Uso común Identificación y Impresoras, Ratones, Flujo de audio y
configuración escaneres y teclados vídeo
discos
Necesario Si No No No
Permite baja velocidad Si No Si No
Bytes/milisegundos de datos 15.872 53.248 24.576 24.576
por transferencia. Máximo
posible por tubería (high
speed)*
Bytes/milisegundos de datos 832 2116 64 1023
por transferencia. Máximo
posible por tubería (low speed)*
Bytes/milisegundos de datos 24 No permitida 0,8 No permitida
por transferencia. Máximo
posible por tubería (low speed)*
Dirección del flujo de datos Entrada y salida Entrada o salida Entrada o salida Entrada o salida
(USB 1.0 solo
entrada)
Ancho de banda reservado 10% en low/full Ninguno 90% en low/full speed, 80% en
para todas las transferencias speed, 20% en high speed (combinando isócrona e
del tipo high speed interrupción)
Corrección de errores Si Si Si No
Mensajes o flujos de datos Mensaje Flujo Flujo Flujo
Tiempo de entrega garantizado No No No Si
Latencia garantizada (máximo No No Si Si
tiempo entre transferencias)
*Asume que las transferencias utilizan el tamaño máximo de paquete.
Tabla 2.3 Comparación de los tipos de transferencia [Axelson05]

49
2.6 Microcontroladores.

2.6.1 Definición y características

Un controlador el dispositivo que se emplea para gobernar de uno o varios


procesos. Aunque el concepto de controlador ha permanecido invariable a través del
tiempo, su implementación física ha variado frecuentemente. Inicialmente los
controladores se construían exclusivamente con componentes de lógica discreta,
posteriormente se emplearon los microprocesadores, que se rodeaban con chips de
memoria y unidades de E/S sobre una tarjeta de circuito impreso. Actualmente todos los
elementos del controlador se han podido incluir en un circuito integrado que recibe el
nombre de microcontrolador.

El microcontrolador es un circuito integrado que incorpora la mayor parte de los


elementos que configuran un controlador. Aunque sus prestaciones son limitadas, además
de dicha integración, su característica principal es su alto nivel de especialización. Un
microcontrolador dispone normalmente de los siguientes componentes:

 Procesador o CPU (Unidad Central de Proceso).


 Memoria RAM para Contener los datos.
 Memoria ROM/PROM/EPROM para almacenar el programa.
 Diversos módulos para el control de periféricos :
■ Temporizadores
■ Interfaces UART, SPI, I2C, USB, etc.
■ Conversores Analógico/Digital y Digital/Analógico
■ Watchdog
■ Comparadores analógicos
■ Modulador de anchura de pulsos PWM
■ Puertas de E/S digitales de propósito general
 Generador de impulsos de reloj que sincronizan el funcionamiento de todo el
sistema, aunque muchos utilizan un reloj externo.

Las principales ventajas que se pueden encontrar con el uso de


microcontroladores son:

 Gestión eficiente de procesos.


 Aumento de fiabilidad.
 Reducción del tamaño, consumo y coste.
 Mayor flexibilidad.

Existe una gran diversidad de microcontroladores, la clasificación más importante


que se puede realizar es según sean de 4, 8, 16 o 32 bits. Los microcontroladores más
utilizados hoy en día son los de 8 bits ya que son apropiados para la mayoría de
aplicaciones. No obstante los microcontroladores de 16 y 32 bits van ganando terreno a
medida que las aplicaciones se van haciendo más complejas.

50
2.6.2 Selección del microcontrolador

A la hora de escoger el microcontrolador a emplear en un diseño concreto hay que


tener en cuenta multitud de factores, como la documentación y herramientas de desarrollo
disponibles y su precio, la cantidad de fabricantes que lo producen y por supuesto las
características del microcontrolador (tipo de memoria de programa, número de
temporizadores, interrupciones, etc.)

Las características principales a tener en cuenta en la elección de un


microcontrolador son:

 Procesamiento de datos: puede ser necesario que el microcontrolador realice


cálculos críticos en un tiempo limitado. En ese caso debemos asegurarnos de
seleccionar un dispositivo suficientemente rápido para ello. Por otro lado, habrá
que tener en cuenta la precisión de los datos a manejar: si no es suficiente con
un microcontrolador de 8 bits, puede ser necesario acudir a microcontroladores
de 16 ó 32 bits.
 Entrada Salida: Realizar un análisis de las líneas requeridas de entrada/salida.
 Consumo: muchas aplicaciones utilizan baterías y un consumo bajo es un factor
muy importante.
 Memoria: debemos realizar una estimación de la cantidad de memoria, tanto de
RAM como ROM, necesaria para nuestra aplicación.
 Ancho de palabra: se debe seleccionar el microcontrolador de menor ancho de
palabra que satisfaga los requerimientos de la aplicación. Usar un
microcontrolador de 4 bits supondrá una reducción en los costes importante,
mientras que uno de 8 bits puede ser el más adecuado si el ancho de los datos es
de un byte. Los microcontroladores de 16 y 32 bits, debido a su elevado coste,
deben reservarse para aplicaciones que requieran sus altas prestaciones.
 Diseño de la placa: la selección de un microcontrolador concreto condicionará
el diseño de la placa de circuitos. Debe tenerse en cuenta que quizá usar un
microcontrolador barato encarezca el resto de componentes del diseño.

2.6.3 Aplicaciones

Cada vez existen más productos que incorporan un microcontrolador con el fin de
aumentar sustancialmente sus prestaciones, reducir su tamaño y coste, mejorar su
fiabilidad y disminuir el consumo. Los microcontroladores están siendo empleados en
multitud de sistemas presentes en nuestra vida diaria, como pueden ser juguetes, hornos
microondas, frigoríficos, televisores, ordenadores, impresoras, módems, el sistema de
arranque de nuestro coche, etc. Y otras aplicaciones algo menos comunes como
instrumentación electrónica, control de sistemas en una nave espacial, etc. Una aplicación
típica podría emplear varios microcontroladores para controlar pequeñas partes del
sistema. Estos pequeños controladores podrían comunicarse entre ellos y con un
procesador central, probablemente más potente, para compartir la información y coordinar
sus acciones [Aguayo04].

51
3. Diseño y desarrollo del hardware

3.1 Introducción
Una de las partes más importantes en la creación de un periférico es el diseño del
hardware ya que condiciona el desarrollo del firmware, las características finales del
dispositivo y su coste. Primero se va ha realizar una selección de componentes y de las
herramientas utilizadas para el diseño, la creación y el testeo del hardware. Una vez
seleccionados los componentes principales se realiza una exposición del diseño del
dispositivo dividido en módulos más simples. Al final se explican los problemas surgidos
durante la implementación del dispositivo y las modificaciones realizadas al diseño final.

3.2 Selección de componentes


Como se ha dicho una de las partes más importantes en la creación de un
periférico es el diseño del hardware, y en este diseño la primera tarea es la selección de
unos componentes adecuados. En esta selección de componentes se van a tener diversos
factores en cuenta:

 Cumplir los requisitos para la realización de la aplicación que se quiere diseñar


es el primer y más importante factor a tener en cuenta.
 Simplicidad, una vez seleccionados aquellos elementos componentes que
cumplan los requisitos se han de seleccionar aquellos que posean una mayor
simplicidad, ya que complejidad extra no aporta nada. En cuanto a la
simplicidad los elementos que se evalúan son:
■ Protocolos de comunicación simples.
■ Mínimo número de componentes, tanto de circuitos integrados como de
elementos pasivos.
■ Encapsulados de fácil soldadura, ya que la soldadura se realizará a mano.
 Fáciles de conseguir y económicos, se descartarán aquellos componentes que
sean de muy difícil obtención.

Lo primero por tanto será recordar los requisitos del reproductor y ver como
afectan al diseño. Debe ser un reproductor alimentado por pilas, capaz de reproducir MP3
y con conexión al ordenador suficientemente rápida como para que pueda reproducir un
fichero enviado en tiempo real (en nuestro caso hemos elegido el USB que además
permite la carga de pilas), debe almacenar los ficheros en un tarjeta de memoria y mostrar
los datos en una pantalla. Por tanto el dispositivo se compondrá de:

 Un microcontrolador para gobernarlo.


 Un integrado que se encargue de decodificar el MP3.
 Con conversor D/A y, si es necesario, un pequeño amplificador para la salida de
audio.
 Un integrado que se encargue de la comunicación USB si el microcontrolador
no incorpora este interfaz.
 Una tarjeta de memoria, donde se almacenarán los ficheros.

52
 Una pantalla LCD para mostrar los datos.
 Un regulador de tensión para alimentar al circuito a partir de las pilas.

3.2.1 El microcontrolador

Lo primero que se ha de realizar es seleccionar entre un microcontrolador de 8,


16 o 32 bits (los de 4 parecen claramente insuficientes). Como debemos seleccionar aquel
más simple que cumpla con los requisitos se decide usar uno de 8 bits, ya que tienen unas
prestaciones suficientes para implementar el control del reproductor. El microcontrolador
será el responsable de leer los ficheros de la tarjeta de memoria, enviar el flujo de datos al
chip decodificador de MP3, de la comunicación con el ordenador, de controlar la botonera
y de refrescar los datos en la pantalla LCD.

Los principales microcontroladores que se han considerado son la familia


ATMega de Atmel , PIC de Microchip y Motorola. Los pros y contras que se han
encontrado para cada uno son:

 Los microcontroladores PIC de microchip soportan un amplio rango de voltajes,


son rápidos pero algo menos que los más rápidos de Atmel o Motorola, son
económicos y fáciles de conseguir, poseen gran variedad de interfaces de
comunicación, como el SPI, utilizado en algunas tarjetas de memoria. Además
su lenguaje ensamblador me es conocido y existe gran cantidad de
documentación disponible.
 Los microcontroladores Motorola también son rápidos y poseen gran variedad
de interfaces, pero no son tan económicos y fáciles de conseguir como los PIC
de Microchip, no tienen un rango de voltajes tan flexible y no existe tanta
documentación, ejemplos y herramientas como en los PIC o los
microcontroladores Atmel.
 Los ATMega de Atmel son rápidos, poseen gran variedad de interfaces, un
amplio rango de voltajes, gran cantidad de RAM, son económicos y fáciles de
conseguir.

Tanto los microcontroladores PIC como los ATMega parecen los más apropiados.
Los ATMega son algo más potentes y poseen mayor cantidad de ROM y RAM, pero los
PIC poseen un lenguaje ensamblador y arquitectura conocida, ya que se han estudiado y
utilizado durante la carrera, ello disminuye en gran medida el coste de aprendizaje por lo
que finalmente se selecciona este tipo de microcontrolador.

Los requisitos para el microcontrolador son:

 Al menos 16 KB de memoria Flash para el código de programa.


 Al menos 1KB de memoria RAM, es necesaria al menos esa cantidad de
memoria ya que las lecturas y escrituras de tarjetas de memoria suelen ser en
bloques de 512 bytes.
 Poseer memoria EEPROM para almacenar información no volátil como el
volumen actual. Como la cantidad de datos a guardar es muy baja son
suficientes unos pocos bytes.
 Poseer suficientes líneas de entrada/salida para la conexión de todos los
elementos del dispositivo, esto dependerá del resto de elementos seleccionado.

53
Entre los microcontroladores PIC de 8 bits podemos encontrar cuatro familias
principales, las PIC10, PIC12, PIC16 y PIC18. Tan sólo los microcontroladores de la
familia PIC18 poseen los requisitos necesarios, ya que ninguno de los microcontroladores
del resto de las familias poseen la suficiente memoria Flash y RAM.

El microcontrolador elegido ha sido el 18F45216 ya que es uno de los más


potentes de la familia PIC18 y los microcontroladores PIC con bus USB incorporado no
están disponibles con memoria Flash17. En la Tabla 3.1 puede verse una comparativa de
las características de la familia 18Fxx2. El microcontrolador 18F452 en cuestión tiene las
siguientes características:

 32kB de memoria Flash para el código del programa.


 1536 Bytes de memoria RAM.
 256 Bytes de memoria EEPROM.
 Frecuencia de reloj de hasta 40MHz (10 MIPS) usando multiplicador de reloj.
 Multiplicación por hardware en un único ciclo de instrucción.
 3 líneas de interrupción.
 34 líneas de entrada/salida.
 4 temporizadores/contadores, con diferentes características como ser de 8 o 16
bits, tener preescalador, etc.
18
 2 módulos CCP (Capturador/Comparador/PWM )
 Modulo MSSP (Puerto serie maestro síncrono) con dos modos de operación:
■ Como puerto SPI (soporta los 4 modos SPI)
■ Como puerto I2C (modo maestro y esclavo)
 Modulo USART (Transmisor-Receptor asíncrono universal)
 Modulo PSP (puerto paralelo esclavo)
 Conversor analógico/digital de 10 bits.
 Otras características como: Watchdog Timer (WDT), Brown-out Reset (BOR),
Power-on Reset (POR), Power-up Timer (PWRT), Oscillator Start-up Timer
(OST), ICSP, etc.

16 Actualmente para nuevos diseños Microchip recomienda usar el PIC 18F4520.


17 Actualmente hay microcontroladores PIC con interfaz USB y memoria Flash, pero no había en el
momento de la elección de componentes de este proyecto.
18 Modulador de anchura de pulsos.

54
Tabla 3.1 Características de la familia 18Fxx2

En concreto se va a usar el PIC 18LF452 que es la versión de bajo voltaje ya que,


como se verá posteriormente, se va a utilizar un voltaje de 3,3 V para alimentarlo debido a
las necesidades del resto de componentes. En cuanto a la frecuencia del reloj se utilizará
la más baja posible que sea suficiente para el funcionamiento correcto del dispositivo,
después de realizar varias pruebas se ha decidido utilizar una frecuencia de 20 Mhz,
además no se deben usar frecuencias mayores con voltajes tan bajos, pese a ser la versión
de bajo voltaje. En cuanto al encapsulado se decide utilizar el encapsulado DIP ya que es
más adecuado para prototipos al no necesitar estar soldado pudiendo ser sustituidos
fácilmente, y sus adaptadores son económicos y fáciles de encontrar.

3.2.2 El módulo USB

Como se ha indicado en el apartado anterior el microcontrolador no posee un


interfaz USB por lo que necesitamos un integrado que proporcione esta funcionalidad. Las
características de este integrado deben ser:

 Interfaz sencillo para facilitar la comunicación con el microcontrolador


 Mínimo número de componentes externos.
 Que sea un componente fácil de conseguir.
 Ha de poseer drivers para windows y a ser posible para otros sistemas
operativos, con ejemplos de su utilización.

Los integrados considerados para esta función han sido el PDIUSBD12D de


Philips y de FTDI Chip los integrados FT232MB y FT245MB, todos compatibles con
USB 2.0. Las características de cada uno se pueden ver en la tabla comparativa 3.2.

55
PDIUSBD12D FT232BM FT245BM
Comunicación con el Paralelo (8 bits) Serie (RS-232) Paralelo (8 Bits)
microcontrolador
Número de pines 28 32 32
Velocidad de
transferencia Max.con 2 MB/s 1 Mbit/s 1 MB/s
el microcontrolador
Cantidad de
componentes externos Baja Baja Baja
Obtención Relativamente difícil Fácil Fácil
Flexibilidad Alta (se pueden diseñar Baja Baja
gran variedad de
dispositivos)
Sistemas Operativos y Debes crear tus propios Tiene diferentes drivers oficiales para varios
Drives Drivers sistemas operativos: Windows
(98/2000/ME/XP/Vista...), Linux y MAC OS
(8/9/X)
Complejidad de Alta Baja Baja
utilización
Cantidad de
documentación y Baja Alta Alta
ejemplos de uso
Módulo para No Si Si
prototipos
Tabla 3.2 Comparación de diferentes integrados para el interfaz USB

El integrado PDIUSBD12D tiene la ventaja de ser más flexible que los de FTDI,
pudiéndose realizar casi cualquier tipo de clase de dispositivo e implementando el driver a
medida. Por contra es mucho más complicado de utilizar y la necesidad de
implementación de drivers propios hace mucho más costosa la realización del dispositivo.
Los integrados de FTDI son mucho más simples y cómodos de usar pero menos flexibles,
sin embargo para el diseño de este dispositivo es suficiente, no compensando la
flexibilidad que aporta el integrado de Philips su complejidad.

Por tanto queda elegir entre los dos integrados de FTDI. Ambos son muy
similares entre sí, su principal diferencia es el interfaz de comunicación con el
microcontrolador, uno serie y el otro paralelo, siendo más rápido este último. La mayor
rapidez en las transferencias del integrado con interfaz paralelo (FT245BM) y la mayor
facilidad de uso con respecto al desarrollado por Philips hacen que sea el elegido para
usarse en este dispositivo.

Cabe destacar otra importante característica de los modelos de FTDI, ambos


cuentan con módulos para el desarrollo de prototipos de forma más rápida sin necesidad
de preocuparse de los componentes externos necesarios ni de la soldadura del integrado
(bastante compleja de realizar a mano), ya que todo está montado en un pequeño circuito
en formato DIP. En concreto se va a utilizar el modulo DLP-USB245M-G que monta el
integrado FT245BM, puede verse en la Imagen 3.3.

56
Imagen 3.3 Módulo DLP-USB245M-G

3.2.3 La tarjeta de memoria

Para almacenar los ficheros en formato MP3 se va a utilizar una tarjeta de


memoria, que el microcontrolador se encargará de leer y enviar los datos al chip
decodificador de MP3. En el capítulo anterior se mostraban las características de las
principales tarjetas de memoria del mercado, de entre ellas las más utilizadas hoy en día y
por tanto las que se van a considerar son las tarjetas: Compact Flash, Multimedia Card
(MMC) y Secure Digital (SD). En la Tabla 3.4 podemos ver una comparativa de algunas
características de estos tres tipos de tarjetas.

Compact Flash Multimedia Card Secure Digital


Número de pines 50 7 9
Tamaño bus de datos 16 bits 1 bit 1 o 4 bits
Velocidad de 56 MBytes/s 20 Mbits/s 200 Mbit/s
transferencia
Modo SPI No Opcional Si
Licencia para hacer un No No Si
dispositivo
Alimentación 3,3 – 5 V 2,7 – 3,6 V 2,7 – 3,6 V
Tabla 3.4 Comparación de tarjetas de memoria

La desventaja principal de las tarjetas Compact Flash frente a los otros dos tipos
es el elevado número de pines, ya que el número de puertas de entrada/salida del
microcontrolador es limitado. Por contra tanto las tarjetas MMC como SD tienen un
número de pines muy reducido y la posibilidad de acceder mediante el protocolo SPI, que
está implementado por hardware en el microcontrolador. Además, las tarjetas MMC y SD
son compatibles entre sí, tanto física como eléctricamente, por tanto un dispositivo que
utilice el modo SPI en una tarjeta MMC podrá utilizar tarjetas SD y viceversa.

Debido a que es necesario el pago de una licencia para implementar un


dispositivo que utilice tarjetas SD (al menos si usan el protocolo SD) en este proyecto se
utilizará como medio de almacenamiento tarjetas MMC que incorporen el modo SPI
(actualmente todas las tarjetas que se comercializan incorporan este modo de acceso).
Además, en el reproductor se podrá utilizar tarjetas SD y, mediante adaptadores, tarjetas
RS-MMC, MMCmicro, miniSD y microSD.

57
3.2.4 El chip decodificador de MP3

Para la reproducción del audio en formato MP3 es necesario un chip que


decodifique los datos MP3, un conversor digital/analógico y un pequeño amplificador
para que la señal analógica pueda escucharse en unos auriculares. Los chips
decodificadores candidatos analizados son: STA013 de ST Microelectronics, VS1001K de
VLSI Solutions y MAS3507D de Micronas. En la Tabla 3.5 se puede ver una
comparación de estos decodificadores.

STA013 VS1001K MAS3507D


Número de pines 28 28 44
Necesita inicialización Si No No
Información disponible Poca Mucha Poca
Incluye conversor A/D No Si No
Tensión de alimentación 2,1-3,6v 2,8-3,6v 2,85-3,6v
Comunicación I2C SPI I2C
Tabla 3.5 Comparación de decodificadores de MP3.

El decodificador STA013 tiene la principal desventaja en su inicialización, ya que


es necesario el envío de un fichero de 2 kB cada vez que se inicia, lo que hace más
compleja su utilización y el uso de 2 kB de memoria del microcontrolador es este fichero
de inicialización. En cuanto a la información disponible para el diseño el VS1001K,
además de disponer de las especificaciones, existen varias application notes y un buen
soporte del fabricante (se pueden hacer consultas a los diseñadores en un foro) lo que hace
el diseño de dispositivos más sencillo. Además, este decodificador no necesita un
conversor analógico/digital externo, ya que lo incluye en el propio integrado, y con una
señal de salida suficiente para ser usada directamente en unos auriculares. El
decodificador MAS3507D tiene la desventaja de usar un encapsulado más difícil de soldar
que el resto, menos información disponible y con la necesidad de un conversor A/D
externo. Es por todo esto que se decide utilizar el decodificador VS1001K en este
proyecto.

3.2.5 La pantalla LCD

Como interfaz de usuario se va a utilizar una botonera y una pantalla LCD en la


que se le mostrará al usuario información sobre las música que está escuchando, así como
también se facilitará la navegación por el árbol de directorios de la tarjeta de memoria.

Existen dos tipos principales de pantallas, las pantallas de caracteres y las


pantallas gráficas. Las ventajas de las pantallas de caracteres son la facilidad para
adquirirlas, utilizan un interfaz estándar19, existe mucha documentación sobre su uso e
incluyen un mapa de caracteres interno, aunque también admiten caracteres definidos por
el usuario. Las principales desventajas son el número de pines necesarios (14 funcionando
en modo de 8 bits y 10 en modo 4 bits) y menos versatilidad que una pantalla gráfica.

19 Interfaz HD44780 desarrollado por Hitachi y utilizado por la mayoría de fabricantes.

58
En cuanto a las pantallas gráficas, son normalmente mucho más caras que las de
caracteres, más complejas de usar y necesitan el envío de todos los píxeles, aun cuando se
desean mostrar caracteres. Sin embargo son mucho más versátiles que las de caracteres,
pudiendo mostrar cualquier dibujo e icono junto al texto, diferentes tamaños y fuentes de
texto, por lo que son más apropiadas para un interfaz de usuario donde se desea mostrar
mucha información, sustituyendo parte de esta información por pequeños iconos.
Afortunadamente se ha encontrado un LCD gráfico económico, muy fácil de adquirir,
muy documentado y con un interfaz serie de tan solo 8 líneas que utiliza el bus SPI. Se
trata de las pantallas utilizadas por Nokia en sus teléfonos móviles 3310 y 3210 que
utilizan el controlador Philips PCD8544. En la Tabla 3.6 se puede comparar las
características de la pantalla gráfica con controlador PCD8544 y una pantalla de
caracteres de 20x4.

LCD 20x4 LCD gráfico PCD8544


Número de pines 14 (10 en modo 4 bits) 8
Mapa de caracteres Si No
Interfaz Estándar HD44780 Comunicación sencilla, acceso por
SPI
Documentación Muy documentado Muy documentado
Tamaño 20x4 carácteres 84x48 píxeles, equivalente a 14x6
caracteres de tamaño 6x8
Tensión de alimentación 5V 2.7-3.3 V
Facilidad de adquirir Muy fácil Fácil (como recambio de teléfono
móvil)
Precio Económica Económica
Tabla 3.6 Comparativa de pantallas LCD

Finalmente se decide la utilización de la pantalla gráfica con el controlador


Philips PCD8544, que puede verse en la Imagen 3.6, por la posibilidad de ofrecer mayor
información en pantalla de forma más intuitiva (mediante iconos), por necesitar menos
puertos de comunicación del microcontrolador, ser económica y estar suficientemente
documentada.

Imagen 3.6 Pantalla LCD con controlador Philips PCD8544

59
3.3 Programa, herramientas y metodología
utilizada
Para el diseño, fabricación y testeo del dispositivo, en lo que al hardware se
refiere, se han empleado una serie de programas y herramientas en cada uno de los
procesos de creación, éstos son: diseño, implementación y testeo. En la Imagen 3.7 se
puede ver un resumen de los materiales utilizados para cada una de las fases del desarrollo
del hardware del reproductor.

Imagen 3.7 Materiales para realizar el hardware

3.3.1 Diseño

Para el diseño del esquemático y el trazado o layout del circuito impreso se ha


utilizado el programa Eagle de CadSoft, se trata de un programa muy utilizado para el
diseño de circuitos impresos y que posee una versión gratuita (con algunas limitaciones
como el uso de como máximo dos capas y el uso no comercial de los diseños). Las
principales ventajas de este programa son: su facilidad de uso, que muchos de los
componentes utilizados ya se encuentran en su librería o en Internet y pueden ser
importados, y que muchas compañías de fabricación de circuitos impresos admiten su
formato directamente, sin necesidad de exportarlos a formato Gerber20. En la Imagen 3.8
se puede ver el proceso seguido para el diseño del circuito impreso.

20 Formato de fichero estándar usado para la fabricación de circuitos impresos que contiene información de
patrones de pistas, vías, información corte, máscaras de soldadura, etc.

60
Imagen 3.8 Procesos para el diseño del circuito

El primer paso en el diseño del circuito impreso es la colocación en el diagrama


esquemático de los componentes que van a ser utilizados y dibujar las conexiones entre
ellos. Para una mejor comprensión del esquema en su conjunto se divide en diferentes
módulos, de forma que las líneas de un módulo se interconectan con otro mediante
etiquetas, para hacer más claro el sistema. Una vez finalizado el diseño del esquemático se
realiza una comprobación de las conexiones mediante el sistema automático de
comprobación de reglas eléctricas ERC (Electrical Rule Check).

Una vez que se ha comprobado que el esquemático está bien interconectado se


pasa ha realizar el trazado del circuito impreso. Lo primero es la colocación de los
componentes en el circuito, colocando cerca aquellos componentes que estén
interconectados, teniendo especial importancia los condensadores de desacoplo y los
cristales. Después se procede al enrutado del circuito, este paso se realiza tanto de forma
manual como automática, realizando de forma manual aquellas líneas que se consideren
más críticas o que no sean fácilmente enrutables por el sistema automático.

Finalmente se realiza una comprobación de las reglas de diseño o DCR (Design


Rule Check), esto comprueba que no existan solapamientos y que se cumplan las
especificaciones definidas para el circuito, como un mínimo grosor de pistas y vías, las
distancias entre pistas y componentes, etc.

3.3.2 Fabricación

Se han realizado dos implementaciones del circuito, la primera fue realizada


íntegramente de forma manual a partir de placas fotosensibles, y la segunda se encargó a
una empresa que hizo la placa de circuito impreso, soldándose posteriormente a mano los
componentes. Los motivo de realizar dos prototipos fueron algunos cambios en el diseño
inicial, principalmente en el circuito de alimentación ya que no cumplía con las
expectativas, y el deterioro por oxidación del prototipo inicial, que lo hizo muy inestable.

Para la fabricación de la placa del circuito impreso del primer prototipo se utilizó
una placa fotosensible positiva de doble cara, hojas de transparencias usadas como
fotolito, una insoladora realizada a partir de bombillas de bajo consumo, un 'revelador'
consistente en una disolución de sosa cáustica y un 'atacador' a partir de peróxido de
hidrógeno y ácido clorhídrico. El proceso es el siguiente:

61
1. Se imprime el circuito en las transparencias, teniendo en cuenta su orientación.
2. Se sujetan las transparencias (fotolitos) mediante cristales a la placa
fotosensibilizada en condiciones de baja iluminación, teniendo especial
cuidado en la concordancia de las dos caras del circuito.
3. Se insola cada una de las caras de la placa aproximadamente 5 minutos
mediante una insoladora realizada a partir de bombillas de bajo consumo y
elevada potencia lumínica21. Para el cálculo del tiempo se deben realizar
pruebas previamente, ya que el tiempo dependerá del fabricante de la placa y
la cantidad de luz ultravioleta con que la que se insole.
4. Después de la insolación se realiza el revelado de la placa. Este proceso
elimina la capa fotosensible de las zonas en las que la luz ha incidido. El
revelador consiste en una disolución de sosa cáustica aproximadamente a un
1% y a unos 25ºC. A mayor concentración y temperatura más rápido será el
revelado.
5. El siguiente paso es el atacado de la placa: existen dos tipos de atacado, rápido
y lento. El lento consiste en una disolución de cloruro férrico, y el rápido, que
es el que se ha utilizado, es una mezcla a partes iguales de agua, peróxido de
hidrógeno al 33% (agua oxigenada de 110 volúmenes) y ácido clorhídrico
(salfumán). La velocidad del atacado variará según la concentración de la
mezcla y su temperatura22. El proceso de atacado elimina la capa de cobre no
protegida por la pintura fotosensible.
6. Una vez atacada la placa se elimina la pintura fotosensible con acetona.
7. El último paso es el mecanizado de la placa. Para ello se utiliza un minitaladro
y brocas de distinto tamaño con las que se realizaran cada una de las vías.

Para la soldadura de los componentes, tanto en la placa fabricada como en la


encargada, se ha utilizado un soldador de 11W y punta muy fina, soldadura de
estaño/plomo y flux para facilitar la soldadura. En el primer prototipo, fabricado mediante
el proceso anteriormente descrito, es necesario también la conexión eléctrica de ambas
caras a través de las vías, para lo que se usa el hilo de cobre de un cable fino que se pasará
por la vía y se soldará en cada una de las caras.

3.3.3 Testeo

Para la comprobación de las conexiones eléctricas del circuito se utiliza un


polímetro, con el que se comprueba la continuidad de todas las pistas, vías y soldaduras.
Para la comprobación lógica y depuración se utiliza tanto el polímetro como un
osciloscopio. En concreto se utiliza un osciloscopio digital con una frecuencia de
muestreo de 50 MHz, suficiente para este diseño.

21 Son más económicas que los tubos y bombillas para insoladora, emiten menor cantidad de luz
ultravioleta que éstas pero la suficiente como para realizar la insolación en pocos minutos.
22 Es de extrema importancia tomar precauciones cuando se trabaja con estos productos químicos, en
especial con el peróxido de hidrógeno. Se deben utilizar guantes y gafas protectores, y el atacado se
realizará en un lugar muy ventilado debido a los gases tóxicos que se desprenden.

62
3.4 Diseño de la PCB
Para realizar el diseño esquemático del circuito éste se ha dividido en diferentes
módulos interconectados, para simplificar su diseño y la compresión del esquema
completo. En la Imagen 3.9 se puede observar el diseño modular y la interconexión de
cada módulo, estos módulos serán explicados en cada una de las secciones de este
apartado.

Imagen 3.9 Diseño modular del circuito

3.4.1 Alimentación

La alimentación es un elemento fundamental del circuito, se debe asegurar que el


circuito de alimentación sea capaz de suministrar suficiente corriente al resto del circuito
con una tensión lo más estable posible. Debido a la naturaleza del circuito hay que
intentar que la alimentación genere el menor ruido, ya que de lo contrario este ruido,
aunque no afectase al funcionamiento de los elementos digitales, puede ser audible en la
salida analógica de los auriculares.

Así pues lo primero a determinar será la tensión con la que se debe alimentar el
circuito y la corriente máxima que consumirá. En la Tabla 3.7 podemos observar cada
unos de los componentes digitales con sus respectivos rangos de tensiones de
alimentación, a partir de la cual se puede extraer el rango de tensiones que se pueden usar
para alimentar todos los componentes. Como se observa, el límite inferior lo marca la
parte analógica del circuito VS1001K y la superior la pantalla LCD, quedando el rango
entre 2,8-3,3V. Debido a que 3,3V es una tensión estándar para la que existen diferentes
reguladores de tensión, diodos Zener, etc. es la elegida para alimentar el circuito.

63
Componente Tensión de alimentación
PIC 18LF452 2-5,5V23
VS1001K (analógico) 2,8-3,6V
VS1001K (digital) 2,3-3,6V
MMC 2-3,6V
LCD 2,7-3,3V
Tabla 3.7 Rango de tensiones de los componentes

En cuanto a la corriente necesaria para alimentar el circuito, en la Tabla 3.8


podemos observar los consumos máximos de los distintos componentes del circuito. El
resultado de la suma de los consumos máximos de todos los componentes es de 95mA,
aunque el consumo real del circuito será mucho menor ya que los consumos típicos de los
componentes, sobre todo de la parte analógica de integrado VS100K, son menores que el
máximo. En el caso de la parte analógica del VS100K su consumo típico es de 5,5mA, y
los picos de corriente son paliados por la inductancia que se coloca en la entrada de
alimentación de este circuito, esto se explicará en la sección dedicada al diseño del
circuito del VS1001K. Por tanto se decide que la fuente de alimentación ha de poder
suministrar una corriente de 100mA, lo que asegura una correcta alimentación de todo el
circuito aun coincidiendo picos de consumo simultáneo de todos los componentes.

Componente Consumo máximo


PIC 18LF452 4,70mA24
VS1001K (analógico) 40mA25
VS1001K (digital) 15mA
MMC 35mA26
LCD 300uA
Tabla 3.8 Consumo máximo de los componentes

En todos estos cálculos no hemos tenido en cuenta el módulo USB ya que este se
alimenta de forma autónoma a partir del puerto USB. Tampoco se ha contado la corriente
que consume el circuito de la botonera y los elementos pasivos que acompañan a los
integrados por ser consumos muy bajos, no obstante se ha dado un margen de 5mA para
estos consumos extra. Resumiendo, el circuito de alimentación ha de suministrar a partir
de pilas o del puerto USB (si este está conectado) una tensión de salida de 3,3V y al
menos 100mA de corriente, además de cargar las pilas cuando el puerto USB esté
conectado.

En cuanto a las pilas y su carga, debido a que la tensión de las líneas de


alimentación del puerto USB es de 5V se pueden cargar unas pilas que tengan como
máximo esta tensión, por tanto se decide alimentar el circuito con dos pilas tipo AA
recargables, por ser lo más común en este tipo de reproductores y no superar esta tensión.

23 La tensión mínima depende de la frecuencia del reloj


24 Consumo máximo aproximado a 3,5V y 20MHz, el consumo típico a 3,3V ronda los 4,2mA (a una
temperatura de 25º)
25 De pico a plena carga, el consumo típico es 5,5mA
26 Esto depende del fabricante, la frecuencia y la tensión de alimentación. Aun que el estándar permite hasta
100mA de consumo en lectura se usarán tarjetas con un máximo de 35mA (la mayoría)

64
Alimentación por USB

Cuando el puerto USB esté conectado el reproductor deberá alimentarse de este,


además de cargar las pilas si éstas están conectadas. Esto supone un consumo de corriente
del bus USB que deberá ser debidamente notificado durante el proceso de enumeración.
Antes de dicho proceso el dispositivo no podrá consumir más de 100mA por tanto se ha
decidido que el circuito no se alimente del USB hasta que el proceso de enumeración haya
finalizado. Para ello se utiliza la línea PWREN# del módulo USB que se pone a nivel bajo
después de que finalice el proceso de enumeración, indicando que ya se puede empezar a
consumir corriente del puerto USB de forma normal. En la Imagen 3.10 se puede ver el
circuito que controla la alimentación del USB, el transistor MOSFET de canal P
(ZXM61P03) controla la alimentación del circuito, cuando la línea PWREN# pasa a nivel
bajo el transistor permite el paso de corriente entre la fuente y el drenador. En la puerta
del transistor se puede observar una resistencia y un condensador que realizan una función
de soft start que limita el pico de corriente cuando el transistor se activa. Es importante
tener en cuenta que el transistor ZXM61P03 tiene una impedancia de 0,35 ohmios entre la
fuente y el drenador, por lo que hay una caída de tensión dependiente del consumo. Se ha
elegido especialmente este transistor por su baja resistencia entre la fuente y el drenador,
en el primer prototipo se utilizó el transistor BS250 pero su resistencia de 3,5Ω27 era
excesiva.

Imagen 3.10 Control de alimentación USB

Circuito de carga

Para simplificar la alimentación, el circuito de carga será lo más sencillo posible,


esto es, una corriente pasando por las pilas forma continua y sin control de carga. En
circuitos más complejos la carga se realiza mediante ciclos de carga dependiendo de la
carga de la pila, aunque esto también depende del tipo de pila. En la Imagen 3.11 se puede
ver el circuito de carga, éste consta únicamente de las pilas, una resistencia y un diodo. La
tensión de carga ha de ser superior a la tensión nominal de las pilas, esto genera una
corriente que pasa a través de las pilas y las va cargando [Linden02] [Buchmann]
[Harrison04].

27 En este transistor la resistencia fuente-drenador depende del fabricante, pudiendo ser de hasta 14 ohmios

65
Imagen 3.11 Circuito de carga

Al no haber control de carga se ha de controlar de forma manual el tiempo de


carga de las pilas, no dejándolas cargando un tiempo excesivo. Se aconseja el uso de un
cargador externo para la carga de pilas y usar el cargador del reproductor de forma
ocasional cuando no se disponga de uno externo. Para evitar los problemas de sobrecarga
de las pilas estas se cargan con una corriente baja, esto incrementa el tiempo de carga pero
la hace más segura. Se opta por una carga de las pilas mediante una corriente C/628, donde
C es la capacidad de las pilas, tomándose pilas de 1800mAh como referencia. Por tanto la
corriente de carga de las pilas será de 300mAh y el tiempo de carga de unas 8 horas. La
fórmula 3.1 calcula el valor de la resistencia: Vp es la tensión a la que se alimenta el
circuito de carga, Vb es la tensión nominal de las pilas y Ic es la corriente de carga.

R = (Vp – Vb) / Ic
Fórmula 3.1

La tensión nominal de las pilas es de 2,4V (1,2V cada una de las pilas en serie), y
la tensión de alimentación es de 5V29. Teniendo en cuenta la caída de tensión del diodo
Schottky (0,3V) Vb sería 2,7V, por lo que: (5 – 2,7) / 0,300 = 7,66Ω. Teniendo en cuenta
la resistencia del transistor MOSFET (0,35Ω) el valor de la resistencia ha de ser 7,3Ω.

En el circuito se puede observar un diodo Zener de 3,6V, este diodo no forma


parte del circuito de carga de las pilas sino que sirve para cuando las pilas no estén
conectadas en el reproductor. En ese caso es necesario lograr una tensión de 3,3V en
Vout, el diodo Zener fija una tensión de 3,6V y el diodo Schottky la baja a 3,3V. Para el
correcto funcionamiento del diodo Zener es necesario una corriente mínima sin
dependencia del consumo del reproductor. En la Imagen 3.12 podemos ver una
simplificación del circuito, donde RL es la carga del reproductor y debemos seleccionar el
valor de R de forma que el diodo Zener esté en funcionamiento cuando la carga sea
máxima y cuando el circuito esté sin carga (conectado al USB pero sin pilas y con el
reproductor apagado).

28 Usando una corriente C/10 se elimina el problema de sobrecarga, pudiendo dejar cargando las pilas de
forma indefinida, pero el tiempo de carga seria excesivo (16 horas) y no cumpliría con los requisitos del
Zener
29 Esta es la tensión típica que suministra el bus USB, pero el estándar da un margen de 4,5V a 5,5V, para
simplificar los cálculos tomaremos 5V.

66
Imagen 3.12 Funcionamiento del diodo Zener como regulador.

El diodo Zener elegido es el BZX85C3V6, es un diodo Zener de 3,6V, IZ mínima


de 60mA y disipa hasta 1W. Por tanto es capaz de soportar un máximo de corriente de 1 /
3,6 = 277mA. Se deben analizar dos puntos importantes, el diodo Zener no debe quedarse
sin corriente y debe soportar la corriente y no quemarse cuando no exista carga.

Suposición de carga máxima

Si la carga del reproductor es máxima éste consume 100mA, más los 60mA de la
corriente del Zener son 160mA. La Fórmula 3.2 muestra el cálculo para el valor máximo
de la resistencia, que en este caso es R=5−3,6/ 0,060,1=8,75 Ω.

V −V Z 
R=
 I ZminI Lmax 
Fórmula 3.2

Suposición de circuito sin carga

En este caso el peligro es que el Zener se queme, a partir de la Fórmula 3.2


podemos calcular el valor de la resistencia mínima que se debe colocar, esta es:
R=5−3,6/0,2770=5 Ω.

V −V Z 
R=
 I Zmax I Lmin 
Formula 3.3

Por tanto la resistencia ha de encontrarse entre 5 y 8,75 ohmios, como se puede


observar los 7,66Ω de resistencia del circuito de carga se encuentra entre estos márgenes.
El valor de resistencia estándar más cercano es de 7,3Ω, esto sumado a la resistencia lineal
del transistor MOSFET tenemos una resistencia total de 7,65Ω.

67
El regulador de tensión

Cuando el USB esté conectado la tensión estará regulada por el diodo zener y el
circuito se alimentará con 3,3V, pero cuando sean las pilas las que tengan que suministrar
la energía al circuito será necesario el uso de un conversor DC/DC que pase la tensión de
las pilas de 2,4V a los 3,3V necesarios.

En el prototipo inicial se utilizó el regulador de tensión conmutado TC115 de


microchip, este regulador es capaz de suministrar una corriente de 140mA con una tensión
de entrada de 2V, tiene una eficiencia de un 80% a 100mA y está recomendado para
sistemas alimentados con entre 1 y 3 pilas, por lo que a priori cumple los requisitos y es
una buena elección. En cuanto al encapsulado, que puede verse en la Imagen 3.13, se trata
de un SOT-89 de soldadura superficial con 5 pines. En cuanto a los elementos externos, el
regulador necesita dos condensadores, un diodo y una inductancia, como muestra el
esquemático de la Imagen 3.14 extraída de las especificaciones del regulador. Después de
realizar diversas pruebas con diferentes cargas se pudo comprobar que con una carga de
100mA el regulador se volvía muy inestable dejando en ocasiones de funcionar. Este
problema se debía a la inductancia, ya que fue imposible adquirir una inductancia del
valor necesario y una resistencia en línea muy baja, y la que se utilizó daba problemas con
corrientes altas debido a una caída de tensión excesiva. A pesar de ello el primer prototipo
parecía funcionar de forma correcta, no obstante al no poder asegurar un correcto
funcionamiento en el caso de un consumo de 100mA se optó por cambiar este regulador
por otro que suministrase más corriente y con elementos más fáciles de obtener.

Imagen 3.13 Regulador de tensión TC115

Imagen 3.14 Esquemático del regulador TC115

68
En el diseño final se ha utilizado el regulador de tensión MAX1675 de Maxim.
Este regulador de tensión es capaz de suministrar hasta 220mA a partir de una entrada de
tan solo 0,9V y una eficiencia de hasta un 94% con 200mA de carga. Tiene un consumo
de tan solo 16μA, elimina la necesidad de usar un diodo externo y mejora la eficiencia
media. En la Imagen 3.15 puede observarse el pinout del regulador, en este caso el
encapsulado es un μMAX, también de soldadura superficial y algo más pequeño que el
TC115 lo que dificulta mucho la soldadura manual.

Imagen 3.15 Regulador MAX1675

Los elementos externos necesarios en este regulador son tres condensadores y una
inductancia. Como puede observarse en el esquemático de la Imagen 3.16, extraído de las
especificaciones, se coloca un condensador a la entrada y la salida del regulador, y otro
que hace la función de bypass conectando la entrada de referencia del regulador con tierra.
En este caso la inductancia necesaria es de 22μH, afortunadamente en este caso se pudo
encontrar una pequeña inductancia de soldadura superficial fabricada por Panasonic con
una resistencia lineal de tan solo 0,015Ω.

Imagen 3.16 Esquemático del regulador MAX1675

69
El diseño final lo podemos ven en la Imagen 3.17, además de los circuitos
anteriormente descritos se ha añadido un conmutador que permite encender y apagar el
reproductor, y una línea conectada a la entrada RA0 del microcontrolador para poder
controlar la carga de las pilas.

Imagen 3.17 Esquemático del módulo de alimentación.

3.4.2 Microcontrolador

Como se indicó en la sección de selección de componente se va a utilizar el


microcontrolador PIC 18LF452 fabricado por Microchip. Se trata de un microcontrolador
de baja tensión de 8 bits con 34 pines de entrada y salida, un set de 75 instrucciones y
varios módulos: receptor/transmisor universal asíncrono/síncrono direccionable
(AUSART), interfaz serie de periféricos (SPI), circuitos inter-integrados de dos hilos I²C,
conversor analógico/digital de 10 bits, 4 temporizadores, etc30. El encapsulado elegido es
un DIP de 40 pines por su facilidad de montaje y posibilidad de sustitución. Como ya se
ha explicado trabajará a 20MHz y se alimentará con una tensión de 3,3V. En la Imagen
3.18 puede verse el pinout del microcontrolador extraído de las especificaciones.

30 Para más información sobre las características y arquitectura del microcontrolador consultar las hojas de
especificaciones [PIC18FXX2].

70
Imagen 3.18 Microcontrolador 18LF452

El microcontrolador tiene toda la lógica de funcionamiento del dispositivo y se


encarga de interconectar y gestionar todos los elementos del reproductor. Los periféricos
que se conectan al microcontrolador y sus funciones principales son:

 Tarjeta MMC: Acceder a la estructura de ficheros de la tarjeta de memoria.


 Decodificador MP3: Configurar el chip decodificador y enviarle el flujo de
datos codificado para que sean reproducidos.
 Pantalla LCD: Mostrar la información necesaria para el control del reproductor.
 Botonera: Obedecer a las pulsaciones de los botones realizadas por el usuario.
 Módulo USB: Comunicarse con el ordenador mediante dicho módulo.

Además de los elementos mencionados se ha optado por colocar en el circuito dos


conectores, uno conectado a las líneas ICSP del microcontrolador para poder reprogramar
éste sin necesidad de extraerlo, el otro permite la comunicación mediante RS232 que se
utiliza para la depuración del código. Inicialmente se utilizó también la comunicación
RS232 para actualizar el firmware del microcontrolador a través de un bootloader, pero se
optó por sacar las líneas ICSP para realizar actualizaciones más rápidas y debido a que la
actualización mediante software fallaba en algunas ocasiones.

El microcontrolador utiliza para la señal de reloj un cristal de 20MHz, por lo que


se ha configurado en modo HS (High Speed Crystal). El montaje para este tipo de
configuración se puede ver en la Imagen 3.19; se han utilizado condensadores de 33pF y
no ha sido necesario el uso de la resistencia Rs.

71
Imagen 3.19 Configuración del cristal del microcontrolador

El resto de pines se conectan según indica la Tabla 3.9, en cuando a los pines de
alimentación se han colocado pequeños condensadores próximos al microcontrolador para
estabilizar la tensión y minimizar posibles ruidos. En las secciones correspondientes a
cada componente se detalla la conexión de cada uno de ellos con el microcontrolador.
Como puede observarse hay líneas que están conectadas a varios elementos, como las
correspondientes al interfaz SPI que se utiliza para la comunicación con el decodificador
MP3, la pantalla LCD y la tarjeta de memoria, habiendo para cada uno una línea de chip
select para seleccionar el correspondiente cada vez.

Pines Elemento
RD0-RD7 Bus de datos del módulo USB
RB0, RB2, RB4, RB5, RB6 Líneas de control del módulo USB
RC3, RC4, RC5, RA2, RB7 Configuración del decodificador MP3
RB1, RB3, RC6, RC7 Flujo de datos MP3 del decodificador
RA3, RA4, RA5, RC3 RC5 LCD
RA1, RC3, RC4, RC5 Multimedia Card
RC0, RC1, RC2, RE0, RE1, RE2 Botonera
ICSP_VPP, GND, RB6, RB7 ICSP
RC6, RC7 UART
RA0 Tensión de pilas
Tabla 3.9 Conexiones del microcontrolador.

3.4.3 Módulo USB

Para la comunicación USB se va a utilizar el integrado FT245BM, que


proporciona un interfaz transparente desde el punto de vista del microcontrolador para
comunicarse con el ordenador. Debido a la gran cantidad de elementos externos que
necesita y el tipo de encapsulado (muy complicado para una soldadura manual) se ha
optado por el uso del módulo DLP-USB245M que incluye los componentes pasivos
necesarios, además de facilitar la integración en el circuito al no ser necesario soldarlo a
éste y pudiendo ser fácilmente sustituido.

72
La Imagen 3.20 es el diagrama de bloques simplificado del funcionamiento del
chip, como se puede observar tiene un buffer de recepción de 128 Bytes y un buffer de
transmisión de 384 Bytes. Utiliza un cristal de 6 MHz con un multiplicador que genera los
12MHz y 48 MHz que utilizan para trabajar el SIE (Serial Interface Engine) y el
transductor USB respectivamente. En el esquema también puede observarse un interfaz
para una memoria EEPROM (externa y opcional) donde se almacena la configuración del
dispositivo, y un regulador de tensión de 3,3V que no se utiliza debido a que sólo
suministra 5mA.

Imagen 3.20 Diagrama de bloques del funcionamiento del FT245BM

El esquemático del módulo utilizado puede verse en la Imagen 3.21, como se


observa el módulo sólo incluye los elementos pasivos necesarios para el funcionamiento
del FT245BM y una memoria EEPROM 93C46 que se utiliza para guardar las
configuraciones básicas que caracterizan al dispositivo USB, como su nombre, número de
serie, USB VID, PID, consumo, etc. En la Tabla 3.10 se listan los pines del módulo (que a
excepción del pin 1 corresponden a los pines del chip) y su descripción, así como si son
pines de entrada o salida.

73
Imagen 3.21 Esquemático del módulo DLP-USB245M

Pin Nombre Tipo Descripción


1 Board ID Salida Se utiliza para saber si el módulo es el DLP-USB245M o
el DLP-USB232M. En el DLP-USB245M el pin está a
nivel bajo.
2 GND - Tierra
3 RESET# Entrada Sirve para resetear el chip FT245BM. Activo a nivel
bajo.
4 RESETO Salida Salida del generador de reset interno. No se ha utilizado.
5 GND - Tierra
6 3V3 Salida Salida del regulador de tensión lineal de 3,3V. Se puede
utilizar hasta un máximo 5mA de corriente. No utilizado.
7 GND - Tierra
8 SLEEP Salida Corresponde al pin PWREN# del chip, se pone a nivel
bajo después del proceso de enumeración del dispositivo.
Sirve para controlar el consumo del dispositivo.
9 SND/WUP Entrada Inicializa el proceso de “despertado” del dispositivo si se
encuentra en estado suspendido. Si el dispositivo no está
suspendido sirve para forzar el envío de los datos del
buffer de transmisión. No utilizado.
10 VccIO Entrada Tensión de referencia para las entradas. En este caso
3,3v.
11 EXTVCC Entrada Alimentación del chip, en este caso se conecta a la
alimentación del USB (PORTVCC)

74
12 PORTVCC Salida Alimentación del puerto USB, se puede consumir hasta
un máximo de 500mA.
13 RXF# Salida Cuando está a nivel bajo al menos un byte está esperando
en el buffer de bytes recibidos para ser leído. Está a nivel
alto si el buffer está vacío.
14 TXE# Salida Cuando está a nivel alto indica que el buffer de
transmisión esta lleno, por tanto debe esperarse antes de
escribir nuevos datos.
15 WR Entrada Cuando se pasa de nivel alto a bajo el chip lee los 8 bits
de la línea de datos y mete el byte en el buffer de
transmisión. Los datos del buffer de transmisión son
transmitidos al ordenador en el timeout del buffer de
transmisión (configurable de 1 a 255ms)
16 RD# Entrada Al ponerlo a nivel bajo el primer byte en el buffer de
recepción se pone en las líneas de datos. Cuando se pasa
de nuevo a nivel alto las líneas de datos se ponen en
estado de alta impedancia.
17-24 D7-D0 Entrada/ Bits de datos.
Salida
Tabla 3.10 Explicación del pinout del módulo USB

Configuración de alimentación

El chip FT245BM permite diferentes configuraciones de alimentación según las


necesidades del sistema:

 Alimentado por el bus USB: tanto el chip como el resto del circuito son
alimentados por el bus.
 Alimentación propia: la alimentación proviene de una fuente externa, no se
extrae corriente del bus.
 Alimentado por el bus utilizando lógica de 3,3V: el bus alimenta directamente el
chip FT245BM y sirve como entrada de alimentación de un regulador de
tensión de 3,3V que se utiliza para alimentar el resto de circuito y a la que se
conecta la línea VCCIO, que sirve como referencia para la tensión de las líneas
de entrada/salida.
 Alimentación propia con lógica 3,3V: existe alimentación propia tanto para el
FT245BM como para el resto del circuito. El FT245BM se alimenta con 5V y el
resto del circuito, incluyendo la línea VCCIO con 3,3V.

En este caso la configuración utilizada es la tercera, se utiliza la alimentación del


bus para el FT245BM, para cargar las pilas (en caso de estar conectadas) y es la entrada
del regulador de 3,3V que alimenta el resto del circuito. La configuración puede verse en
la Imagen 3.22, la alimentación proveniente del puerto USB (PORTVCC) se conecta a la
línea que alimenta el FT245BM (EXTVCC) y a la línea de reset, que no se utiliza por el
microcontrolador. A su vez la línea de alimentación del USB está conectada al regulador
de tensión que alimenta todo el circuito con 3,3V. VCCIO está conectada a los 3,3V de la
alimentación del circuito, ya que es la tensión que se va a utilizar en los pines de
entrada/salida.

75
Imagen 3.22 Configuración de la alimentación del USB

En los circuitos alimentados por USB debe haber un control del consumo. El
estándar USB permite un máximo de 100mA de consumo antes de la enumeración, y en
modo suspendido tan solo se puede consumir un máximo de 500uA, por tanto se debe
controlar el proceso de enumeración y la entrada en estado suspendido. Como se adelantó
en la sección de alimentación, la línea SLEEP del módulo (PWREN# en el chip) se utiliza
para el control de la alimentación del circuito. Esta línea pasa a nivel bajo después de la
enumeración del dispositivo y cuando este sale del estado suspendido, y está a nivel alto
antes de la enumeración y cuando pasa a estado suspendido. En la Imagen 3.23 puede
verse la forma de controlar la alimentación según recomiendan las hojas de
especificaciones, como puede observarse existe un circuito Soft Start que limita el pico de
corriente cuando el transistor se activa. El circuito implementado puede verse en la
Imagen 3.10 de la sección de alimentación.

Imagen 3.23 Control de alimentación según especificaciones.

Protocolo de comunicación

El módulo USB se comunica con el microcontrolador mediante un bus de datos


de 8 bits y cuatro líneas de control. En la Imagen 3.24 puede verse la conexión entre el
módulo y el microcontrolador.

76
Imagen 3.24 Conexión del módulo USB con el microcontrolador

Para realizar una lectura se ha de esperar a que la línea RXF# se ponga a nivel
bajo, lo que significa que hay datos en el buffer de recepción para ser leídos. Una vez
confirmada la existencia de datos para ser leídos se debe poner la línea RD# a nivel bajo,
esto hace que el primer byte del buffer se ponga en el bus de datos para ser leído. Después
de leer los datos el microcontrolador vuelve a poner a nivel alto la línea RD# lo que hace
que el bus de datos se ponga en alta impedancia a la espera del siguiente ciclo de lectura.
En la Imagen 3.25 se puede ver el cronograma del ciclo de lectura.

Imagen 3.25 Cronograma del ciclo de lectura USB

77
Para el control del ciclo de escritura se utilizan las líneas TXE# y WR, en la
Imagen 3.26 puede verse el cronograma. Antes de iniciar el ciclo de escritura se
comprueba que TXE# este a nivel bajo, de lo contrario indicaría que el buffer de
transmisión está lleno y habría que esperar. Una vez verificado que existe espacio en el
buffer se pone WR a nivel alto y el byte a transmitir en el bus de datos, una vez estables
los datos (20ns) WR se pone a nivel bajo, lo que provoca la lectura de los datos del bus.

Imagen 3.26 Cronograma del ciclo de escritura USB

3.4.4 Decodificador VS1001k

El chip decodificador de MP3 está compuesto internamente por dos partes, un


procesador DSP y un decodificador digital-analógico (DAC) estéreo. El VS1001k recibe
el flujo de datos MP3 por un bus serie esclavo que es decodificado por el procesador DSP,
estos datos pasan luego por el decodificador digital-analógico de 18 bits y un pequeño
amplificador que proporciona una salida analógica a la que se puede conectar
directamente unos pequeños auriculares sin amplificación adicional. Estas dos partes, el
DSP y el DAC, tienen la alimentación independiente, denominadas Vcc digital y Vcc
analógica respectivamente, para evitar interferencias en el DAC. En la Imagen 3.27 puede
verse el funcionamiento interno del chip.

78
Imagen 3.27 Funcionamiento del decodificador VS1001k

En cuanto a sus características, el VS1001k decodifica MPEG layer 3 de MPEG-


1, MPEG-2 y MPEG-2.5, a todas las tasas de muestreo y de bit tanto en mono como en
estéreo. Soporta tasa de bit variable (VBR), utiliza un DAC estéreo de alta calidad y es
capaz de soportar auriculares de 30 Ω de carga sin amplificación adicional. Como ya se ha
dicho trabaja con una tensión de 2,8V a 3,6V y usa un cristal de 12-13MHz (con
multiplicador) o 24-26MHz (sin multiplicador)31.

Circuito y conexión al microcontrolador

En la Imagen 3.31 puede verse el circuito recomendado por las hojas de


especificaciones del VS1001k. El circuito está compuesto únicamente por unos pocos
componentes pasivos extra. El chip tiene dos entradas de alimentación como ya se ha
indicado, están separadas por inductancias y tienen un par de condensadores cada una, lo
que hace que las líneas estén más aisladas, con tensiones más estables y tengan menos
ruido. En cuanto a la señal de reloj se utiliza un cristal de 24,576MHz, aunque como se ha
comentado puede usarse de 12-13MHz o 24-26MHz dependiendo de si se utiliza el
multiplicador de reloj o no. El decodificador de conecta al microcontrolador a través de
dos interfaces, el SCI compuesto de cuatro líneas y el SDI compuesto de tres. Además
existen una línea de reset y DREQ, que indica al microcontrolador que tiene espacio en el
buffer para más datos MP3.

El circuito implementado ha sido el que se muestra en el esquemático de la


Imagen 3.32, muy similar al descrito en las hojas de especificaciones. En este caso se ha
utilizado un cristal de 13MHz con el multiplicador (26MHz) para poder reproducir
ficheros MP3 a todas las tasas de bit, también puede observarse dos jumpers y resistencias
a la salida de los auriculares. Cuando los jumpers están cerrados la salida de audio se
utiliza como salida para auriculares y cuando están abiertos como salida en línea, tal y
como indican las hojas de aplicación del VS1001k [VS10XXANOUT].

31 No a todas las frecuencias se pueden decodificar los MP3 con tasas de bit más altas.

79
Imagen 3.31 Circuito recomendado del VS1001k

Imagen 3.32 Circuito implementado del VS1001k

80
Protocolo de comunicación

Existen dos interfaces para comunicarse con el VS1001k, ambos basados en el


interfaz de comunicación serie SPI. El primero se denomina interfaz de datos serie (SDI)
y se utiliza para enviar el flujo de datos MP3 al decodificador. El segundo es el interfaz de
comandos serie (SCI) y se utiliza para enviar instrucciones y controlar el chip.

El interfaz SDI puede utilizarse en modo maestro o esclavo, en este caso se ha


usado como esclavo. El flujo de datos sólo circula del microcontrolador al decodificador
ya que esta línea es únicamente para el envío del flujo de datos MP3. Como se puede ver
en el cronograma de la Imagen 3.28 el interfaz está compuesto por tres líneas, BSYNC
indica el comienzo del primer bit, en SDATA se introducen los bits de datos y DCLK es la
señal de reloj. Los datos son leídos en el flanco de subida o bajada de la señal de reloj
dependiendo de como se haya configurado el decodificador. En cuanto al orden de los
bits, se puede seleccionar si se quiere primero el más o el menos significativo. El uso de
BSYNC no es obligatorio aunque si muy recomendable, si no se usa debe ponerse a nivel
alto. La línea DREQ indica que hay espacio en el buffer para recibir datos, cuando la línea
está en estado alto hay al menos 32 bytes libres en el buffer.

Imagen 3.28 Cronograma del interfaz SDI

La comunicación por el interfaz SCI consiste en un byte de instrucción, un byte


de dirección y una palabra de 16 bits. Cada ciclo de lectura o escritura puede leer o
escribir un único registro. El tipo de operación es especificada por el código de operación:
0x3 para las lecturas y 0x2 para las escrituras.

En la Imagen 3.29 puede verse el ciclo de lectura mediante el interfaz SCI.


Primero la línea XCS (chip select) se pone a nivel bajo, lo que le indica al dispositivo que
él es el seleccionado para la próxima transmisión32. Entonces, el código de operación de
lectura (0x3) es transmitido por la línea SI seguido de un byte con la dirección. Después
de transmitir la dirección el dispositivo pone en la línea SO los 16 bits de datos
correspondientes al registro de la dirección transmitida. La línea XCS se debe poner a
nivel alto una vez acabada la transmisión de los datos indicando la finalización del ciclo
de lectura.

32 El interfaz SPI soporta múltiples dispositivos en el mismo bus, mediante la línea chip select se selecciona
cual es el dispositivo activo cada vez.

81
Imagen 3.29 Ciclo de lectura SCI

Como en el ciclo de lectura, el ciclo de escritura se inicia poniendo a nivel bajo la


línea XCS. Después se envía la instrucción de escritura, la dirección y los datos a escribir
por la línea SI. En este caso SO no es utilizado. En la Imagen 3.30 puede verse el
cronograma del ciclo de escritura. Después de esta secuencia, al igual que en el ciclo de
lectura, XCS se pone a nivel alto.

Imagen 3.30 Ciclo de escritura SCI

3.4.5 Tarjeta Multimedia Card

El pinout de la tarjeta de memoria Multimedia Card está compuesto por siete


líneas, tres líneas de alimentación y cuatro para la transmisión de datos. En la Tabla 3.11
se puede ver el listado de pines y su descripción para una comunicación en modo SPI.

Pin # Nombre Tipo Descripción


1 CS Entrada Chip select
2 SDI Entrada Entrada de datos (Data in)
3 Vss Alimentación Tierra
4 Vcc Alimentación Alimentación
5 SCLK Entrada Reloj
6 Vss2 Alimentación Tierra
7 SDO Salida Salida de datos (Data out)
Tabla 3.11 Pinout de la tarjeta Multimedia Card

82
La tarjeta utiliza para la comunicación un interfaz SPI, por tanto sus líneas se
conectan a los pines correspondientes al puerto SPI del microcontrolador. Este puerto está
también conectado al integrado VS1001k y, como se verá, a la pantalla LCD, utilizándose
el pin CS para seleccionar un componente u otro. En la Imagen 3.31 puede verse como se
conecta la tarjeta a los puertos del microcontrolador, se pueden apreciar dos resistencias
en pull-up en las líneas SDI y SDO para proteger el bus cuando la tarjeta no está insertada
o cuando está en alta impedancia [SanDisk03].

Imagen 3.31 Conexión de la tarjeta MMC

Protocolo de comunicación

Las tarjetas Multimedia Card tienen dos modos de comunicación, el modo


Multimedia Card y el SPI. En este caso se usa el modos SPI por ser más simple, tener
implementado un puerto SPI por hardware en el microcontrolador y, sobre todo, por ser
compatible con las tarjetas Secure Digital (SD), de forma que se puedan usar tarjetas
MMC o SD de forma indistinta. El interfaz SPI ya ha sido explicado en el apartado
anterior.

Durante la inicialización de la tarjeta (momento en el que está en modo


Multimedia Card) se ha de seleccionar que tipo de protocolo de comunicación que se va a
utilizar. Los detalles sobre los comandos de inicialización, configuración, lectura,
escritura, etc. se explican en la sección de firmware del microcontrolador, en la librería del
la MMC.

3.4.6 Pantalla LCD

La pantalla elegida es una pantalla LCD gráfica de 84x48 pixels, utilizada por los
teléfonos móviles Nokia 3210 y 3310. Esta pantalla utiliza sólo ocho líneas, con un
interfaz SPI simplificado, ya que sólo tiene comandos de escritura y por tanto no tiene la
línea SDO. En la Imagen 3.32 se puede ver el pinout de la pantalla, la comunicación se
realiza mediante las líneas SDIN, SCLK y SCE, correspondientes al interfaz SPI, y las
líneas D/C y RES, todas ellas entradas.

83
Imagen 3.32 Pinout de la pantalla LCD

El circuito que conecta la pantalla (Imagen 3.33) consta de tan sólo dos
componentes pasivos adicionales, un condensador que conecta Vout (de uso interno por el
controlador del LCD) a tierra, y una resistencia en pull-up en la línea SCE. Las líneas
SDIN y SCLK se conectan al puerto SPI del microcontrolador, utilizándose SCE (chip
enable) para indicar a la pantalla que es la destinataria de la siguiente comunicación
enviada por el bus SPI

Imagen 3.33 Circuito usado con la pantalla LCD

Protocolo de comunicación

El microcontrolador se comunica con la pantalla por un interfaz SPI simplificado


con comunicación únicamente en una dirección más la línea D/C que selecciona el tipo de
instrucción. En la Imagen 3.34 se puede ver el cronograma de una comunicación con la
pantalla. La pantalla puede recibir dos tipos de instrucciones que se seleccionan mediante
la línea D/C, si D/C está a nivel bajo el byte enviado por el bus es interpretado como un
comando y si está a nivel alto los siguientes bytes recibidos se almacenan en la memoria
RAM de la pantalla cuyos bits corresponden a píxeles de la pantalla. Los datos se
transmiten enviando primero el bit más significativo y son capturados en los flancos de
subida de la señal de reloj. Los detalles sobre los comandos, inicialización y utilización se
explican en la sección de firmware del microcontrolador, en la librería del LCD.

84
Imagen 3.34 Cronograma de comunicación con la pantalla

3.4.7 Botonera

Para la interacción del usuario con el reproductor se han dispuesto un conjunto de


seis botones mediante los cuales se realizarán las acciones de control de reproducción,
configuración, volumen, navegación por el árbol de directorios, etc. Los botones son
pulsadores que están conectados a las líneas RC0-RC2 y RE0-RE2 del microcontrolador
(Imagen 3.35) de forma que cuando el botón está pulsado la línea está en estado alto y
cuando no en estado bajo.

Imagen 3.35 Circuito de la botonera

3.4.8 Otros elementos

El reproductor tiene dos interfaces para conexión externa que facilitan el


desarrollo del mismo, un conector para programar el microcontrolador sin necesidad de
extraerlo de la placa (ICSP) y un puerto UART para conectar al puerto serie de un
ordenador y depurar con más facilidad el firmware. El esquemático de estos puede verse
en la Imagen 3.36.

85
Imagen 3.36 Esquemático de los interfaces ICSP y UART

86
4. Diseño y desarrollo del firmware

4.1 Introducción
Una vez diseñado el hardware del dispositivo el siguiente paso es el desarrollo del
firmware del microcontrolador. El microcontrolador se encarga del control de los distintos
componentes del dispositivo: el chip decodificador MP3, el módulo de comunicación
USB, la tarjeta de memoria, la pantalla LCD y la botonera. Además incorpora diversas
librerías donde se implementa el protocolo de comunicación con el ordenador, el sistema
de ficheros FAT, la lectura de la información ID3 y otras funciones.

4.2 Herramientas de desarrollo utilizadas


Debido a la complejidad y gran cantidad de código a desarrollar el firmware del
microcontrolador se ha realizado en lenguaje C, utilizando de forma puntual alguna
instrucción en ensamblador donde ha sido necesario un incremento de la eficiencia del
código en funciones donde la velocidad es un factor crítico.

El compilador utilizado para el desarrollo del código es el PCWH de la empresa


CCS. Este compilador permite la operación de tipo de datos de 1, 8, 16 y 32 bits, posee
gran cantidad de funciones y librerías que ayudan al diseño, permite la inserción de
código ensamblador en cualquier punto, soporta funciones inline33 (lo que mejora la
eficiencia de dichas funciones), etc. Éstas, entre otras características, hacen que sea el
compilador finalmente elegido. No obstante esta no es una elección crítica, el uso de otro
compilador es posible aunque probablemente incrementase el tiempo de diseño. También
es posible el paso del código desarrollado en éste a otro compilador, realizando algunos
cambios para adaptar los elementos y funciones especificas de este compilador al otro.

Grabación del firmware

En la grabación34 del firmware se han utilizado varios medios. Para la grabación


de forma directa del microcontrolador se ha fabricado un programador de PICs del tipo
JDM y para la grabación en el propio circuito se han empleado dos técnicas; actualización
de éste por software conectando el reproductor al puerto serie del ordenador y mediante
un interfaz ICSP35. La actualización por software se realiza conectando el puerto UART
del microcontrolador a un pequeño circuito basado en el integrado MAX323236 que a su
vez se conecta al puerto serie del ordenador, en la Imagen 4.1 puede verse el esquemático
típico montado en este circuito.

33 Función que al compilar el código éste se repite en cada llamada, esto hace que el código se ejecute más
rápido a costa de algo más de memoria de programa.
34 Se utiliza la palabra grabación y no programación del microcontrolador para evitar confusión con la
programación en C del firmware.
35 Este fue incluido en el segundo prototipo del reproductor.
36 Un transductor que transforma la tensión de 3,3V usada por el microcontrolador a la tensión estándar del
RS232.

87
Imagen 4.1 Esquemático usado con el MAX3232

Debido a la lentitud de las actualizaciones mediante software, los errores durante


este tipo de actualizaciones y el espacio extra que supone el código de actualización en la
memoria del microcontrolador se optó por el uso del interfaz ICSP para la actualización in
situ del firmware. No obstante la forma finalmente más utilizada para la actualización del
firmware ha sido mediante un programador de PICs, en el primer prototipo se empleó el
programador fabricado a tal efecto, pero para el segundo prototipo se adquirió un
programador algo más complejo (Imagen 4.2) que graba el firmware en menos tiempo e
incorpora la salida ICSP.

Imagen 4.2 Programador de PICs

En cuanto al software utilizado para la grabación se han utilizado dos programas,


con el primer programador se ha utilizado el programa IC-Prog y con el segundo el
programa WinPic800. Ambos son programas gratuitos, el segundo tiene más opciones y se
puede grabar más rápido que con el IC-Prog pero no funciona con el programador JDM
fabricado ya que se ha utilizado un esquema demasiado simple para este programa.

88
4.3 Librerías desarrolladas

4.3.1 Introducción

Para hacer un código más legible y estructurado se ha decidido dividir las


funciones en diversas librerías. Estas librerías agrupan las funciones de cada uno de los
elementos del reproductor y las funciones afines como pueden ser las de acceso a la
estructura de ficheros FAT. Estas funciones son posteriormente utilizadas por el programa
principal o por otras librerías, haciendo así una estructura de capas de modo que en el
programa principal se utilizan sólo funciones de alto nivel. En la Imagen 4.3 puede verse
el esquema del firmware del microcontrolador, compuesto por el programa principal y el
conjunto de librerías.

Imagen 4.3 Esquema de librerías.

4.3.2 Librería VS1001K

Esta librería contiene las funciones necesarias para el control del chip
decodificador de MP3 VS1001K. Como ya se ha indicado en la descripción del hardware,
el VS1001K tiene dos interfaces de comunicación, el SDI por el que se le envía el flujo de
datos MP3 y el SCI por el que se configura y se obtiene información sobre el MP3 en
reproducción. El protocolo de comunicación mediante estos interfaces se ha explicado en
el capítulo anterior. La librería se compone de las funciones para la comunicación por SDI
y SCI, y otras funciones de más alto nivel que utilizan las anteriores para el control del
decodificador.

89
Funciones SDI

En las siguientes tablas (Tablas 4.1) se listan las funciones que hacen uso del
interfaz SDI, su explicación y diagrama de flujo.

void sdi_out(byte data)


Función de bajo nivel que envía el byte data a través del interfaz SDI.
No se comprueba el buffer.

void sdi_send()
Esta función utiliza sdi_out para enviar los 32 bytes de la variable
global vs_data.

void morezeroes(void)
Envía 2048 “0” por el interfaz SDI. Función necesaria para la
reproducción de MP3.

void sine_test(byte val, byte tms)


Genera un pitido durante tms + 150 milisegundos. Val es un valor entre
48 y 119 que se define por: FsIdx=(val-48) mod 9 ; FSin=(n-48)/9
FsIdx es un valor de entre 0 y 8 que especifica la frecuencia (de 48KHz
a 8KHz) y FSin, valor entre 0 y 7, especifica el número de muestras (de
32.000 a 4.000)37

37 Para más información sobre las tablas de frecuencias y muestras consultar las hojas de especificaciones
del decodificador VS1001k

90
Tablas 4.1 Funciones SDI

Funciones SCI

Como se ha indicado, el interfaz SCI se utiliza para el envió de comandos al


decodificador. Estos comandos consisten en lecturas o escrituras de los registros de
configuración de 16 bits. En la Tabla 4.2 se listan los registros accesibles mediante este
interfaz y si se trata de un registro de lectura o escritura.

Nombre Tipo Dirección Función


MODE L/E 0 Registro de control
STATUS L/E 1 Estado del VS1001k
INT_FCTLH - 2 Registro interno
CLOCKF L/E 3 Configuración del reloj
DECODE_TIME Lectura 4 Tiempo decodificado, en segundos
AUDATA Lectura 5 Información del audio decodificado
WRAM Escritura 6 Registro para subir programas a la
RAM
WRAMADDR Escritura 7 Dirección base para escribir en la RAM
HDAT0 Lectura 8 Información de cabecera
HDAT1 Lectura 9 Información de cabecera
AIADDR L/E 10 Dirección de inicio de la aplicación
VOL L/E 11 Control de volumen
Reservados - 12
AICTRL[x] L/E 13+x Para acceder a los programas cargados
Tabla 4.2 Registros internos del decodificador

Los registros WRAM, WRAMADDR y AICTRL[x] se utilizan para subir


programas a la RAM del decodificador, de forma que ejecute pequeñas aplicaciones como
un ecualizador. Al no haberse desarrollado ningún programa de este tipo estos registros no
han sido utilizados.

A continuación se realiza una explicación más detallada de los registros de los


que hace uso la librería desarrollada:

91
MODE

La descripción de los bits de este registro se puede ver en la Tabla 4.3.

Bit Nombre Función Valor Descripción


0 SM_DIFF Diferencial (en estéreo crea un 0 Fase de audio normal
virtual surround) 1 Canal izquierdo invertido
1 SM_FFWD Avance rápido 0 Avance normal
1 Avance rápido
2 SM_RESET Reseteo software 0 Normal
1 Reset
3 SM_UNUSED1 0
4 SM_PDOWN Apagado 0 Encendido
1 Apagado
5 SM_UNUSED2 0
6 SM_UNUSED3 0
7 SM_BASS Realce bass/treble 0 Apagado
(graves/agudos) 1 Encendido
8 SM_DACT Flanco de reloj para SDI 0 Subida
1 Bajada
9 SM_BITORD Orden del bits en el bus SDI 0 Primero MSB
1 Último MSB
10 SM_IBMODE Modo del bus 0 Esclavo
1 Maestro
11 SM_IBCLK Reloj del bus cuando está en 0 512 kHz
modo maestro. 1 1024 kHz
Tabla 4.3 Descripción de los bits del registro MODE

STATUS

Controla el estado interno del VS1001k, los bits 0 y 1 sirven para el control de la
salida analógica de volumen y el bit 3 para apagar la parte analógica del chip. Este
registro no es realmente necesario, estas funciones se pueden controlar con otros registros.

CLOCKF

Se utiliza para indicar la frecuencia del reloj que se está utilizando. La fórmula
para calcular esta frecuencia es: Frecuencia de cristal / 2000. Los valores válidos para este
registro son 0..32767, el bit más significativo se utiliza para indicar si se activa o no el
multiplicador de reloj. Hay que recordar que por debajo de 24,576 Mhz el chip no es
capaz de decodificar a todas las tasas de bit.

DECODE_TIME

Este registro almacena el tiempo en segundos del flujo de datos que se está
decodificando en este momento.

92
AUDATA

Cuando se decodifican datos correctos la tasa de bits se muestra en este registro


en los bits 8..0. En los bits 12..9 se muestra la frecuencia de muestreo según la Tabla 4.4,
y el bit 15 sirve para indicar si el sonido es mono ('0') o estéreo ('1'). El resto de bits no se
utilizan y están a '0'.

Bits 12..9 Frecuencia de muestreo


0b0000 Desconocido
0b0001 44100 Hz
0b0010 48000 Hz
0b0011 32000 Hz
0b0100 22050 Hz
0b0101 24000 Hz
0b0110 16000 Hz
0b0111 11025 Hz
0b1000 12000 Hz
0b1001 8000 Hz
Tabla 4.4 Frecuencias según los bits del registro AUDATA

WRAM

Este registro se utiliza para subir programas a la memoria RAM del


decodificador. La dirección de inicio debe ser inicializada (WRAMADDR) antes de la
primera llamada a WRAM. Son necesarias dos escrituras en el registro WRAM (16 bits
cada uno) para escribir una palabra del programa (32 bits), siendo el byte más
significativo el primero. Después de cada escritura el puntero interno es
autoincrementado.

WRAMADDR

Este registro se utiliza para indicar la posición de memoria en la que se escribirán


los datos del programa transferidos posteriormente con el registro WRAM. El espacio
disponible para programas de usuario se encuentra entre las direcciones 0x4000 y 0x43ff.

En este proyecto no se han utilizado programas de usuario ejecutándose en el


decodificador, por tanto los comandos WRAM y WRAMADDR no se han utilizado.

93
HDAT0 y HDAT1

En estos registros se almacena la información de cabecera extraída del flujo de


datos MPEG cuando se está decodificando. En la Tabla 4.5 se detalla el significado de
cada unos de los bits de los registros.

Bit Función Valor Explicación


HDAT1[15:5] Palabra sincronismo 2047 Datos válidos
HDAT1[4:3] ID 3 ISO 11172-3 1.0
2 MPEG 2.0 (1/2-rate)
1 MPEG 2.5 (1/4-rate)
0 MPEG 2.5 (1/4-rate)
HDAT1[2:1] Capa 3 I
2 II
1 III
0 Reservada
HDAT1[0] Bit Protección 1 Sin CRC
0 Con CRC
HDAT0[15:12] Tasa de bit ISO 11172-3
38
HDAT0[11:10] Tasa de Muestreo 3 Reservada
2 32/16/8 kHz
1 48/24/12 kHz
0 44/22/11 kHz
HDAT0[9] Pad bit 1 Slot adicional
0 Marco normal
HDAT0[8] Bit privado
HDAT0[7:6] Modo 3 Mono
2 Dual Channel
1 Joint Stereo
0 Estéreo
HDAT0[5:4] Extensión ISO 11172-3
HDAT0[3] Copyright 1 Con copyright
0 Libre
HDAT0[2] Original 1 Original
0 Copia
HDAT0[1:0] Énfasis 3 CCITT J.17
2 Reservado
1 50/15 microseg
0 Sin énfasis
Tabla 4.5 Bits de los registros HDAT0 y HDAT1

38 Si el campo ID es '1' se utiliza la tasa de muestreo más alta, si es '0' la intermedia y si es '2' o '3' la más
baja.

94
AIADDR

Este registro indica la dirección de inicio del código del programa escrito antes
mediante los registros WRAMADDR y WRAM. Como no se utiliza un programa de
usuario este registro no es inicializado.

VOL

El registro VOL controla el volumen de reproducción. Se establece un valor entre


0 y 255 para cada canal, esto define la atenuación desde el nivel máximo de volumen en
pasos de 0,5 dB. El byte más significativo controla el canal izquierdo y el menos
significativo el derecho.

Poner el volumen con silencio total (255 para ambos canales) desconecta la
alimentación analógica, lo que genera un pequeño click en los auriculares. Para evitar esto
se ha utilizado el nivel 254 como mínimo volumen, ya que es prácticamente inaudible.

AICTRL[x]

El registro AICTRL se utiliza para acceder al programa de usuario del


decodificador. No se ha utilizado en este proyecto.

En la Tabla 4.6 se describen las funciones implementadas en la librería del


VS1001k y utilizan el protocolo SCI haciendo uso de los registros que se acaban de
describir.

byte SCI(byte out)


Envía el byte out por el bus SCI al decodificador, y devuelve el byte de
respuesta.

int16 vs1001_SCI_Read(byte Adr)


Lee y devuelve el byte de la posición Adr.

void vs1001_SCI_Write(byte Adr, byte dataH, byte dataL)


Graba los bytes dataH y dataL en la dirección Adr.

void vs1001_swreset()
Genera un reset software del decodificador.

void get_vol()
Devuelve el valor del volumen del decodificador.

95
void set_vol(byte vol)
Establece el valor vol como volumen del decodificador. El mismo
volumen para ambos canales. Vol. máximo = 0; Vol. mínimo=255

void get_mp3_info()
Lee la información los datos MP3 que se están siendo decodificados
actualizando las variables:
● vs_bitrate: tasa de bit del flujo de datos MP3
● vs_samplerate: frecuencia de muestreo.
● vs_stereo: mono=0 estéreo=1
● vs_min: minuto del flujo de datos que se está decodificando.
● vs_seg: segundo del flujo de datos que se está decodificando.

void vs1001_PutBass(int1 actv)


Si actv es 1 activa el Bass-Treble, si es 0 lo desactiva.

void vs1001_PutDiff(int1 actv)


Si actv es 1 activa el modo diferencial (si el sonido es estéreo crea un
Virtual Surround), si es 0 lo desactiva.
Tabla 4.6 Funciones SCI

4.3.3 Librería Multimedia Card

En la librería Multimedia Card se han implementado las funciones para el control


a bajo nivel de la tarjeta de memoria. Estas funciones son principalmente de
inicialización, configuración y lectura. No se han implementado las funciones de escritura
ya que no se han utilizado en la realización del presente proyecto.

Como ya se indicó en el apartado anterior las tarjetas de memoria multimedia


card pueden utilizar dos protocolos, el protocolo propio (modo Multimedia Card) y el SPI,
compatible con las tarjetas Secure Digital. En este caso se ha optado por la utilización del
protocolo SPI por su compatibilidad con las tarjetas Secure Digital y por ser de más fácil
implementación ya que el microcontrolador posee un modulo SPI hardware. El modo de
comunicación se establece durante la inicialización de la tarjeta. En la Imagen 4.4 puede
verse la función de cada pin de la tarjeta dependiendo del modo de comunicación
seleccionado.

96
Imagen 4.4 Pinout de la tarjeta MMC

En un mismo bus de MultimediaCard pueden conectarse hasta un máximo de 30


tarjetas de memoria, el método para seleccionar una tarjeta determinada depende del
modo de comunicación seleccionado. En el modo MMC la tarjeta se selecciona mediante
una dirección relativa (RCA, relative card address) que corresponde a un nombre único
asignado a la tarjeta durante el proceso de identificación, y la tarjeta es seleccionada
especificando su dirección relativa. En modo SPI cada tarjeta de memoria tiene un pin de
selección de la tarjeta (CS, chip select), de esta forma una tarjeta se selecciona poniendo
esta línea a nivel bajo. Para un dispositivo con gran número de tarjetas en un mismo bus
sería preferible el uso del modo MMC, ya que sería necesario un gran número de líneas
para controlar todas las tarjetas (una línea CS por tarjeta de memoria). En este caso, al
controlarse únicamente una tarjeta, se considera más adecuado el uso el modo SPI ya que
simplifica tanto la inicialización como la selección de la tarjeta.

Protocolo del bus

En la Imagen 4.5 se puede ver el diagrama esquemático del protocolo en cada


modo. En modo MMC el interfaz consta de tres señales: reloj, comando y datos. La señal
de reloj se utiliza para mantener la sincronización entre el sistema y la tarjeta, la señal de
comando se usa para mandar comandos del microcontrolador a la tarjeta y devuelve la
respuesta de la tarjeta, y la señal de datos se utiliza para leer y escribir datos de la tarjeta.
Las señales de comando y datos son bidireccionales.

97
En modo SPI el interfaz consta de cuatro señales: reloj, entrada de datos, salida de
datos y selección del chip. El reloj, como en el modo MMC, se utiliza para mantener la
sincronización entre el sistema y la tarjeta. La entrada de datos de utiliza para enviar
comandos a la tarjeta y escribir datos, mientras que la salida de datos se utiliza para recibir
la respuesta de la tarjeta y para leer datos. Las señales de entrada y salida de datos son
unidireccionales. La señal de selección del chip se utiliza para seleccionar una tarjeta en
particular cuando hay varias conectadas al bus.

Imagen 4.5 Diagramas de los protocolos MMC y SPI

Existen tres modos de transferencia: transferencia de solo un bloque,


transferencia de múltiples bloques y transferencia en flujo. El modo MMC soporta los tres
métodos de transferencia; mediante un comando se especifican el número de bloques a
transferir, uno o más dependiendo si se utiliza el método de un solo bloque o múltiples.
Para las transferencias en flujo no existe el concepto de bloque; se transfieren bytes hasta
que la transferencia es detenida. A partir del estándar 3.1 de la MMCA (publicado en junio
de 2001) el modo SPI soporta tanto transferencias de un solo bloque como múltiples, el
tamaño del bloque se cambia de la misma forma que en modo MMC.

Existen un total de 59 comandos, aunque no todos funcionan en ambos modos.


En la Tabla 4.7 se listan un conjunto de los comandos más usuales en modo SPI.

98
Comando Argumento Resp. Nombre Descripción
CMD0 No R1 GO_IDLE_STATE Resetea la tarjeta.
Si CS está a nivel bajo la tarjeta
entra en modo SPI
CMD1 No R1 SEND_OP_COND Activa el proceso de inicialización
de la tarjeta.
CMD9 No R1 SEND_CSD Usado para leer la información
CSD
CMD10 No R1 SEND_CID Usado para leer la información
CID
CMD13 No R2 SEND_STATUS Lee la información del registro de
estado.
CMD16 [31:0] Tamaño R1 SET_BLOCKLEN Cambia el tamaño del bloque
del bloque utilizado por los comandos
CMD17 y CMD2439
CMD17 [31:0] Dirección R1 READ_SINGLE_B Comando para leer datos de la
LOCK tarjeta, empezando desde la
dirección especificada como
argumento, con un tamaño de
bloque introducido por CMD16
CMD24 [31:0] Dirección R1 WRITE_BLOCK Escribe datos en la tarjeta,
empezando desde la dirección
especificada y con un tamaño de
bloque introducido por CMD16
CMD32 [31:0] Dirección R1 TAG_SECTOR_ST Establece la dirección del primer
AR sector del rango que se va a borrar
CMD33 [31:0] Dirección R1 TAG_SECTOR_EN Establece la dirección del último
D sector del rango que se va a borrar
CMD38 [31:0] No importa R1 EREASE Realiza el borrado en el rango
especificado
CMD58 No R1 READ_OCR Lee el contenido del registro OCR
CMD59 [31:1] No importa R1 CRC_ON_OFF Activa o desactiva la opción de
[0:0] CRC CRC.
Si CRC=1 se activa
Si CRC=0 se desactiva
Tabla 4.7 Comandos más utilizados del protocolo SPI

En modo SPI la tarjeta puede devolver dos tipos de respuestas dependiendo del
tipo de comando enviado: R1 y R2. El tipo de respuesta R2 es una respuesta de 16 bits
que se devuelve después de un comando CMD13, y el tipo R1 es una respuesta de 8 bits
que se devuelve después de cualquier otro tipo de comando. En Imagen 4.6 aparece la
estructura de ambos tipos de respuesta.

39 Algunas tarjetas solo permiten tamaños de bloque de 512 bytes, por tanto solo se ha utilizado este
tamaño de bloque.

99
Imagen 4.6 Estructura de las respuestas R1 y R2

Funciones de la librería

Comunicación básica

Toda la comunicación se basa en la función:

byte SPI(byte out)

Es la función más básica, que envía un byte por el puerto SPI del
microcontrolador y devuelve la respuesta.

La segunda función básica de la librería de control de la tarjeta es:

byte MMCCommand(byte CMD, unsigned int16 AdrH, unsigned int16


AdrH, byte CRC)

Cada comando consiste en 48 bits (6 bytes) que comprenden un bit de inicio


(siempre 0), un bit de transferencia (siempre 1), 6 bits indicando el comando, 4 bytes con
los argumentos del comando, 7 bits de CRC y un bit de fin (siempre a 1). Esta función
envía un comando a la tarjeta, de forma que 'CMD' es el primer byte enviado (que incluye
el comando), 'AdrH' y 'AdrL' son los argumentos del comando, y 'CRC' es el último byte

100
enviado (que incluye el CRC). La función devuelve una respuesta R1 de la tarjeta (para
una respuesta R2 sería necesario hacer una llamada adicional a la función SPI). Si fuese
necesario el envío o lectura de datos después de un comando, éste se haría mediante
llamadas a la función SPI.

Inicialización

Antes de poder utilizar la tarjeta hay que inicializarla ya que inicialmente la


tarjeta entra en modo MMC. En la Imagen 4.7 se puede ver un diagrama del proceso de
inicialización utilizado en la función:
byte MMCInit()

Imagen 4.7 Diagrama de inicialización

101
El proceso de inicialización es el siguiente:

1. Inicialmente se pone a nivel alto la señal CS, de forma que se desactiva la


tarjeta.
2. Se envían 80 pulsos de reloj para la inicialización
3. La señal CS se pone a nivel bajo.
4. Se envía el comando CMD0 (GO_IDLE_STATE). La tarjeta aún está en
modo MMC y por tanto se ha de enviar el mensaje en este formato. En
concreto se envía: 0x40, 0x00, 0x00 y 0x95, donde 0x40 es el comando y
0x95 el CRC.
5. A partir de este momento la tarjeta pasa a modo SPI y la respuesta está en
formato R1. Esta respuesta debe ser 0x01, de lo contrario ha ocurrido un
error y se debe comenzar de nuevo el proceso de inicialización.
6. Se desactiva y se vuelve a activar la señal CS.
7. Se envía el comando CMD1 (SEND_OP_CMD) hasta que la respuesta sea
0x00. Se ha fijado un máximo de 128 intentos antes de dar error y por tanto
reinicializar todo el proceso.
8. Se leen los registros CID, CSD y OCR mediante los comandos CMD10,
CMD9 y CMD58 respectivamente. Se comprueban que las respuestas a estos
comandos sean 0x00.
9. La tarjeta ya está inicializada en modo SPI correctamente. Se fija el tamaño
del bloque de 512 bytes para posteriores lecturas/escrituras mediante el
comando CMD16.

Configuración

Durante la inicialización se configura la tarjeta de memoria de forma que pueda


ser leída y escrita mediante en modo SPI. La única configuración adicional necesaria que
se ha de efectuar después de esta inicialización es la modificación del tamaño del bloque,
si dicha modificación fuese necesaria. Para este propósito se ha implementado la función:

void MMCSetDataMode(byte bytes)

Donde 'bytes' es el tamaño del bloque en bytes, que por defecto después de la
inicialización es 512. Es importante tener en cuenta que algunas tarjetas de memoria solo
soportan escrituras con un tamaño de bloque de 512 bytes, por lo que esta función no
tendría efecto. Para fijar el tamaño del bloque se hace una llamada al comando CMD16
(SET_BLOCK_LENGTH).

Lectura

Se han implementado tres funciones de lectura: para leer un byte, dos bytes y un
bloque de datos. Esto se ha hecho así para optimizar el código de forma que se llame a
una u otra función dependiendo de lo que se quiera leer y acelerando la ejecución del
código en algunas partes críticas obteniendo mejores tasas de transferencia. Las funciones
son:

102
byte LeeChar(int32 dir)
int16 LeeInt16(int32 dir)
int MMCLeeBloque(int32 dir, byte *Gbuffer)

Las dos primeras funciones fijan un tamaño de bloque de 1 y 2 bytes


respectivamente haciendo una llamada a la función MMCSetDataMode, realizan la lectura
de los datos en la posición 'dir' mediante el comando CMD17 (READ_SINGLE_BLOCK)
y restauran el tamaño del bloque con el valor inicial. La función MMCLeeBloque lee
mediante el comando CMD17 un bloque de datos con el tamaño que haya fijado antes de
la llamada a la función y escribe los datos en 'Gbuffer'.

Escritura

Aunque finalmente no ha sido necesario el uso de la escritura en la tarjeta de


memoria en este proyecto, se ha implementado una función de escritura de bloque para
facilitar la adición de futuras funcionalidades. La función es:

int MMCGrabaBloque(int32 dir, byte *Gbuffer)

Escribe en la dirección 'dir' desde 'Gbuffer' tantos bytes como el tamaño del
bloque definido en ese momento. Para ello hace uso del comando CMD24
(WRITE_BLOCK), posteriormente se envía un token inicio de bloque y los datos a
escribir. La función devuelve 0 si ha habido algún error, de lo contrario devuelve 1.

4.3.4 Librería FAT16

Para almacenar los archivos mp3 en la tarjeta de memoria es necesario una


estructura mediante la cual se organice la información almacenada. El sistema de archivos
es el responsable de la organización de los datos en una unidad de almacenamiento. Se ha
elegido el uso del sistema de archivos FAT16 ya que es el más utilizado en las tarjetas de
memoria y los dispositivos que las utilizan, por tanto la tarjeta podrá ser utilizada y leída
en diferentes dispositivos.

No obstante el sistema de archivos FAT16 tiene una serie de limitaciones que hay
que tener en cuenta, éstas son:

● 65517 archivos como máximo.


● 512 archivos como máximo en el directorio raíz.
● Nombres de archivos de 8+3 caracteres (sin uso del sistema de nombres
largos)
● Tamaño máximo del volumen de 2 GB (4 GB con tamaño del cluster de
64 KB).

Estas limitaciones no son un inconveniente en este proyecto, siempre y cuando no


se quieran usar tarjetas de memoria de más de 2 GB. En la Tabla 4.8 podemos ver una
comparación de los distintas versiones de FAT.

103
FAT12 FAT16 FAT32
Máximo tamaño de 32 MB 2 GB 4 GB
archivo
Número máximo de 4,077 65,517 268,435,437
archivos
Longitud máxima del 8.3 8.3 (Sin LFN) 255 usando LFN
nombre de archivo
Tamaño máximo de 32 MB 2 GB (4GB con 8 TB
volumen clusters de 64KB)
Tabla 4.8 Comparación de las versiones de FAT

Estructura de FAT16

La estructura del sistema de archivos FAT16 se detalla en el apéndice II.

Funciones de la librería

En la librería de funciones para el acceso al sistema de archivos las funciones se


pueden clasificar en cuatro tipos: función de inicilización, funciones de acceso a bajo
nivel, funciones de acceso a alto nivel, funciones de lectura de MP3. En las funciones de
acceso a bajo nivel se trabaja directamente con posiciones de memoria y números de
cluster, mientras que las de acceso a alto nivel se simplifica el acceso al sistema de
archivos de forma que se utilizan manejadores para abrir, leer y cerrar archivos. Las
funciones de lectura de MP3 son una versión modificada de las funciones de lectura de
archivos de forma que aumente la velocidad de lectura y se puedan reproducir MP3 de
tasas de bit altos.

Inicialización

La función de inicialización void MMCFat16_Ini() se encarga de buscar en la


memoria la primera partición a partir del MBR, obtener datos necesarios para el acceso al
contenido de la partición (sectores por FAT, sectores por cluster, bytes por cluster, etc) y
de localizar la tabla FAT (se utiliza la primera), el directorio raíz y el área de datos. Estos
datos se introducen en variables globales que posteriormente utilizará el resto de
funciones de la librería.

Acceso a bajo nivel

int1 IsRegValido(int32 dir)

El valor 'dir' es la dirección absoluta de una entrada dentro de un directorio (el


directorio raíz o cualquiera de sus subdirectorios). La función devuelve '1' si se trata de
una entrada válida (que este en uso y no borrada), de lo contrario devuelve '0'.

104
int1 IsFichero(int32 dir)

La función IsFichero es similar a IsRegValido, 'dir' ha de ser la dirección


absoluta de una entrada dentro de un directorio. En este caso la función comprueba si la
entrada es de un archivo, devolviendo '1' en caso de que lo sea o '0' en caso de que sea una
entrada no válida o un directorio.

int16 NextCluster(int16 cluster)

Esta función comprueba en la tabla FAT cual es el siguiente cluster al cluster


pasado, y lo devuelve .

int32 MMCDirFromCluster(int16 cluster)

La función MMCDirFromCluster devuelve la dirección absoluta del cluster


pasado como parámetro.

int32 MMCFileSize(int32 dir)

El parámetro 'dir' de la función MMCFileSize es la dirección absoluta de una


entrada dentro de un directorio correspondiente a un archivo. La función devuelve el
tamaño de dicho archivo.

int16 MMCFirstCluster(int32 dir)

El parámetro 'dir' de la función MMCFirstCluster es la dirección absoluta de una


entrada dentro de un directorio correspondiente a un archivo. La función devuelve el
primer cluster donde se almacenan los datos de dicho archivo.

void MMCFileName(int32 dir, byte *nombre)

El parámetro 'dir' de la función MMCFileName es la dirección absoluta de una


entrada dentro de un directorio correspondiente a un archivo. La función escribe en
'nombre' el nombre completo (extensión incluida) de dicho archivo.

void MMCFileNameNoExt(int32 dir, byte *nombre)

El parámetro 'dir' de la función MMCFileNameNoExt es la dirección absoluta de


una entrada dentro de un directorio correspondiente a un archivo. La función escribe en
'nombre' el nombre de dicho archivo sin la extensión.

105
void MMCFileExt(int32 dir, byte *ext)

El parámetro 'dir' de la función MMCFileNameNoExt es la dirección absoluta de


una entrada dentro de un directorio correspondiente a un archivo. La función escribe en
'ext' la extensión de dicho archivo.

Acceso a alto nivel

Para la navegación entre directorios, listado de archivos en directorios y lectura


de archivos se han implementado funciones que usan manejadores que hacen referencia a
un archivo o directorio determinado. La librería permite la apertura simultanea de varios
archivos y directorios, identificando cada uno de ellos mediante un manejador que hace
referencia a una estructura de datos.

La estructura de datos del manejador de archivos es la siguiente:

typedef struct {
int16 Root_cluster; //Primer Cluster
int16 Current_Cluster; //Cluster actual
int16 Next_Cluster; //Siguiente cluster
int32 Cluster_Offset; //Desplazamiento desde el inicio del cluster
int32 Current_Addrs; //Posicion actual en el archivo
int32 Size; //Tamanyo del fichero
int32 Read; //Bytes leidos (posicion logica en el fichero)
int32 dir_addr; //Direccion de la entrada del archivo
byte usado; //Si el manejador esta siendo usado o no
} TFHandle;

La estructura de datos del manejador de directorios es la siguiente:

typedef struct {
int32 direccion; //Direccion del inicio del directorio
int32 dirpadre; //Direccion del directorio padre
int16 rootcluster; //Primer cluster
int32 cursor; //Indica la posicion actual en el directorio
byte usado; //Si el manejador esta siendo usado o no
} TDHandle

TFHandle Fhandle[MAX_FILES];
TDHandle DHandle[MAX_DIR];

Se definen dos vectores, uno de cada tipo, de forma que el manejador del archivo
o directorio es el índice del vector donde se encuentran los datos de ese archivo o
directorio, y donde el tamaño del vector determina el número de archivos o directorios
que pueden estar abiertos de forma simultánea:

byte MMCOpenFile(int32 dir)

La función MMCOpenFile abre un archivo y devuelve el manejador de este. El


parámetro 'dir' es la dirección absoluta de la entrada del archivo a abrir dentro de un
directorio.

106
byte MMCResetFile(byte hand)

La función MMCResetFile pone el cursor de lectura del archivo especificado por


el manejador 'hand' al principio del archivo. Devuelve '0' si el manejador corresponde a un
archivo no abierto y '1' si se la operación ha tenido éxito.

void MMCCloseFile(byte hand)

La función MMCCloseFile cierra el archivo al que hace referencia el manejador


'hand'.

byte MMCReadFile(byte hand, byte *Gbuffer)

La función MMCReadFile lee tantos bytes como estén definidos como tamaño de
bloque de la tarjeta (normalmente se utilizan 512 bytes) del archivo al que hace referencia
el manejador 'hand' a partir del cursor de lectura del archivo (lectura secuencial), y los
escribe en 'Gbuffer'. Esta función hace que el cursor de lectura del archivo avance tantos
bytes como han sido leidos.

Si se observa la estructura de datos del manejador de archivos, no existe ningún


parámetro 'cursor' propiamente dicho. Este se calcula a partir del valor de los parámetros
'Current_Cluster' y 'Cluster_offset'.

byte MMCReadFilePos(byte hand, byte *Gbuffer, int16 size, int32 ini)

La función MMCReadFilePos lee los bytes indicados por el parámetro 'size'


(máximo 512) del archivo que hace referencia el manejdor 'hand'. La lectura comienza en
la posición del archivo indicada por el parámetro 'ini', y los escribe en 'Gbuffer'. La
función devuelve '0' si se ha efectuado correctamente, '2' si el número de bytes a leer es
superior a 512, '3' si la posición de inicio de lectura 'ini' más el número de bytes a leer
supera el tamaño del archivo, y '1' si ha habido un error durante la lectura. Esa función
afecta a la posición del cursor de lectura del archivo que se posiciona después del último
byte leído.

byte MMCOpenDir(int32 dir, int32 dir_padre)

La función MMCOpenDir abre un directorio y devuelve el manejador. El parámetro


'dir' es la dirección absoluta de la entrada del directorio (al igual que en era la dirección
de la entrada del archivo). El parámetro 'dir_padre' es la dirección de la entrada del
directorio padre.

byte MMCResetDir(byte dHand)

La función MMCResetDir pone en la posición inicial el cursor del directorio al que


hace referencia el manejador 'dHand'. El cursor se utiliza para obtener cada una de las

107
entradas dentro de un directorio de forma secuencial mediante llamadas a las funciones
MMCNextReg o MMCNextFile.

void MMCCloseDir(byte dHand)

La función MMCCloseDir cierra el directorio al que hace referencia el manejador


'hand', liberando recursos para que se puedan abrir más directorios.

int32 MMCDirectoryDir(byte dHand)

La función MMCDirectoryDir devuelve la dirección de la entrada del directorio al


que hace referencia el manejador 'dHand'.

int32 MMCNextReg(byte dHand)

La función MMCNextReg devuelve la dirección de la entrada válida al que apunta


el cursor y avanza el cursor una posición. Esta función se utiliza para listar de forma
secuencial las entradas válidas dentro de un directorio.

int32 MMCNextFile(byte dHand)

La función MMCNextFile es similar a MMCNextReg. En este caso se devuelve la


primera entrada válida que sea un archivo, saltándose los directorios. Tras la llamada el
cursor se sitúa después de la entrada del archivo devuelto.

int32 MMCGetEntryPosition(byte dHand, int16 pos)

La función MMCGetEntryPosition devuelve la dirección absoluta de la entrada


válida 'pos' dentro del directorio al que hace referencia 'dHand'. La función únicamente
tiene en cuenta entradas válidas dentro del directorio, por tanto el directorio deberá tener,
al menos, tantas entradas validas como indique el parámetro 'pos'.

Funciones de lectura de MP3

Para la reproducción de los archivos MP3 es necesario optimizar las funciones de


lectura. Por ello se han implementado tres funciones que no utilizan manejador y son
especificas para la función encargada de leer el flujo de datos MP3 y enviarlo a
decodificador. Las funciones son:

void MMCOpenMP3File(int32 dir)


int16 MMCReadMP3File1(byte *Gbuffer)
byte MMCReadMP3File2(int16 offset)

La función MMCOpenMP3File es muy similar a la función MMCOpenFile pero no


devuelve ningún manejador, éste es interno, ya que no se puede abrir más de un archivo
simultáneo para ser usado con estas funciones. Una vez abierto el archivo se utilizan las
funciones MMCReadMP3File1 y MMCReadMP3File2 para efectuar las lecturas. El

108
funcionamiento de estas funciones es muy similar al de MMCReadFile, pero en este caso
las operaciones que realizan las funciones se han dividido en dos. La primera función
realiza la lectura de los datos del archivo MP3 abierto, los escribe en 'Gbuffer' y devuelve
la posición relativa del cursor dentro del cluster que está leyendo. La segunda función ha
de ser llamada siempre después de la primera pasándole como parámetro el 'offset'
devuelto por la primera. Esta función realiza todos los cálculos necesarios para determinar
si se ha alcanzado el final del archivo, si se ha alcanzado el final del cluster, determinar
cuál es el siguiente cluster, etc. El funcionamiento de estas funciones es el siguiente:

1. Se abre el archivo MP3 a reproducir con la función MMCOpenMP3File.


2. Se hace una llamada a la función MMCReadMP3File1.
3. Se envían al decodificador de MP3 una parte de los datos leídos, lo que
permite tenerlos en el buffer de lectura del decodificador y empezar su
reproducción.
4. Se hace una llamada a la función MMCReadMP3File2 pasándole como
parámetro el resultado devuelto por MMCReadMP3File1 para finalizar los cálculos
necesarios para la próxima lectura.
5. Se envía el resto de datos leidos al decodificador.
6. Ya se puede empezar otro ciclo de lectura (paso 2).

Gracias a esta división de la función de lectura se evita que se vacíe el buffer de


reproducción del decodificador mientras se realizan los cálculos necesarios para las
próximas lecturas.

4.3.5 Librería de la pantalla LCD

Se ha utilizado una pantalla LCD gráfica monocromo de 84x48 píxeles que utiliza
un controlador Phillips PCD8544. Esta pantalla se utiliza en teléfonos móviles Nokia
3310 y son económicas y relativamente sencillas de conseguir. El interfaz de
comunicación consta de 5 líneas, que pueden verse en la Tabla 4.15.

Nombre Descripción
SCLK Reloj para el bus de datos SDIN
SDIN Entrada de datos
D/C Selección dato/comando
SCE Selección del chip (chip select)
RES Reset
Tabla 4.15 Líneas de comunicación de la pantalla LCD

Estructura de la memoria

El controlador se compone de una memoria RAM interna (DDRAM, Display


Data Ram) donde se almacenan los datos que son mostrador por la pantalla LCD. La
memoria se divide en 6 bancos de 84 bytes cada uno (6 x 8 x 84 bits). El controlador
refresca continuamente la pantalla con el contenido de la memoria DDRAM de forma que
cada bit de la memoria es un pixel en la pantalla, dependiendo de si está configurada en
modo normal o inverso un bit a '1' corresponderá a un pixel encendido o apagado. En la

109
Imagen 4.10 puede verse como se mapean los datos contenidos en la memoria DDRAM
en la pantalla.

El direccionamiento dentro de la memoria se realiza mediante un puntero con dos


direcciones; una dirección X cuyo rango es de 0 a 83 y corresponde a las comunas, y una
dirección Y cuyo rango es de 0 a 5 y corresponde a los bancos (grupos de 8 filas). En
modo de direccionamiento vertical después de cada byte la dirección Y del puntero se
incrementa, después de la última dirección de Y (Y=5), Y vuelve a la posición 0 y X se
incrementa. En el modo de direccionamiento horizontal ocurre de una forma similar,
después de cada byte se incrementa X, cuando X alcanza su límite vuelve a la posición 0 y
se incrementa Y. Cuando el puntero supera el último byte (X=83, Y=5) vuelve a la
posición (0,0).

Imagen 4.10 Mapeo de la memoria DDRAM en la pantalla. Extraído de las especificaciones del controlador
PCD8544.

Comunicación

En la comunicación entre el microcontrolador y el controlador de la pantalla LCD


se pueden distinguir dos tipos de instrucciones: si la línea D/C está a nivel bajo el byte
enviado por la línea SDIN es interpretado como un comando. Si la línea D/C está a nivel
alto los datos enviados por SDIN se escriben en la memoria DDRAM del controlador.
Después de cada escritura en la memoria el puntero es incrementado automáticamente. El
nivel de la línea D/C es leído durante el último bit del byte de datos enviado por SDIN.

El interfaz serie se inicializa cuando la línea SCE está a nivel alto, y se habilita en
el flanco de bajada de esta, indicando el comienzo de una transmisión de datos. Primero se
transmite el bit más significativo de cada byte, y las instrucciones pueden enviarse en

110
cualquier orden. El valor de la línea SDIN es capturado en los flancos de subida de la
señal de reloj SCLK. En la Tabla 4.16 se muestra el juego de instrucciones.

Instrucción D/C Comando Descripción


DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
H=0 o 1
NOP 0 0 0 0 0 0 0 0 0 No operación
Juego de 0 0 0 1 0 0 PD V H PD: Control de apagado
instrucciones V: Direccionamiento vertical
H: Juego extendido de
instrucciones.
Escribir dato 1 D7 D6 D5 D4 D3 D2 D1 D0 Escribe el byte en la DDRAM
H=0
Reservado 0 0 0 0 0 0 1 x x Reservados
Control LCD 0 0 0 0 0 1 D 0 E Pone la configuración del LCD
Reservados 0 0 0 0 1 x x x x Reservados
Pone 0 0 1 0 0 0 Y2 Y1 Y0 Pone la dirección Y del puntero
dirección Y de 0≤Y≤5
DDRAM
Pone 0 1 X6 X5 X4 X3 X2 X1 X0 Pone la dirección X del puntero
dirección X de 0 ≤ x ≤ 83
DDRAM
H=1
Reservados 0 0 0 0 0 0 0 0 1 Reservados
0 0 0 0 0 0 0 1 x Reservados
Control de 0 0 0 0 0 0 1 TC1 TC0 Pone el coeficiente de temperatura
temperatura
Reservados 0 0 0 0 0 1 x x x Reservados
Sistema bias 0 0 0 0 1 0 BS2 BS1 BS0 Pone el valor al sistema bias
Reservados 0 0 1 x x x x x x Reservados
Fija el Vop 0 1 Vop6 Vop5 Vop4 Vop3 Vop2 Vop1 Vop0 Fija el valor de Vop
Tabla 4.16 Juego de instrucciones de la pantalla LCD

Las instrucciones 'Juego de instrucciones' y 'Control LCD' permiten fijar el valor


de varios registros:

● PD: '0'=> chip activo; '1'=> chip en modo 'apagado'.


● V: '0'=> direccionamiento horizontal; '1'=> direccionamiento vertical.
● H: '0'=> juego de instrucciones básico; '1'=> instrucciones extendidas.
● D y E: 00 pantalla en negro; 10 modo normal; 01 todos los segmentos
encendidos; 11 modo de vídeo inverso.

La instrucción 'Control de temperatura' fija el coeficiente del control de


temperatura, que controla la tensión de alimentación del LCD en función a la temperatura.
Las funciones para fijar el valor de bias y Vop (tensión operacional) sirven para el control
de la tensión del LCD y su contraste. En la Imagen 4.11 se puede ver el diagrama de
tiempos del envío de un byte.

111
Imagen 4.11 Diagrama de tiempos del envío de un byte

Inicialización

Después de encender la pantalla LCD el valor de los registros y la memoria no


están definidos y se debe resetear el controlador. El reset fija unos valores determinados
en los registros, pero el contenido de la memoria continúa siendo indeterminado. Por
tanto, después de establecer los valores de tensión operacional, bias y modo horizontal o
vertical, se ha de realizar un borrado de la pantalla. El proceso de inicialización utilizado
es el siguiente:

1. Reset del controlador


2. Envío de instrucción para activar el juego de comandos extendidos.
3. Se define Vop
4. Se define el valor bias
5. Se selecciona el modo horizontal o vertical (en este caso horizontal)
6. Se enciende el display (comando 0x09)
7. Se borra la memoria DDRAM.
8. Se sitúa el puntero en la posición inicial (0,0).

Funciones de la librería

Existen dos funciones internas de la librería, que se han implementado para ser
utilizadas por otras funciones de la librería y no externamente. Estas son:

void LCD_write_command(byte cmd)


void LCD_write_data(byte data)

Ambas funciones son similares, envían el byte que se les pasa como parámetro,
en el caso de LCD_write_command la línea D/C se pone a nivel bajo para indicar que se
trata de un comando, y en LCD_write_data a nivel alto. El resto de funciones, que hacen
uso de estas, son:

void LCD_Init()

Función de inicialización del controlador de la pantalla LCD. Sigue el algoritmo


de inicialización descrito anteriormente.

112
void LCD_gotoxy(byte x_pos, byte y_pos)

Esta función establece la posición del puntero de escritura de la memoria


DDRAM en la posición X='x_pos' y Y='y_pos'.

void LCD_clean_ddram()

La función LCD_clean_ddram borra el contenido de la memoria DDRAM


poniéndola a '0'.

void LCD_char(byte caracter)

El controlador no dispone de una tabla de caracteres, por tanto se han definido


dos vectores que contienen los caracteres alfanuméricos tanto en mayúsculas como en
minúsculas ('ñ' incluida). Están descritos por un conjunto de 5 bytes cada uno que definen
su representación gráfica como una matriz de 5x8 (en realidad cada carácter es una matriz
de 5x7, la última fila de deja en blanco para separar líneas de caracteres). El parámetro
'caracter' es el carácter en formato ASCII que es transformado al índice del vector donde
se almacena su representación, la cual se envía al controlador LCD para que la escriba en
la memoria DDRAM en la posición en la que se encuentre el puntero en ese momento.

void LCD_write_minnum(byte numero)

La función LCD_write_minnum es similar a LCD_char. En este caso la función


escribe únicamente números utilizando una fuente más pequeña, de 4x7 píxeles por
número.

void LCD_bitmap(byte posx, byte posy, byte x_size,byte y_size,


byte logini)

Además del vector de caracteres se ha definido un vector de imágenes. La función


LCD_bitmap escribe en la posición X='posx' Y='posy' la imagen situada en el vector en la
posición 'logini' y con un tamaño 'x_size' x 'y_size'.

void LCD_icon(byte x, byte y, byte num)

La función LCD_icon es similar a LCD_bitmap, en este caso se utiliza un vector


de iconos con un tamaño predefinido de 12x8 pixels. Los parámetros 'x' e 'y' son la
posición en la que se escribirán los datos y 'num' el índice dentro del vector de iconos.

113
4.3.6 Librería USB

Como se comentaba en el capítulo del desarrollo hardware, el módulo USB


consta de un bus de 8 Bits y varias líneas de comunicación, de las cuales se han utilizado
las siguientes:

 RXF# (salida): Cuando está a nivel bajo al menos un byte está esperando en el
buffer de bytes recibidos del modulo USB a ser leídos por el microcontrolador.
Está a nivel alto si el buffer está vacío.
 TXE# (salida): Cuando está a nivel alto indica que el buffer de transmisión está
lleno, por tanto debe esperarse antes de escribir nuevos datos.
 WR (entrada): Cuando se pasa de nivel alto a bajo el módulo USB lee los 8 bits
de la línea de datos y mete el byte en el buffer de transmisión. Los datos del
buffer de transmisión son transmitidos al ordenador en el periodo de tiempo
determinado por el timeout del buffer de transmisión (configurable de 1 a
255ms)
 RD# (entrada): Al ponerlo a nivel bajo el primer byte del buffer de recepción se
pone en las líneas de datos. Cuando se pasa de nuevo a nivel alto las líneas de
datos se ponen en estado de alta impedancia.
 SLEEP (Salida): Corresponde al pin PWREN# del chip, se pone a nivel bajo
después del proceso de enumeración del dispositivo. Sirve para controlar la
alimentación del dispositivo y detectar su enumeración por parte del host.

Las funciones desarrolladas en la librería USB son muy básicas y se encargan de


la inicialización, comprobación del estado del módulo USB y transmisión de bytes. Son
las siguientes:

void Ini_USB()

Inicializa los registros internos del microcontrolador para usar las líneas de
comunicación con el módulo USB de forma correcta.

int1 isUSBEnumerado()

La función devuelve '1' si el módulo USB esta conectado a un host (ordenador) y


ha sido enumerado por éste, y de lo contrario devuelve '0'.

int1 HayDatosUSB()

La función devuelve '1' si existen datos para ser leídos en el buffer del módulo
USB, y de lo contrario devuelve '0'.

void clear_USB_outbuffer()

La función clear_USB_outbuffer limpia el buffer de lectura del módulo USB.

114
void put_USB(byte data)

Envía el byte 'data' al módulo USB (para ser transmitido al ordenador).

byte get_USB()

La función get_USB lee y devuelve un byte del buffer de lectura del módulo
USB, si el buffer está vacío se espera hasta que se recibe al menos un byte.

byte get_USB_timer(byte timeout)

La función get_USB_timer es muy similar a get_USB, en este caso si el buffer


está vacío se espera un tiempo fijado por el parámetro 'timeout' (timeout/10 ms), si en este
tiempo el módulo no ha recibido ningún byte la función devuelve 0xFF y pone la variable
de error (TimeOutError) a '1'.

void USB_EnviaBloque(int16 nBytes, byte *datos)

La función USB_EnviaBloque envía al módulo USB tantos bytes como indica el


parámetro 'nBytes' de la variable 'datos'.

4.3.7 Lectura de ID3v1 y ID3v2

El formato de audio MP3 no dispone de forma nativa de ninguna forma de


almacenar información sobre su contenido. El formato ID3 es un sistema muy popular y
utilizado de etiquetas que se almacenan en los archivos de audio MP3 añadiendo
información sobre estos, como el título de la canción, artista, año, género, etc. Existen
diferentes versiones de ID3 compatibles entre sí, de forma que un mismo archivo MP3
puede contener etiquetas de la versión 1.1 y de la versión 2.0.

Existen dos versiones principales del formato ID3: la versión ID3v1 (la última
especificación es la 1.1 que añade a la 1.0 información del número de pista) que almacena
la información al final del archivo, y la versión ID3v2 (actualmente la última
especificación es la 2.4) que almacena la información al inicio del archivo.

Se han implementado dos funciones para leer parte de la información contenida


en las etiquetas ID3 (si están presentes) para ser posteriormente mostrada por pantalla. La
información leída es el título, autor y álbum de la canción. Las funciones son:

int ID3v1(byte hand)


int ID3v2(byte hand)

La primera función lee la información de la etiqueta ID3v1, y la segunda de la


etiqueta ID3v2 sin cabecera extendida. Las funciones devuelven '1' si se ha podido leer la
etiqueta correctamente y de lo contrario devuelven '0'. El parámetro hand es el manejador
del archivo MP3. Los datos leídos se guardan en variables globales que hacen referencia
al MP3 en uso. A continuación se realiza una pequeña explicación de ambas versiones.

115
ID3v1

La etiqueta ID3v1 se almacena en los últimos 128 bytes de los archivos MP3. Al
ser una etiqueta de tamaño fijo y reducida, la información que almacena es básica y no
permite añadir nuevos elementos. En la Tabla 4.17 puede verse la composición de la
etiqueta ID3v1.

Tamaño Contenido
3 Bytes “TAG”
30 Bytes Título de la canción
30 Bytes Artista
30 Bytes Álbum
4 Bytes Año
30 Bytes Comentarios (en la versión 1.1 el último byte es
el número de pista)
1 Byte Género (índice de una lista de 80 géneros)
Tabla 4.17 Estructura de la etiqueta ID3v1

ID3v2

Debido a las limitaciones de las versiones 1.x (longitud de etiquetas insuficiente,


uso únicamente de caracteres ASCII, número de etiquetas insuficiente, etc.) se ha
desarrollado una nueva versión que aporta mucha más flexibilidad. Las mejoras más
significativas son:

 Utilización de carácteres unicode.


 Etiquetas al inicio del archivo, lo que facilita su difusión mediante streaming ya
que no es necesario descargarlo completamente.
 No hay restricciones respecto a la longitud de las etiquetas (existe una
restricción máxima de 16 MB por marco y 256 MB en total).
 Es posible incluir elementos no textuales, como imágenes.
 Se pueden incluir etiquetas definidas por el usuario.
 Contiene un “esquema de desincronización” que evita que el decodificador
intente reproducirla.
 Soporta información encriptada.

La etiqueta ID3v2 esta compuesta por una cabecera, un cuerpo y un conjunto de


marcos, y cada marco contiene una cabecera y uno o más campos de datos. Es un sistema
relativamente complejo y por tanto no se van a explicar aquí los detalles de su estructura.
La función implementada comprueba la existencia de la etiqueta (“ID3” en los primeros
bytes) y busca la información de título, artista y álbum en el primer marco.

116
4.3.8 Funciones de visualización de datos y menú

Se trata de un conjunto de funciones que hacen uso de la librería de la pantalla


LCD y la librería FAT16 para mostrar los datos del archivo en reproducción, así como
también menús que permiten la navegación por el árbol de directorios y la selección de
diversas opciones.

Visualización de datos

Son las funciones que muestran en pantalla los datos del MP3 en reproducción.
Las funciones de visualización de datos son:

LCD_StLogo: Muestra el icono con la información del tipo de audio (estéreo,


mono, virtual surround, diferential)
LCD_ArtistScroll: Muestra en la pantalla el nombre del autor extraído del MP3
en modo scroll.
LCD_Volume: Muestra las barras del volumen actual.
LCD_Play_Data: Muestra el icono MP3 en la pantalla, si está activado el modo
de realce de bajos y el tiempo de reproducción.

Funciones básicas de menú

Existen dos menús distintos, el de navegación por el árbol de directorios y el de


funciones. Ambos menús tienen funciones en común: mostrar un listado de elementos y
recorrerlo. Así que se han implementado las siguientes funciones básicas de menú:

Ini_Menu: Inicializa el sistema de menú.


AddList: Se le pasa un elemento con un nombre e icono para que sea añadido a
la lista.
Reset_Menu: Resetea el menú (borra sus elementos)
NextMenu: Selecciona el siguiente elemento dentro del menú.
PrevMenu: Selecciona el anterior elemento dentro del menú.
ShwoMenu: Muestra el menú en pantalla.

Las funciones utilizan una estructura de datos global que puede ser leída por el
programa principal para pasarles datos o averiguar cual es el elemento seleccionado. El
modo de funcionamiento de las funciones es el siguiente:

1. Se inicia el sistema de menús llamando a la función Ini_Menu.


2. Se añaden los elementos del menú a la lista (un máximo de 5)
3. Se llama a la función ShowMenu para mostrar el menú en pantalla.
4. Se efectúan las llamadas a NextMenu o PrevMenu según los botones
presionados por el usuario.
5. Se lee el elemento seleccionado.
6. Para mostrar otro listado se llama a la función ResetMenu y se pasa al paso 2.

117
Navegación por el árbol de directorios

Estas funciones hacen uso de las funciones de menú básicas para mostrar en
pantalla el listado de directorios y archivos de la tarjeta de memoria y permiten la
navegación por la estructura de directorios de esta. Las funciones son las siguientes:

MenuListaDir: Inicia el menú listando los archivos y directorios de un directorio


determinado.
FilesToMenu: Añade un archivo o directorio al listado (usado por
MenuListaDir).
FicheroSiguente: Selecciona el siguiente archivo o directorio del listado.
FicheroAnterior: Selecciona el anterior archivo o directorio del listado.
MenuEntrar: Si el elemento seleccionado es un directorio entra dentro de él,
listando su contenido en el menú. Si es un archivo MP3 lo selecciona como el
archivo activo y envía el comando CMD_PLAY al bucle principal.

Menú de opciones

Al igual que el menú de navegación, el menú de opciones utiliza las funciones


básicas del menú para listar distintas opciones de reproducción que se pueden activar o
desactivar. Las funciones son las siguientes:

MenuOpciones: Inicia el menú listando las opciones posibles.


OpcionSiguente: Selecciona la opción siguiente.
OpcionAnterior: Selecciona la opción anterior.
OpcionesEntrar: Activa o desactiva la opción seleccionada, según sea el caso.

4.4 Protocolo de comunicación Reproductor-PC

4.4.1 Introducción

Para poder controlar el reproductor desde un ordenador y poder realizar diferentes


funciones como la transferencia de archivos o la reproducción remota, se ha definido un
protocolo de comunicación sobre el interfaz USB. Cuando el reproductor está conectado
al ordenador mediante USB y en este se está ejecutando la aplicación de control del
reproductor, el reproductor entra en un estado en el que es completamente controlado por
la aplicación mediante un conjunto de comandos.

La comunicación en el lado del reproductor hace uso de la librería de USB


descrita en el apartado anterior. En el lado del ordenador, la aplicación hace uso de los
controladores suministrados por FTDI Chip para la comunicación con el reproductor
mediante el módulo USB.

118
4.4.2 Sistema de mensajes

La comunicación entre el reproductor y el ordenador se basa en un intercambio de


mensajes. Es la aplicación en el ordenador la que toma el control en la comunicación y se
encarga de enviar los mensajes, denominados comandos, a los que el reproductor debe
responder. El reproductor efectúa la acción definida por el comando recibido y devuelve
una respuesta al ordenador.

Estructura de los mensajes

Los mensajes enviados desde el ordenador al reproductor se denominan


comandos. Las estructura de los comandos consta de tres partes: un byte que define el
tipo de comando, un byte que define el comando y unos parámetros que dependen del
comando en cuestión. En la Imagen 4.12 puede verse esta estructura.

Imagen 4.12 Estructura del mensaje

La respuesta a los comandos enviados por la aplicación pueden ser mensajes de


respuesta simples consistentes en un byte (mensaje ACK o mensajes de error) o pueden
ser mensajes más elaborados, correspondientes a respuestas de petición de información,
como por ejemplo el listado de archivos de un directorio. Estos mensajes más elaborados
constan de un byte indicando el tipo de mensaje y un conjunto de datos correspondientes a
la información pedida por el comando. Algunos comandos pueden necesitar de más de un
mensaje de respuesta, ésto dependerá del comando en cuestión.

Tipos de comandos y mensajes

Los comandos se han dividido en cuatro tipos dependiendo de su naturaleza:

 Comandos de navegación: son comandos utilizados para navegar por la


estructura de directorios del la memoria MMC y enviar archivos del reproductor
al ordenador.
 Comandos de control: se utilizan para controlar algunos parámetros del
reproductor.
 Comandos de reproducción: se utilizan para controlar la reproducción remota de
archivos MP3.
 Comandos para el decodificador: se trata de comandos que envían información
directamente al decodificador de MP3.

En la Tabla 4.18 se listan todos los comandos y mensajes de los que hace eso el
protocolo de comunicación.

119
Nombre Código Explicación
hexadecimal
USB_NULL 0x00 Comando nulo, no realiza ninguna acción.
USB_PC_PRESENT* 0x01 Comando de inicialización que envía el PC
USB_USB_PRESENT* 0x02 Comando de inicialización que envía el dispositivo USB
USB_PC_ASKINI* 0x03 Petición de inicialización por parte del PC

USB_TCMD_DEBUG* 0x10 Después va una cadena terminada en NULL


USB_TCMD_DIR* 0x11 Comandos de directorio
USB_TCMD_OP* 0x12 Comandos de configuración
USB_TCMD_PLAY* 0x13 Comandos de reproducción
USB_TCMD_VS* 0x14 Comandos para el control a bajo nivel del chip MP3
USB_TCMD_LCD* 0x15 Comandos para el control a bajo nivel del LCD

USB_DIR_GOTO_ROOT 0x20 Ir al directorio root


USB_DIR_GOTO 0x21 Ir a el directorio especificado
USB_DIR_LIST 0x22 Pide el listado del directorio actual
USB_DIR_FILE 0x23 Cada uno de los elementos de un directorio
USB_DIR_ENDDIR 0x24 Indica la finalización del listado del directorio
USB_DIR_GET 0x25 Pide obtener un archivo
USB_DIR_GETDATA 0x26 Manda paquetes de datos del archivo
USB_DIR_ENDGET 0x27 Indica que ha finalizado la transmisión del archivo
USB_DIR_STOPGETDATA 0x28 Interrumpe el envío de archivos

USB_OP_RESET 0x30 Resetea el dispositivo


USB_OP_SETVOL 0x31 Modifica el volumen
USB_OP_GETVOL 0x32 Obtiene los valores de volumen

USB_PLAY_PLAY 0x40 Reproduce el archivo indicado


USB_PLAY_PAUSE 0x41 Pausa el archivo en reproducción
USB_PLAY_STOP 0x42 Para el archivo en ejecución
USB_PLAY_ENDPLAY 0x47 Avisa de la finalización del archivo MP3

USB_VS_HRESET 0x50 Reset Hardware del VS1001K


USB_VS_SRESET 0x51 Reset Software del VS1001K
USB_VS_SEND 0x52 Envía datos al VS1001K
USB_VS_CMD 0x53 Envía un comando al VS1001K
USB_VS_BEEP1 0x54 Genera un pitido en el reproductor
USB_VS_TEST_SEND 0x55 Comando de Test de envío de datos

USB_ACK* 0xAA Comando de aceptación (usado en inicialización)


USB_ACK2* 0xAB
USB_STOPBYTE 0xBB
USB_RECO1 0xCA
USB_CANCEL* 0xDA
USB_ERR1* 0xFA Código de error 1
USB_ERR2* 0xFB Código de error 2 .
USB_CMDTUNK* 0xFD Tipo de comando desconocido
USB_CMDUNK* 0xFE Comando desconocido
* Estos mensajes no llevan delante un Tipo de Comando
Tabla 4.18 Comandos del protocolo de comunicación

120
4.4.3 Inicialización de la comunicación

Antes de que el reproductor pueda empezar a contestar a los comandos enviados


por la aplicación en el ordenador ambos han de inicializar la comunicación, de modo que
el reproductor quede en un estado de espera de comandos. El proceso de inicialización es
el siguiente:

1. La aplicación envía el comando USB_PC_PRESENT si detecta que el


reproductor está conectado a un puerto USB y está enumerado. Este comando
le indica al reproductor que la aplicación está conectada y quiere iniciar la
comunicación.
2. El reproductor comprueba periódicamente si ha sido enumerado por el host
USB. Si lo está comprueba si se le ha enviado el comando
USB_PC_PRESENT, en caso de recibirlo envía como respuesta
USB_USB_PRESENT. Esto le indica a la aplicación que el reproductor ha
recibido el mensaje de la aplicación y que él también está en disposición de
iniciar la comunicación.
3. La aplicación lee la respuesta del reproductor y le pide, mediante el comando
USB_PC_ASKINI, que se inicie la comunicación.
4. El reproductor responde al USB_PC_ASKINI con el mensaje USB_ACK
indicándole que ha iniciado la comunicación y está en disposición de recibir
cualquier tipo de comando. Después de este mensaje el reproductor entra en
un bucle de lectura a la espera de comandos por parte de la aplicación (modo
USB_IDLE).

La función de inicialización se llama de forma periódica, para detectar si se ha


conectado el reproductor a un puerto USB y si la aplicación de comunicación está
presente. En la Imagen 4.13 puede verse el diagrama de inicialización que se acaba de
describir.

Imagen 4.13 Diagrama de inicialización de la comunicación

121
4.4.4 Comandos de navegación

USB_DIR_GOTO_ROOT

Parámetros: Sin parámetros.


Dirección: PC=>Reproductor
Función: Establece el directorio root del sistema de archivos como directorio
actual.
Respuesta: USB_ACK

USB_DIR_GOTO

Parámetros: un entero de 16 bits que indica el directorio a abrir.


Dirección: PC=>Reproductor
Función: Establece como directorio actual el directorio indicado por el parámetro.
El parámetro hace referencia al índice de la entrada dentro del directorio actual.
Respuesta: USB_ACK

USB_DIR_LIST

Parámetros: Sin parámetros.


Dirección: PC=>Reproductor
Función: Pide la lista de archivos y directorios del directorio actual.
Respuesta: Envía un conjunto de mensajes USB_DIR_FILE, uno por cada
entrada dentro del directorio actual. Finaliza mediante un mensaje
USB_DIR_ENDDIR. En la Imagen 4.14 se muestra el funcionamiento del
comando USB_DIR_LIST.

Imagen 4.14 Diagrama de funcionamiento del comando USB_DIR_LIST

122
USB_DIR_FILE

Parámetros: Se envían dos parámetros, un entero de 16 bits indicando el índice de


la entrada dentro del directorio, y un conjunto de 32 bytes correspondientes a la
entrada del elemento dentro del sistema de archivos FAT16.
Dirección: Reproductor=>PC
Función: Envía una entrada (archivo o directorio) del directorio actual. Es la
respuesta del reproductor a un comando USB_DIR_LIST.

USB_DIR_ENDDIR

Parámetros: Sin parámetros


Dirección: Reproductor=>PC
Función: Indica que se ha terminado de transferir todas las entradas dentro del
directorio actual. Es el último mensaje que se envía como respuesta al comando
USB_DIR_LIST.

USB_DIR_GET

Parámetros: un entero de 16 bits que indica el archivo a enviar.


Dirección: PC=>Reproductor
Función: Pide al reproductor que le transfiera el archivo indicado por el
parámetro. El parámetro indica el índice dentro del directorio actual que
corresponde al archivo a enviar.
Respuesta: Se envía un conjunto de mensajes USB_DIR_GETDATA con los
datos del archivo, al finalizar el envío se envía USB_DIR_ENDGET. En la
Imagen 4.15 se muestra el funcionamiento del comando USB_DIR_GET.

Imagen 4.15 Diagrama del funcionamiento del comando USB_DIR_GET

123
USB_DIR_GETDATA

Parámetros: Se envían dos parámetros, un entero de 16 bits indicando el número


de bytes de datos que se envían en el mensaje, y un conjunto de bytes que
corresponden al contenido del archivo.
Dirección: Reproductor=>PC
Función: Se envía como respuesta a un comando USB_DIR_GET, envía el
contenido del archivo solicitado. Cada mensaje envía 512 Bytes de datos,
exceptuando el último mensaje, que envía los datos restantes.

USB_DIR_ENDGET

Parámetros: Sin parámetros


Dirección: Reproductor=>PC
Función: Indica que se ha terminado de transferir los datos de archivo solicitado.
Es el último mensaje que se envía como respuesta al comando USB_DIR_GET.

USB_DIR_STOPGETDATA

Parámetros: Sin parámetros


Dirección: PC=> Reproductor
Función: Interrumpe el envío de datos por parte del reproductor, fruto de un
comando USB_DIR_GET.
Respuesta: USB_ACK

4.4.5 Comandos de control

USB_OP_RESET

Parámetros: Sin parámetros


Dirección: PC=> Reproductor
Función: Resetea el microcontrolador.
Respuesta: USB_ACK

USB_OP_SETVOL

Parámetros: un byte correspondiente al volumen que se desea fijar.


Dirección: PC=> Reproductor
Función: Fija el volumen de reproducción.
Respuesta: USB_ACK

124
USB_OP_GETVOL

Parámetros: Sin parámetros


Dirección: PC=> Reproductor
Función: Devuelve un byte con el volumen de reproducción.
Respuesta: un byte con el volumen y USB_ACK

4.4.6 Comandos de reproducción

USB_PLAY_PLAY

Parámetros: un entero de 2 bytes que corresponden a la posición del archivo MP3


que se ha de reproducir, dentro del directorio actual.
Dirección: PC=> Reproductor
Función: Inicia la reproducción del archivo MP3 indicado por el parámetro
pasado.
Respuesta: USB_ACK

USB_PLAY_PAUSE

Parámetros: Sin parámetros.


Dirección: PC=> Reproductor
Función: Pausa la reproducción activa.
Respuesta: USB_ACK

USB_PLAY_STOP

Parámetros: Sin parámetros.


Dirección: PC=> Reproductor
Función: Para la reproducción activa.
Respuesta: USB_ACK

USB_PLAY_ENDPLAY

Parámetros: Sin parámetros.


Dirección: Reproductor => PC
Función: Le comunica a la aplicación que se ha alcanzado el final del archivo
MP3 y se ha finalizado la reproducción.

125
4.4.7 Comandos para el decodificador

USB_VS_HRESET

Parámetros: Sin parámetros.


Dirección: PC=> Reproductor
Función: Realiza un reset hardware del decodificador MP3.
Respuesta: USB_ACK

USB_VS_SRESET

Parámetros: Sin parámetros.


Dirección: PC=> Reproductor
Función: Realiza un reset software del decodificador MP3.
Respuesta: USB_ACK

USB_VS_SEND

Parámetros: Tiene dos parámetros, el primero es un entero de 2 bytes que indica


el tamaño en bytes del segundo. El segundo es un conjunto de bytes de datos.
Dirección: PC=> Reproductor
Función: Envía en conjunto de datos recibido como parámetro junto con el
comando al decodificador MP3 por el interfaz SDI. Sirve principalmente para la
reproducción en el reproductor de un flujo de datos MP3 enviados por la
aplicación.
Respuesta: USB_ACK

USB_VS_BEEP1

Parámetros: Sin parámetros.


Dirección: PC=> Reproductor
Función: Envía el decodificador un comando para que este genere un beep.
Respuesta: USB_ACK

USB_VS_TEST_SEND

Parámetros: Tiene dos parámetros, el primero es un entero de 2 bytes que indica


el tamaño en bytes del segundo. El segundo es un conjunto de bytes de datos.
Dirección: PC=> Reproductor
Función: Se trata de un comando de prueba y depuración. Devuelve como
respuesta los mismos datos que ha recibido como datos.
Respuesta: El conjunto de datos recibidos como parámetros.

126
4.4.7 Errores

Si durante la comunicación el reproductor recibe un comando no válido o no


esperado le devuelve a la aplicación un mensaje de error. Los mensajes USB_ERR1 y
USB_ERR2 se utilizan durante el proceso de inicialización. El mensaje
USB_CMDTUNK indica a la aplicación que el tipo de comando es incorrecto y el
mensaje USB_CMDUNK le indica que el comando es incorrecto.

Si durante la comunicación existiera algún problema y el reproductor devolviese


mensajes diferentes a USB_ACK o varios mensajes de error seguidos, la aplicación puede
intentar recuperar la comunicación borrando los buffers de entrada y salida, y enviando
una serie de comandos USB_NULL.

4.5 Programa principal

4.5.1 Introducción

El programa principal está compuesto por una función principal, que inicia el
microcontrolador y contiene el bucle principal del programa, una función temporizada,
que se ejecuta periódicamente y se encarga del control del interfaz de usuario, y un
pequeño conjunto de funciones. Todas ellas hacen uso de las librerías anteriormente
descritas.

4.5.2 Función principal

En la Imagen 4.16 puede verse el diagrama de flujo de la función principal que se


inicia al arrancar el reproductor. Primero se inicializan los distintos elementos del
reproductor así como los registros internos del PIC y la función temporizada. Después
entra en un bucle que atiende a los comandos CMD_PLAY y CMD_STOP que inicia y
finaliza la reproducción del archivo MP3 seleccionado. Cuando el reproductor se conecta
por USB al ordenador y se inicializa la comunicación con la aplicación el bucle cede el
control a la librería de comunicación.

127
Imagen 4.16 Diagrama de flujo de la función principal

4.5.3 Función temporizada

La tarea de control del interfaz de usuario la asume una función que es llamada de
forma periódica por un temporizador del microcontrolador (cada 52,4 ms). Esta función se
encarga del refresco de la información en la pantalla LCD, de controlar la botonera del
reproductor y de comprobar si se ha conectado el puerto USB del reproductor a un
ordenador. El diagrama de flujo de la función puede verse en la Imagen 4.17.

128
Imagen 4.17 Diagrama de flujo de la función temporizada

La tarea más importante de esta función es la comprobación de la botonera, que


hace que el usuario pueda controlar el reproductor. En la Imagen 4.18 Diagrama puede
verse su diagrama de flujo.

129
130
Imagen 4.18 Diagrama de flujo de la comprobación de la botonera

4.5.4 Otras funciones

Además de las librerías y funciones ya descritas se han implementado otras


funciones entre las que destacan:

void Play(int32 dir)


Reproduce el archivo MP3 indicado por el parámetro. El parámetro 'dir' es la
dirección absoluta de la entrada del archivo a reproducir dentro de un directorio. La
lectura del archivo hace uso de las funciones MMCOpenMP3File y MMCReadMP3File
que están optimizadas para la reproducción de MP3 con tasas de bit altas.

void SetEEPROMValues()
Graba en la memoria EEPROM interna del microcontrolador la información de
volumen, modo de reproducción y modo de audio.

void GetEEPROMValues()
Lee de la memoria EEPROM interna del microcontrolador la información de
volumen, modo de reproducción y modo de audio que han sido guardados anteriormente,
y los establece como valores actuales.

131
5. Diseño y desarrollo de la aplicación

5.1 Introducción
Para el control del reproductor desde un ordenador se ha desarrollado una
aplicación windows en la cual se muestran las distintas posibilidades que ofrece:

 Navegación por la estructura de archivos del reproductor.


 Descarga al ordenador de archivos almacenados en el reproductor.
 Reproducción en el reproductor de archivos almacenados en éste.
 Reproducción en el reproductor de archivos almacenados en el ordenador.
 Reproducción en el ordenador de archivos almacenados en el reproductor.
 Reproducción en el reproductor de stream MP3 transmitidos a través de
internet.

Se ha decidido encapsular todo el protocolo de comunicación en una librería DLL


que proporcione un interfaz fácil de utilizar, de forma que se puedan desarrollar distintas
aplicaciones de forma rápida sin necesidad de preocuparse de la capa de comunicación
con el reproductor.

5.2 Herramientas de desarrollo utilizadas


FTDI Chip, el fabricante del módulo de comunicación USB, proporciona
diferentes librerías y drivers para facilitar el desarrollo de aplicaciones en diferentes
plataformas40. Existen dos métodos para realizar la comunicación: utilizar el driver VCP
que crea un puerto COM virtual, o utilizar el driver D2XX que proporciona un acceso
directo al dispositivo USB a través de una librería DLL. Para disponer de un mayor
control y velocidad de transmisión se ha utilizado esta última opción.

Tanto la librería de comunicación con el reproductor como la aplicación se han


desarrollado para la plataforma .NET de Microsoft. Esto es así por varios motivos, en
primer lugar se ha elegido desarrollar la aplicación para sistemas operativos Windows
porque es el sistema que tiene actualmente mayor difusión en entornos domésticos, y
además FTDI Chip proporciona drivers más completos y documentados para Windows
que para otro sistema. En segundo lugar se ha elegido la plataforma .NET por ser un
entorno actual que Microsoft está fomentando con nuevas y completas herramientas de
desarrollo. Por todo ello, y por que ya se tenía experiencia en el desarrollo de aplicaciones
en C# para plataforma .NET, se ha optado por esta opción. Para una mayor compatibilidad
la librería se ha desarrollado para .NET 1.1, que puede ser utilizada en versiones
superiores. La aplicación se ha desarrollado para .NET 2.0 ya que proporciona mejoras
con respecto a la 1.1.

40 Existen drivers para todas las versiones de windows superiores al 98, MAC OS X, Linux, Windows CE y
Windows Mobile entre otros.

132
El entorno de desarrollo utilizado para la programación ha sido diferente en cada
caso. Para la librería se ha utilizado el programa Sharpdevelop 1.1, se trata de un entorno
de desarrollo gratuito que hace uso de las librerías SDK de la plataforma .NET 1.1. Para el
desarrollo de la aplicación se ha utilizado el Visual Studio 2005, que proporciona un
entorno de desarrollo con más opciones que los programas gratuitos, y sobre todo facilita
los trabajos de depuración, como puntos de interrupción, ejecución paso a paso, etc. En la
versión 1.1 de Sharpdevelop las opciones de depuración son casi inexistentes. En ambos
casos se ha utilizado el C# como lenguaje de programación.

5.3 Librería del módulo USB


El driver D2XX proporcionado por FTDI permite que las aplicaciones se
comuniquen con el módulo USB a través de una librería DLL. La arquitectura del driver
D2XX consiste en un driver Windows WDM que se comunica con el dispositivo a través
de la pila USB de Windows y una librería DLL que actúa como interfaz entre la aplicación
y el driver WDM. En la Imagen 5.1 se pueden ver la arquitectura de una aplicación que
haga uso del driver D2XX.

Imagen 5.1 Arquitectura del uso del driver USB D2XX

133
Debido a que la librería DLL proporcionada por FTDI no está desarrollada para
.NET ha sido necesario crear un wrapper41 o envoltura mediante la cual poder acceder
desde el resto del código como si se tratase de una librería .NET, encapsulándose así el
interfaz D2XX en las clases FTDevice, FTDeviceInfo y FTManager. Las funciones del
interfaz D2XX incluidas en el wrapper y utilizadas para implementar estas clases son:

public FT_STATUS FT_Open(int deviceNumber, out int pHandle);


public FT_STATUS FT_OpenEx(string pvArg1, FT_OPEN dwFlags, out int
ftHandle);
public FT_STATUS FT_Close(int ftHandle);
public FT_STATUS FT_ReadEE(int ftHandle, int dwWordOffset, out ushort
lpwValue);
public FT_STATUS FT_WriteEE(int ftHandle, int dwWordOffset, ushort
wValue);
public FT_STATUS FT_EraseEE(int ftHandle);
public FT_STATUS FT_Write(int ftHandle, byte[] lpBuffer, int
dwBytesToWriteout, out int lpdwBytesWritten);
public FT_STATUS FT_ListDevices(out int count, int arg2, FT_LIST arg3);
public FT_STATUS FT_OpenEx(IntPtr pArg1, int Flags, out int pHandle);
public FT_STATUS FT_Read(int ftHandle, byte[] lpBuffer, int nBufferSize,
out int lpBytesReturned);
public FT_STATUS FT_CreateDeviceInfoList(out int lpdwNumDevs);
public FT_STATUS FT_GetDeviceInfoDetail(int dwIndex, out int lpdwFlags,
out int lpdwType, out int lpdwID, out int lpdwLocId, StringBuilder
pcSerialNumber, StringBuilder pcDescription, out int ftHandle);
public FT_STATUS FT_GetQueueStatus(int ftHandle, out int
lpdwAmountInRxQueue);
public FT_STATUS FT_Purge(int ftHandle, int dwMask);
public FT_STATUS FT_ResetDevice (int ftHandle);
public FT_STATUS FT_ResetPort (int ftHandle);
public FT_STATUS FT_CyclePort (int ftHandle);
public FT_STATUS FT_GetStatus(int ftHandle, out int lpdwAmountInRxQueue,
out int lpdwAmountInTxQueue, out int lpdwEventStatus);

5.4 Librería de control del reproductor


Como se ha comentado, todo el protocolo de comunicación se ha implementado
en una librería de forma que se puedan desarrollar distintas aplicaciones de forma más
sencilla sin necesidad de preocuparse de la capa de comunicación con el reproductor. En
la Imagen 5.2 puede verse la estructura interna de la librería de comunicación.

Al principio la aplicación ha de comprobar si el reproductor está conectado y


hacer una llamada a la función de inicialización de la comunicación. Si la inicialización de
la comunicación ha finalizado con éxito se puede comenzar a realizar llamadas a las
funciones de la librería, estas llamadas son transformadas en mensajes que son encolados
en una cola de envío de mensajes. Un hilo comprueba periódicamente las colas de envío,
enviando al reproductor los mensajes (comandos) que encuentre.

Existen dos colas de envío, una más prioritaria y otra con prioridad normal. Se
han creado estas dos colas para poder enviar mensajes que han de ser atendidos de forma
inmediata mientras la cola de prioridad normal está llena con otros mensajes. Un ejemplo
de la necesidad de estas dos colas es el siguiente: la aplicación manda un flujo de datos
41 Se ha tomado como base un wrapper en C# proporcionado como ejemplo por FTDI.

134
MP3 para que sean reproducidos en tiempo real, estos son almacenados como mensajes en
la cola de prioridad normal. A la vez la aplicación llama a la función de cambio de
volumen, en este caso la librería crea un mensaje que introduce en la cola con mayor
prioridad, de esta forma no es necesario que se envíen todos los mensajes encolados antes
de la llamada, y ésta es atendida inmediatamente.

Las respuestas devueltas por el reproductor son leídas por un hilo que
periódicamente comprueba el buffer de recepción. Dependiendo del tipo de respuesta el
hilo introduce nuevos mensajes en la cola de envío o genera los eventos necesarios para
informar a la aplicación de la información que se ha recibido del reproductor.

Imagen 5.2 Estructura interna de la librería de comunicación

A continuación se listan los métodos más importantes de la clase USBComMP3,


que es la que encapsula todo el protocolo de comunicación:

public bool DIRGotoRoot()


public bool DIRList(bool Prioritario)
public bool DIRGotoDir(short position, bool Prioritario)
public bool DIRGetFile(short position)
public bool PlayFile(short position)
public bool Play_Stop()
public bool Play_Pause()
public bool VS_HardReset()
public bool VS_SoftReset()
public bool VS_SendData(byte [] data)
public bool OP_Volumen(byte Volumen)
public bool OP_ResetDevice()
public void PurgarRX()
public void PurgarTX()
public void PurgarColaEnvio()

135
La librería también incluye varias clases de ayuda para facilitar la utilización de
la clase de comunicación, estas son:

 FileInfo, que facilita la extracción de los datos de un archivo a partir de los


datos de la entrada devueltos por el reproductor.
 MP3FileSender, envía un archivo MP3 al reproductor para que sea reproducido
en tiempo real.
 MP3NetStreamSender, envía al reproductor un flujo de datos MP3 descargado
de la red para su reproducción en tiempo real.

5.5 Modos de reproducción

5.5.1 Introducción

En los reproductores de MP3 comunes las aplicaciones permiten tan solo un


acceso a los archivos almacenados en la memoria interna del reproductor pero no
permiten su control de forma remota. En este caso, además del acceso a la estructura de
directorios y la descarga de archivos, la aplicación permite un control remoto muy
completo del reproductor, pudiéndose reproducir tanto archivos almacenados en el propio
reproductor, como enviarse un flujo de datos MP3 desde el ordenador para su
reproducción en tiempo real.

5.5.1 Reproducción remota de archivos en el reproductor

La reproducción remota de archivos en el reproductor hace referencia al control


de la reproducción en el propio dispositivo de archivos que se encuentran en la memoria
MMC. En la Imagen 5.3 se puede ver una captura de la ventana de control de
reproducción de la aplicación. Es el método más sencillo y consiste básicamente en
sustituir las órdenes procedentes de la botonera por los comandos enviados por la
aplicación. El proceso es el siguiente:

1. Se inicializa la comunicación (si no se ha inicializado aún)


2. Mediante la clase USBComMP3 se navega por la estructura de directorios
hasta el directorio donde se encuentra el archivo que se desea reproducir.
3. Se realiza una llamada al método PlayFile con la posición del archivo dentro
del directorio, y el reproductor comienza su reproducción.
4. Si se desea detener o pausar la reproducción se utilizan los métodos Play_Stop
y Play_Pause.

Imagen 5.3 Reproducción remota de archivos en el reproductor.

136
5.5.2 Reproducción remota de archivos en el ordenador

El reproductor permite reproducir un flujo de datos enviado desde la aplicación


sin necesidad de almacenarlos en la memoria, por tanto es posible reproducir un archivo
MP3 almacenado en el ordenador directamente en el reproductor. En la Imagen 5.4 se
pueden ver los controles y la lista de reproducción de los archivos almacenados en el
ordenador que son reproducidos en el reproductor. El proceso es el siguiente:

1. Se inicializa la comunicación (si no se ha inicializado aún)


2. Se instancia la clase MP3FileSender con la ruta del archivo a enviar. Esta clase
utiliza los métodos VS_HardReset, VS_SoftReset y VS_SendData de la clase
USBComMP3 para actuar directamente sobre el chip decodificador.
3. Para detener la reproducción se utiliza el método Stop de la clase
MP3FileSender.

Imagen 5.4 Reproducción remota de archivos en el PC

5.5.3 Reproducción local de archivos en el reproductor

La aplicación permite también reproducir en tiempo real en el ordenador archivos


MP3 almacenados en la memoria MMC del reproductor sin necesidad de almacenarlos
previamente en el disco duro. Para ello utiliza los métodos de descarga de archivo pero
envía los datos a una librería de reproducción de MP3 en vez de almacenarlos en disco. El
proceso de reproducción es el siguiente:

137
1. Se inicializa la comunicación (si no se ha inicializado aún)
2. Mediante la clase USBComMP3 se navega por la estructura de directorios
hasta el directorio donde se encuentra el archivo que se desea reproducir.
3. Se utiliza el método DIRGetFile con la posición del archivo que se desea
recibir.
4. Mediante el evento OnGetFileData de la clase USBComMP3 se reciben los
datos del archivo solicitado.
5. Estos datos son enviados a una librería que se encargue de su reproducción.

La librería utilizada para la reproducción local de archivos MP3 es BASS, una


librería de audio muy completa y gratuita para uso no comercial. Debido a que la librería
no está desarrollada para .NET se ha utilizado un wrapper para acceder a su interfaz desde
la aplicación. En la Imagen 5.5 se muestra el control del reproductor local (en la
aplicación) y el listado de archivos en la carpeta que se está reproduciendo.

Imagen 5.5 Reproducción local de archivos remotos.

5.5.4 Reproducción remota de streams de internet

La opción de reproducir flujos de datos MP3 procedentes de internet es similar a


la reproducción remota de archivos en el ordenador. La única diferencia es que la fuente
del flujo de datos no es un archivo almacenado en el disco duro, sino un archivo remoto o
un flujo de datos obtenido de internet. En este caso la clase utilizada es
MP3NetStreamSender que, al igual que MP3FileSender, extiende la clase
MP3SreamSender la cual se encarga realmente de la interacción con el reproductor,
enviándole los datos de un stream, ya sea de un archivo local o descargado de la red. El
proceso es el siguiente:

138
1. Se inicializa la comunicación (si no se ha inicializado aún)
2. Se instancia la clase MP3NetStreamSender con la dirección URL del archivo o
stream de audio a enviar.
3. Para detener la reproducción se utiliza el método Stop.

5.6 Podcasting y streaming a través de internet

5.6.1 Introducción

El streaming es una tecnología que permite la emisión de contenidos


audiovisuales utilizando Internet, en este caso audio en formato MP3. Existen numerosas
emisoras de radio y otro tipo de contenidos de audio que utilizan el formato MP3 para
difundir sus contenidos en internet, ya sea una emisión realizada en tiempo real o en
diferido.

Se ha querido aprovechar esto para incluir una funcionalidad poco común en los
reproductores portátiles, la posibilidad de reproducir en tiempo real el flujo de audio MP3
directamente descargado de internet, sin necesidad de almacenarlo previamente. Para
realizar esto, la aplicación es la encargada de obtener los datos en MP3 de una fuente en
internet, ya sea una radio emitiendo o un archivo. Este flujo de datos es enviado al
reproductor MP3 conectado por USB el cual se encarga de reproducirlos.

Se puede clasificar en dos tipos el audio que la aplicación puede obtener según el
tipo de fuente: los archivos MP3 almacenados en un servidor que son descargados y
enviados al reproductor según se van descargando, y el flujo de datos enviado por un
servidor, por ejemplo de una radio.

5.6.2 Obtención e identificación del tipo de recurso

Se ha incluido en la aplicación un navegador web que permite localizar y


descargar el flujo de datos MP3 que se van a reproducir. Cada vez que se hace clic en
algún enlace el navegador captura el enlace al que se va a acceder y comprueba si se trata
de un recurso conocido, de serlo cancela la navegación a este enlace y efectúa las acciones
necesarias para comenzar la descarga de los datos MP3 y enviárselas al reproductor.

Los recursos reconocidos por la aplicación son:

 Archivos MP3, son detectados por su extensión o por el tipo MIME de los
datos: audio/mpeg, audio/x-mpeg-3, audio/mpeg3, audio/mp3 o audio/mpg. En
este caso se comienza la descarga del archivo y sus datos son enviados al
reproductor conforme se van descargando.
 Archivos PLS, son detectados por su extensión o por el tipo MIME de los datos:
text/pls, audio/x-scpls, audio/mpegurl, audio/scpls o audio/x-mpegurl. Estos
archivos contienen información sobre un servidor que está emitiendo el flujo de
datos MP3.

139
 Archivos XML, su extensión puede ser variable, normalmente RSS42 y son
detectados por el tipo MIME: application/xml o text/xml. Se intentan cargar en
el navegador con en un fichero de transformación de XML (XSLT) para tipos de
archivo podcast.

5.6.3 Streaming

Existen diferentes formas de hacer streaming o difusión de datos multimedia a


través de internet. En el caso del audio MP3 los datos suelen ser transmitidos por un
servidor a través del protocolo http indicando como tipo MIME de los datos: audio/mpeg,
audio/x-mpeg-3, audio/mpeg3, audio/mp3 o audio/mpg.

La forma en la que se anuncia en la web la dirección y el puerto donde se


encuentran el servidor que está transmitiendo los datos suele ser mediante un archivo PLS
(playlist o lista de reproducción). Este archivo es abierto por el reproductor de música
predeterminado en el ordenador cliente que obtiene la dirección y el puerto del servidor, el
título de la canción o flujo de datos, y el tamaño del archivo (si es un flujo de datos el
tamaño es -1)

Formato PLS

Los archivos PLS son archivos de texto que almacenan una lista de reproducción,
ya sea de archivos locales, remotos o de servidores que emiten un flujo de datos. El
archivo está compuesto por una cabecera, un conjunto de entradas y un pie [PLSREF]43.

La cabecera está compuesta por dos líneas:

[playlist] (Indica el tipo de fichero)


NumberOfEntries=número (Indica el número de entradas en el fichero)

El formato de las entradas es el siguiente (X es el número de la entrada):

FileX=Dirección (Localización del fichero o flujo de datos)


TitleX=Título (Título de la pista)
LengthX=Tamaño (Tamaño en segundos. Si no está definido -1)

El pie del fichero es el siguiente:

Version=2 (Versión del fichero, actualmente 2)

A continuación se muestra un ejemplo de fichero PLS:

42 Formato de archivo XML para la sindicación o redifusión de contenidos.


43 No existe estándar oficial del formato PLS, pero es ámpliamente conocido y está muy extendido.

140
[playlist]
NumberOfEntries=2

File1=http://ejemplodeservidor.com:80
Title1=Radio que emite en formato MP3
Length1=-1

File2=http://miservidor.com/cancion.mp3
Title2=Archivo MP3 remoto
Length2=230

Version=2

El navegador web integrado en la aplicación captura las direcciones de los


archivos PLS cuando se hace clic sobre ellos, los descarga y extrae la dirección del primer
servidor o MP3 que contiene, iniciando su reproducción. Un archivo PLS utilizado para
publicar la dirección de una radio o flujo de audio similar contiene únicamente la entrada
que indica el servidor que ofrece el flujo de datos. Cuando se trata de emisiones con
mucha demanda pueden incluir otras entradas con servidores que ofrecen el mismo
contenido, por si el servidor principal ha alcanzado el límite de cliente a los que puede
servir y está saturado. En cualquier caso la aplicación solo utiliza la primera entrada.

Una de las principales opciones que ofrece la aplicación para el acceso a stream
de audio descargados de internet es la web Shoutcast. La aplicación contiene un enlace
directo a esta página web que ofrece cientos de emisoras de radio, una gran mayoría en
formato MP3, y que permite diferentes opciones de búsqueda. En la Imagen 5.6 puede
verse la web cargada en el navegador integrado y sobre ella los controles de reproducción.
Para reproducir una emisora tan solo hay que presionar el botón “Tune In!” que es un
enlace a un archivo PLS como el descrito.

Imagen 5.6 Reproducción de audio de Shoutcast.

141
5.6.4 Podcasting

El podcast surgió de los términos iPod y broadcast, el reproductor iPod de Apple


fue el primero en aceptar scripts para descargar contenido de la web que posteriormente
sería transferido al reproductor. Un podcast es un conjunto de archivos multimedia que se
distribuyen a través de internet utilizando la sindicación mediante archivos RSS o atom44.

La aplicación, al igual que hace con los archivos PLS, captura y descarga los
archivos RSS. En esta ocasión muestra su contenido a través del navegador web integrado
formateado mediante un fichero de transformaciones XSL (XSLT45) que lo transforma en
un archivo HTML con los enlaces a los elementos sindicados. En la Imagen 5.6 puede
verse un podcast de la universidad de Sevilla.

Imagen 5.6 Podcast cargado en el navegador de la aplicación

Formato de archivo podcast

Los archivos podcast están basados en las especificaciones RSS 2.0. Deben
incluir una serie de etiquetas determinadas que informan del contenido de cada uno de los
elementos sindicados [PODCASTREF].

44 Ambos son formatos de sindicación de contenidos basados en XML.


45 Por motivos de extensión del presente documento no se va a explicar el funcionamiento y formato de los
archivos XSLT.

142
El archivo está compuesto por una etiqueta inicial '<channel>', dentro de esta se
sitúa la información general de todos los elementos contenidos en el podcast: title, link,
copyright, itunes:author, itunes:summary, description, etc. Cada uno de los elementos
sindicados se introducen dentro de '<channel>' mediante la etiqueta '<item>'. Esta
contiene las siguientes etiquetas: title, itunes:author, itunes:subtitle, pubDate,
itunes:duration, etc. El enlace al recurso MP3 se indica mediante la siguiente etiqueta que
contiene la dirección del recurso, el tamaño y su tipo: <enclosure
url="http://serv.com/recurso.mp3" length="5650889" type="audio/mpeg" />

A continuación se muestra un ejemplo de archivo podcast:

<?xml version="1.0" encoding="UTF-8"?>


<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
version="2.0">

<channel>

<title>Titulo del podcast</title>


<link>http://www.ejemplo.com/podcasts/index.html</link>
<itunes:subtitle>Subtitulo</itunes:subtitle>
<itunes:author>David Martin</itunes:author>
<itunes:summary>Informacion</itunes:summary>
<description>Descripcion</description>
<itunes:image href="http://ejemplo.com/podcasts/imagen.jpg" />

<item>
<title>Titulo 1</title>
<itunes:author>Autor</itunes:author>
<itunes:subtitle>Subtitulo 1</itunes:subtitle>
<itunes:summary>Resumen</itunes:summary>
<enclosure url="http://ejemplo.com/recurso.mp3" length="8727310"
type="audio/mpeg" />
<pubDate>Wed, 11 Jun 2008 19:00:00 GMT</pubDate>
<itunes:duration>7:04</itunes:duration>
</item>

<item>
<title>Titulo 2</title>
<itunes:author>Autor</itunes:author>
<itunes:subtitle>Subtitulo 2</itunes:subtitle>
<itunes:summary>Resumen</itunes:summary>
<enclosure url="http://ejemplo.com/recurso2.mp3" length="3727310"
type="audio/mpeg" />
<pubDate>Wed, 11 Jun 2008 19:05:00 GMT</pubDate>
<itunes:duration>3:04</itunes:duration>
</item>

</channel>

</rss>

Los archivos pueden contener gran cantidad de etiquetas y su implementación


puede cambiar. Cada lector/reproductor de archivos podcast pueden aceptar un
subconjunto de estas etiquetas, ignorando el resto. No obstante se han indicado las más
importantes y que se suelen incluir en todos los archivos.

143
5.6.5 Emisoras favoritas

Para almacenar la dirección de un conjunto de archivos y servidores de audio


mp3 se ha implementado en la aplicación una opción similar a la de “favoritos” de los
navegadores. De esta forma el usuario puede almacenar fácilmente las fuentes de sonido
que considere más interesantes para escucharlas en un futuro.

En este caso es utiliza la interfaz gráfica del navegador web integrado en la


aplicación de forma que las fuentes añadidas al archivo de favoritos se almacenan
internamente en un archivo XML similar al de podcasting. Este archivo es transformado
por un archivo XSLT en un código HTML legible por el navegador. Se han añadido
enlaces para borrar o añadir nuevas fuentes al listado, el evento generado al presionar
sobre estos enlaces es capturado por la aplicación que muestra una ventana para eliminar
o añadir un nuevo elemento.

Se han creado dos listas de favoritos, una para los podcast favoritos y otra para las
radios favoritas; el listado de podcast favoritos puede verse en la IMG.

Imagen 5.7 Listado de Podcast favoritos

144
6. Presupuesto y planificación

6.1 Introducción
En esta sección se van a detallar los costes económicos derivados de la de
realización del presente proyecto. Para ello se han dividido los costes agrupándolos según
la naturaleza de los mismos. Cabe destacar que estos costes corresponden a la realización
del prototipo y no corresponden al coste unitario de la producción en serie del reproductor.
Los costes se han agrupado se la siguiente manera:

 Software: aquí se incluye todo el software necesario para la realización del


proyecto, pero que no forma parte de él, como sistema operativo, programas
CAD, entornos de programación, etc.
 Herramientas: a este grupo pertenecen todas la herramientas (físicas) que se han
utilizado para la realización del proyecto.
 Componentes y fabricación del PCB: se incluye el coste del circuito impreso y
todos los componentes que la componen.
 Mano de obra: coste de los recursos humanos que han sido necesarios.

Por último indicar que el coste de los componentes y materiales de esta sección
corresponden a precios sin IVA.

6.2 Coste del software


El software utilizado para el desarrollo del sistema consta de sistema operativo,
herramienta CAD para el diseño del circuito impreso, compilador C para el firmware del
microcontrolador, entornos de desarrollo de C#, Microsoft .NET Framework SDK 2.0 y
otras aplicaciones para el diseño de iconos y gráficos, tanto los mostrados por la pantalla
LCD como los de la aplicación windows.

Se ha utilizado el sistemas operativo Windows XP para el desarrollo y pruebas del


proyecto, aun que también se ha podido probar su funcionamiento en Windows Vista. El
programa de CAD utilizado ha sido Eagle de Cadsoft, en concreto una versión gratuita
con limitación a dos capas como máximo y al uso no comercial del diseño.

En cuanto a la programación, el compilador utilizado para el firmware del


microcontrolador es PCWH de CSS, que también tiene una versión gratuita limitada, y
para la programación de la librerías y la aplicación Windows se han utilizado el entorno
Sharpdevelop 1.1 y el Visual Studio 2005. Gracias al proyecto DreamSpark de Microsoft
los estudiantes universitarios españoles pueden obtener acceso gratuito a este software y
por tanto no se ha contabilizado su coste.

Las aplicaciones utilizadas para programar el microcontrolador han sido IC-Prog


y WinPic800, ambos gratuitos. La redacción de esta memoria se realiza con la aplicación,
también gratuita, Open Office.

145
Además se han utilizado otras aplicaciones de carácter gratuito para tareas
menores, como el programa GIMP y FastLCD Designer, aunque por su poco uso y
carácter gratuito no se han añadido a la Tabla 6.1 donde aparecen desglosados el coste de
los programas.

Programa Precio
Windows XP OEM (precio incluido
en el coste del PC)
Eagle Demo 0.00€
Compilador PCWH 320€
Visual Studio 2005 0.00€
SharpDevelop 1.1 0.00€
WinPIC800 0.00€
IC-Prog 0.00€
Total 320€
Tabla 6.1 Precio del Software

Hay que recordar que la Tabla 6.1 muestra el precio del producto, el coste
depende del número de proyectos que hagan uso de él y por tanto de la amortización de
cada uno.

6.3 Coste de las herramientas


Como herramientas se entiende todo el hardware utilizado para el desarrollo del
proyecto, tanto los ordenadores como herramientas para el montaje y testeo del circuito
impreso.

Para el desarrollo del proyecto se ha empleando un ordenador de sobremesa cuyas


principales características son las siguientes:

 Procesador AMD Athlon 64 X2 3800+


 Memoria RAM 2GB
 Disco duro de 320 GB
 Monitor 17''
 Sistema operativo Windows XP

En cuanto a las herramientas para el montaje, testeo y programación del circuito


se han utilizado:

146
 Herramientas de soldadura: soldador, base del soldador, estaño, flux y malla de
desoldar.
 Placa fotosensible para el primer prototipo y materiales de revelado y atacado.
 Microtaladro y brocas usadas en el primer prototipo
 Polímetro.
 Osciloscopio digital TekMeter THM550.
 Programador JDM
 Pilas recargables

Algunos elementos menores como pinzas para sujetar componentes, pinzas de


extracción de chips, flexo para iluminar y similares no se han incluido. En la Tabla 6.2 se
lista el precio de cada uno de los elementos indicados. Como en el caso del software se
trata del precio íntegro de los elementos, el coste depende del uso que se haga de ellos en
otros proyectos y de su amortización.

Elemento Precio
Ordenador de sobremesa 850€
Herramientas de soldadura 40€
Placa fotosensible y materiales de revelado/atacado 15€
Microtaladro y brocas 15€
Polímetro 10€
Osciloscopio 250€
Programador JDM 15€
Pilas recargables 5€
Total 1.200€
Tabla 6.2 Precio de las herramientas

6.4 Coste de los componentes y PCB


Se han realizado dos prototipos de circuito impreso, el primero se realizó de
forma “artesanal” como se indica en el capítulo del desarrollo hardware, el segundo tan
solo modifica el circuito de alimentación del primer prototipo, y en esta ocasión se mandó
fabricar la placa del circuito ya que se necesitaba un circuito de una mayor calidad.

Debido a la gran variedad de elementos discretos que se han utilizado en el


circuito algunos se han agrupado, este es el caso por ejemplo de los condensadores y
resistencias. Algunos elementos, como el módulo USB, se han empleado en ambos
prototipos y no ha sido necesario adquirirlos por duplicado. Otros elementos, como el
microcontrolador, han sido conseguidos como muestras gratuitas. En la Tabla 6.3 se lista
el precio de todos los componentes.

147
Elemento Precio
Placa de circuito impreso 45€
PIC 18LF452 0€
Pantalla LCD 12€
Módulo USB 18€
Decodificador MP3 VS1001K 20€
MAX1675 0€
TC110 0€
Tarjeta de memoria 18€
Cable USB 2,50€
Cristales de 20MHz y 14MHz 1€
Condensadores 3,50€
Resistencias 0,60€
Inductancias 1,80€
Diodos 0,60€
Transistor Mosfet 0,50€
Conector MMC 3€
Conector de audio jack 3,5mm 0,30€
Interruptor 0,20€
Botones 3€
Separadores hexagonales 2€
Espadines 0,50€
Zócalo para integrado de 40 pines 0,40€
Portapilas 2 AA 0,50€
Total 133,40€
Tabla 6.3 Precio de componentes

6.5 Planificación y mano de obra


Todas las tareas del presente proyecto han sido realizadas por el proyectista, no
obstante el coste de la mano de obra se van a dividir dependiendo de su tipo en coste
estimado de horas/hombre de ingeniero y de técnico. El coste de la hora de ingeniero se ha
valorado en 20 €/hora y el de técnico en 12 €/hora46.

En la Imagen 6.1 se presenta el diagrama de Gantt de la estimación de la duración


del proyecto integrando el tiempo, como si hubiese habido una dedicación exclusiva a
éste. Desgraciadamente esto no ha sido posible debido a otras obligaciones académicas y,
sobre todo, laborales. Inicialmente se muestra la tarea de búsqueda bibliográfica y
documentación, no obstante la documentación y la consulta de manuales de referencia y
especificaciones se ha realizado durante todas las partes del proyecto.

46 Valoración obtenida a partir de las tablas salariales del convenio laboral de “Empresas de ingeniería y
estudios técnicos”

148
Imagen 6.1 Diagrama de Gantt

149
Gran parte del desarrollo del firmware del microcontrolador se ha realizado
simultáneamente con la aplicación ya que tareas como la comunicación comparten
elementos que hacen necesario su desarrollo y depuración en paralelo. En la Tabla 6.4 se
muestra el número de horas de ingeniero y técnico empleadas. No se han contabilizado
fines de semana. Las horas de técnico corresponden a las tareas de montaje y testeo de las
placas de circuito impreso.

Personal Horas/Hombre Coste


Ingeniero 1.350 27.000 €
Técnico 50 600 €
Total 1.400 27.600 €
Tabla 6.4 Valoración del coste de mano de obra.

En la Tabla 6.5 se resumen el coste total del proyecto, no obstante hay que
recordar que los costes de software y herramientas utilizadas son los precios de los
mismos, y su coste real depende de los proyectos que se realicen con ellos y su
amortización.

Concepto Coste
Software 320 €
Herramientas 1.200 €
Componentes 133,40€
Mano de obra 27.600 €
Total 29.253,40€
Tabla 6.5 Coste total del proyecto

150
7. Conclusiones y trabajo futuro

7.1 Conclusiones
Después de realizar las pruebas sobre el reproductor y aplicación desarrollados se
puede concluir que se han cumplido los objetivos planteados al inicio del proyecto.

Se ha conseguido desarrollar con éxito un circuito impreso microcontrolado capaz


de acceder al sistema de archivos FAT16 y reproducir archivos de audio en formato MP3
almacenados en una tarjeta de memoria Multimedia Card o Secure Digital. El interfaz de
usuario consta de una botonera para el control de reproductor y una pantalla gráfica LCD
de 84x48 píxeles donde se muestra información del archivo en reproducción extraída de la
etiqueta ID3. El reproductor permite además comunicarse con una aplicación en un
ordenador mediante el interfaz USB, esta aplicación puede controlar por completo el
reproductor, acceder al sistema de archivos y descargar archivos almacenados en la tarjeta
de memoria. La aplicación desarrollada permite el control de distintos modos de
reproducción:

 Reproducción de archivos almacenados en la tarjeta de memoria.


 Reproducción en tiempo real (en el reproductor) de archivos almacenados en el
ordenador.
 Reproducción en tiempo real en la aplicación de archivos almacenados en la
tarjeta de memoria.
 Reproducción de flujos de audio descargados de internet (como radios a través
de internet y podcasting)

Se ha definido un protocolo de comunicación entre el reproductor y la aplicación,


y se ha implementado una librería DLL que encapsula el protocolo para poder desarrollar
más fácilmente aplicaciones futuras.

Los elementos principales del reproductor desarrollado son:

 Un microcontrolador PIC18LF452, uno de los más potentes y con más memoria


de su familia, debido a las necesidades del proyecto. No obstante se ha tenido
que optimizar tanto la velocidad de ejecución del código como su tamaño para
garantizar una reproducción sin cortes con archivos MP3 de tasas de bit altas.

 La decodificación del audio MP3 se ha realizado mediante el integrado


VS1001k, que incorpora además un decodificador D/A y un pequeño
amplificador que permite conectarlo directamente a unos auriculares.

 La comunicación USB se ha realizado mediante el integrado FT245BM de


FTDI Chip, que proporciona unos drivers que facilitan la comunicación. Debido
al tipo de encapsulado de este integrado, de difícil soldadura, se ha utilizado un
módulo que facilita el desarrollo de prototipos al contener los elementos básicos
que necesita y utilizar un formato DIP.

151
 La pantalla LCD utilizada es una pantalla gráfica monocromo de 84x48 píxeles
con un interfaz serie de tan solo ocho líneas y fácil de obtener, ya que se utiliza
en los teléfonos móviles Nokia 3310.

 La alimentación, si no está conectada por USB a un ordenador, la proporcionan


dos pilas AA que hacen del reproductor un dispositivo portátil. Si el reproductor
está conectado por USB se deben utilizar pilas recargables ya que el
reproductor, además de alimentarse por este puerto, recarga las pilas.

 La tarjeta de memoria utilizada para el almacenamiento de los archivos MP3


puede ser tanto Multimedia Card como Secure Digital, ya que el protocolo
utilizado es compartido por ambas. Se pueden utilizar tarjetas de hasta 2GB y
han de estar formateadas en FAT16, que al ser un formato de archivos muy
difundido pueden ser leídas y escritas por casi cualquier dispositivo.

En definitiva se han cumplido los objetivos planteados al inicio del proyecto,


siendo un reproductor portable, con un interfaz de usuario fácil e intuitivo, capaz de cargar
las pilas mediante el puerto USB y ser controlado por completo mediante una aplicación
que permite, además de acceder al sistema de archivos de la memoria, la reproducción
tanto de archivos almacenados localmente como de archivos almacenados en el ordenador
y flujos de datos descargados de internet en tiempo real.

7.2 Trabajo futuro


Además de todas las funcionalidades incluidas tanto en el reproductor como en la
aplicación, el uso tanto de una pantalla gráfica como de una conexión USB que permite la
comunicación con el reproductor, y no es simplemente un dispositivo de almacenamiento
masivo, ofrecen la posibilidad del desarrollo de más funcionalidades.

Un ejemplo de las mejoras futuras que se proponen son:

 Permitir la grabación de archivos desde el PC.

 Aumentar los modos de reproducción del reproductor, como por ejemplo:


reproducción aleatoria dentro de un directorio, aleatoria en toda la memoria,
modo shuffle, etc.

 Posibilidad de crear listas de reproducción.

 Añadir funciones de karaoke, que muestren la letra de la canción en la pantalla


gráfica a partir de un archivo con los tiempos.

 Desarrollar, a partir de la librería de comunicaciones, un servicio que permita el


control del reproductor de forma remota, como una página web o desde una
aplicación en una PDA. Esto puede ser interesante si, por ejemplo, se desea
conectar el reproductor a un sistema de hilo musical y controlar de forma
remota lo que se está reproduciendo.

152
 Permitir la grabación de audio en formato MP3, para ello habría que cambiar el
integrado de decodificación de MP3 por otro que permita también la
codificación (por ejemplo el MAS3587F)

153
APÉNDICE I Manual de usuario

1. Introducción
El reproductor de música utiliza memorias Multimedia Card o Secure Digital para
almacenar los archivos de audio en formato MP3.

Las características principales son las siguientes:

 Reproducción de archivos de audio MP3.


 Soporte ID3 versión 1 y 2.
 Almacenamiento en memoria Multimedia Card o Secure Digital
 Navegación por el árbol de directorios
 Pantalla gráfica LCD monocromo de 84x48 píxeles
 Seis botones
 Conexión al ordenador mediante USB
 Aplicación para el control del reproductor desde el ordenador.
 Descarga de archivos Reproductor->PC
 Reproducción directa de archivos almacenados en el ordenador
 Reproducción en la aplicación de archivos almacenados en la tarjeta de
memoria.
 Reproducción de radio a través de internet.

2. Especificaciones técnicas
A continuación se listan las especificaciones del reproductor:

 Decodificación : Audio MPEG 1/2 Layer 3


CBR y VBR
Hasta 320 kbps
 Tarjeta de memoria : Multimedia Card y Secure Digital
 Sistema de archivos : FAT16
 Pantalla : LCD monocromo de 84x48 pieles
 Alimentación : 2 pilas AA
 Interfaz USB : Compatible con USB 1.1 y 2.0
 Resolución del DAC : 16 bits
 Canales : Estéreo
 Respuesta en frecuencia : 20 Hz – 20KHz
47
 Rango dinámico : 90 db
 Relación Señal/Ruido : 87 db
 Salida de audio : Mini-Jack 3 ½ (Auriculares/Salida en linea)
48
 Consumo : 100 mA (de las pilas)
: 300 mA (del USB si está cargando las pilas)
 Autonomía49 : 18 horas

47 Datos de rango dinámico y relación S/R según especificaciones del decodificador de MP3.
48 Consumo máximo en reproducción, depende de varios factores, como el volumen del audio.
49 Autonomía aproximada, depende principalmente de la capacidad de las pilas.

154
3. Requisitos del sistema
Los requisitos del sistema son:

 Sistema operativo Windows 98 / ME / 2000 / XP / Vista


 Framework .NET 2.0
 Un puerto USB libre.
 Lector CD/DVD para la instalación de los drivers y la aplicación.
 Se recomienda tarjeta de sonido, para la reproducción local.
 Conexión a internet, para reproducir radio a través de internet y podcasting.

4. Reproductor

4.1 Vista general y controles

Imagen I.1 Visión general del reproductor

155
En la Imagen I.1 puede verse una visión general del reproductor, en la que
destacan lo siguientes elementos:

 Botonera, compuesta de 6 botones (subir volumen, bajar volumen,


opciones/archivos, anterior, reproducir/pausar y siguiente)
 Pantalla LCD
 Pilas, dos pilas AA.
 Conector USB
 Interruptor de encendido/apagado
 Conector de salida de audio.
 Jumpers auriculares/salida en línea, seleccionan si en la salida de audio se van a
conectar unos auriculares (jumpers conectados) o se va a usar de salida en línea
(jumpers sin conectar).
 Tarjeta de memoria, del tipo Multimedia Card o Secure Digital.

En la Imagen I.2 se muestra la función de cada botón de la botonera.

Imagen I.2 Detalles de la botonera

Los botones pueden variar la funcionalidad según la pantalla en la que se


encuentre en cada momento. Los botones de subir y bajar volumen son los únicos que
mantienen una funcionalidad en todo momento. Las funcionalidades del resto de botones
son las siguientes:

 Opciones/Archivos: cuando el reproductor está parado este botón sirve para


entrar en la pantalla del listado de archivos. Cuando está en reproducción se
utiliza para entrar en el menú de opciones de sonido.
 Anterior: dentro de la pantalla del listado de archivos sirve para seleccionar el
archivo anterior, mientras que en la de opciones la opción anterior. Si el
reproductor se encuentra reproduciendo pasa a reproducir el archivo de audio
anterior.

156
 Siguiente: equivalente al botón anterior, selecciona el archivo o la opción
siguiente.
 Reproducir: en el listado de archivos sirve para reproducir el archivo
seleccionado o entrar en el directorio seleccionado. En el menú de opciones
para activar o desactivar la opción seleccionada. Si se está reproduciendo un
archivo, sirve para pausar o para detener la reproducción (si se mantiene el
botón presionado un par de segundos)

4.2 Alimentación y recarga de pilas

El reproductor utiliza pilas de tipo AA, tanto recargables como no recargables. Si


se utilizan pilas no recargables es importante extraerlas antes de conectar el reproductor al
puerto USB, de lo contrario se podrían dañar tanto las pilas como el reproductor.

Cuando el reproductor está conectado mediante el puerto USB a un ordenador


éste le suministra la alimentación necesaria para funcionar y además carga las pilas
recargables, en caso de estar conectadas. Para la recarga de pilas es necesario que el
interruptor de encendido esté en posición de encendido, en ese momento el reproductor
comenzará la recarga de las pilas tanto si está en uso como si no (el ordenador debe estar
encendido).

Hay que recordar que el reproductor no es un cargador de pilas y posee un


circuito de carga muy básico. Es recomendable cargar las pilas en un cargador
convencional si se dispone de él. En caso de no estar disponible el reproductor puede
usarse para recargar pilas de tipo NiMH y NiCd de 1.5 voltios. El tiempo de carga
dependerá de la capacidad de las pilas, para unas pilas de 1800mAh el tiempo de carga es
de 8 horas. Es aconsejable no reproducir a la vez que se realiza la carga, de lo contrario el
tiempo de carga aumenta.

Durante el tiempo que el reproductor está conectado al puerto USB de un


ordenador alguno componentes del circuito pueden calentarse, esto es normal. Hay que
evitar tocar los elementos del circuito cuando éste esté cargando las pilas.

4.3 Pantalla LCD

La pantalla LCD muestra tres pantallas principales dependiendo del estado del
reproductor, estas son: pantalla de espera o reproducción (Imagen I.3), listado de archivos
(Imagen I.4) y menú de opciones (Imagen I.5).

157
Imagen I.3 Pantalla LCD con el reproductor en espera.

Imagen I.4 Pantalla del listado de archivos

Imagen I.5 Pantalla del listado de opciones

Durante la reproducción de un archivo MP3 en la pantalla aparece información


tanto del formato del archivo como del contenido, leído de la etiqueta ID3. Si el archivo
no posee una etiqueta ID3 aparece el nombre del archivo. En la Imagen I.6 aparece
detallada la información que puede verse durante la reproducción.

A continuación se explican cada uno de los elementos que aparecen en la


pantalla:

158
 El icono indica que estamos escuchando un archivo MP3.
 El icono indica el modo de reproducción, en este caso normal (reproducción
de los archivos según el orden en el directorio).
 A continuación aparece la tasa de bit, puede ir de 8 kbps a 320 kbps. Si se está
reproduciendo un archivo con tasa de bit variable (VBR) este número irá
cambiando.
 Debajo de la tasa de bit aparece la frecuencia de muestreo del archivo MP3, las
valores posibles son: 8 kHz, 11 kHz, 12 kHz, 16 kHz, 22 kHz, 24 kHz, 32 kHz,
44 kHz, 48kHz .
 Arriba a la derecha aparece un icono que indica si se trata de un archivo estéreo
o monofónico. Si el archivo es estéreo aparece el icono , si es monofónico
aparece . Si está activada la opción differential y el archivo es estéreo se crea
un Virtual Surround y aparece el icono , si se trata de un archivo mono
aparece .
 Debajo de este icono aparece la palabra “BASS” o “NORM” dependiendo de si
está activada la opción de realce de bajos o no.
 En la siguiente línea aparece el número del archivo dentro del directorio, el
tiempo de reproducción y un gráfico de barras que indican el nivel del volumen.
 En las tres siguiente líneas aparece la información extraída de la etiqueta ID3
del archivo. En las dos primeras líneas aparece el título de la canción, y en la
siguiente aparece el autor y el álbum entre paréntesis, mediante un texto
deslizante.

Imagen I.6 Descripción de la información en pantalla

4.4 Utilización

Antes de empezar a utilizar el reproductor hay que asegurarse de que la tarjeta de


memoria esté insertada y no extraerla mientras esté encendido. Se han de utilizar pilas de
tamaño AA, si se va a conectar el reproductor al puerto USB del ordenador estas han de
ser recargables. El reproductor puede utilizarse sin pilas si está conectado al puerto USB,
ya que se alimenta de éste.

159
Reproducción de un archivo

Una vez encendido el reproductor la pantalla muestra la apariencia de la Imagen


I.3. En este momento se puede presionar el botón de “Reproducir” para comenzar la
reproducción del primer archivo MP3 del directorio raíz.

Si se desea reproducir un archivo en concreto se puede seleccionar accediendo a


la lista de archivos. Para ello se ha de presionar el botón “Opciones/Archivos”, ésto abrirá
un navegador que permite acceder al árbol de directorios y archivos de la memoria
(Imagen I.4). Los botones “Siguiente” y “Anterior” cambian el elemento seleccionado, y
el botón “Reproducir” inicia su reproducción en caso de que se trate de un archivo MP3.
En caso de que el elemento seleccionado sea un directorio el botón “Reproducir” entra
dentro de él.

Cuando finaliza la reproducción de un archivo comienza a reproducirse el


siguiente archivo dentro del directorio, en caso de tratarse del último archivo dentro del
directorio finaliza la reproducción.

Controles de reproducción

Durante la reproducción se puede cambiar de archivo presionando los botones


“Siguiente” y “Anterior”, que inician la reproducción de los archivos siguiente y anterior
respectivamente del archivo en ese momento en reproducción.

Para pausar la reproducción se ha de presionar el botón “Reproducir” una vez,


esto pausa la reproducción y permite retomarla en el punto en el que se ha quedado. Para
volver a retomar la reproducción hay que presionar de nuevo el botón “Reproducir”.

Si se desea detener totalmente la reproducción de un archivo se ha de presionar de


forma continuada el botón “Reproducir” durante un par de segundos.

Control de volumen

Para aumentar o disminuir el volumen de audio del reproductor se ha de presionar


los botones “Subir volumen” o “Bajar volumen”. No es necesario que el reproductor esté
reproduciendo para cambiar el nivel de volumen. Los cambio realizados se almacenan de
forma que serán recordados la próxima vez que se encienda el reproductor.

El nivel del volumen puede verse en la pantalla representado por un conjunto de


barras, como podía verse en la Imagen I.6.

Menú de opciones

Para entrar en el menú de opciones se debe presionar el botón


“Opciones/Archivo” durante la reproducción de un archivo. El menú de opciones puede
verse en la Imagen I.5, las opciones son: “BASS”, “Virtual Surround” y “Reproducción

160
Normal”50. Al igual que con el listado de archivos, se utilizan los botones “Siguiente” y
“Anterior” para cambiar el elemento seleccionado, y el botón “Reproducir” para activar o
desactivar la opción. Para salir del menú de opciones sin efectuar ningún cambio se
presiona de nuevo el botón “Opciones/Archivo”.

El icono delante del nombre de la opción indica si ésta está activada o


desactivada. En caso de estar activada aparece el icono y si está desactivada .

5 Aplicación

5.1 Instalación

Antes de iniciar la instalación de la aplicación de control del reproductor MP3


han de estar instaladas una serie de drivers y librerías.

Instalación de Microsoft .NET Framework 2.0

En primer lugar se ha de instalar el .NET Framework 2.0 de Microsoft que se


encuentra en el CD de instalación adjunto o se puede descargar la la página web de
Microsoft:

http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-
4b0d-8edd-aab15c5e04f5&displaylang=es

Una vez descargado el programa de instalación de Microsoft .NET Framework


2.0 se ejecuta y se siguen los pasos indicados durante el proceso de instalación, que puede
durar varios minutos. Para más información sobre la instalación de Microsoft .NET
Framework 2.0 acudir a la web anteriormente mencionada o ponerse en contacto con el
servicio técnico de Microsoft.

Instalación de los controladores de USB

El CD de instalación adjunto incluye un instalador de los drivers de USB


necesarios que se han de instalar antes de la aplicación de control. Después de ejecutar el
programa de instalación éste instala automáticamente todos los drivers necesarios sin
necesidad de realizar ninguna acción. En la Imagen I.7 puede verse la ventana de
instalación.

50 Solo está disponible el modo de reproducción normal, en futuras actualizaciones pueden incluirse otros
modos de reproducción, como el aleatorio.

161
Imagen I.7 Ventana de instalación del driver de USB.

Instalación de la aplicación

Una vez instalado el Framework .NET y los drivers del controlador USB se puede
proceder a la instalación de la aplicación. Para ello se ejecuta el archivo de instalación y
se siguen los pasos indicados. Se trata de una instalación estándar, las ventanas del
proceso de instalación pueden verse en las imágenes: Imagen I.8, Imagen I.9, Imagen I.10
y Imagen I.11.

Imagen I.8 Asistente de instalación de la aplicación 1.

162
Imagen I.9 Asistente de instalación de la aplicación 2.

Imagen I.10 Asistente de instalación de la aplicación 3.

Imagen I.11 Asistente de instalación de la aplicación 4.

163
5.2 Ventana principal

Antes de iniciar la aplicación el reproductor ha de estar encendido y conectado a


un puerto USB del ordenador. Durante el arranque la aplicación muestra una ventana
como la de la Imagen I.12, indicando el paso de iniciación de la comunicación en el que
se encuentra.

Imagen I.12 Iniciación de comunicación.

Una vez iniciada la comunicación se mostrará la ventana principal de la


aplicación, que consta de dos regiones principales como puede verse en la Imagen I.13. La
parte izquierda de la ventana es un menú en forma de árbol que permite seleccionar la
acción que se desea realizar. En la parte derecha o zona principal se muestran los
controles principales de la aplicación y su contenido variará dependiendo de la acción
seleccionada en el menú izquierdo. Para facilitar el uso de la aplicación el interfaz simula
una ventana del explorador de Windows, tanto en su apariencia como en sus utilización.

Imagen I.13 Regiones principales de la aplicación.

164
5.3 Contenido de la tarjeta de memoria

Después de iniciar la comunicación el menú tiene seleccionada la opción de


“Reproductor\Memoria”, esta opción muestra en la zona principal el listado de carpetas y
archivos que contiene el reproductor de forma similar a como se muestra en el explorador
de Windows, como muestra la Imagen I.14. La navegación entre carpetas es muy sencilla,
tan solo hay que hacer doble clic sobre la carpeta a la que se quiere acceder.

Imagen I.14 Contenido de la tarjeta de memoria

Para descargar un archivo de la tarjeta de memoria al ordenador ha de arrastrarlo


y soltarlo sobre la ventana de la carpeta donde se desea copiar, tal y como se hace con el
explorador de Windows. Al hacerlo aparecerá una ventana que muestra la progresión de la
descarga, tal y como muestra la Imagen I.15.

Imagen I.15 Ventana de copia de un archivo.

5.4 Reproducción de archivos en la tarjeta de memoria

Para reproducir en el reproductor un archivo que se encuentre en la tarjeta de


memoria hay que acceder primero al listado de archivos de la tarjeta (opción
“Reproductor\Memoria”), una vez en él se selecciona el archivo que se desea reproducir y
se presiona el botón derecho del ratón. Aparecerá un menú como el de la Imagen I.16, se
selecciona la opción “Reproducción remota”.

165
Imagen I.16 Opción Reproducción remota.

Esto abrirá una ventana en la aplicación simulando un reproductor, con los


controles típicos (Imagen I.17), además de un listado de los archivos del directorio donde
se está reproduciendo, que permite iniciar la reproducción de otro archivo del mismo
directorio.

Imagen I.17 Reproducción remota de archivos en la tarjeta.

5.5 Reproducción en la aplicación de archivos de la memoria

La aplicación permite reproducir en el ordenador archivos almacenados en la


memoria del reproductor. Para ello hay que seguir los mismos pasos que en la
reproducción de archivos en el reproductor, pero en este caso seleccionar la opción
“Reproducción local” del menú (Imagen I.18).

Imagen I.18 Opción Reproducción local.

Esto abre en la aplicación una ventana con un reproductor con los controles
básicos de reproducción y un pequeño analizador de espectro del audio que está sonando,
tal y como se muestra en la Imagen I.19. Es necesario que el ordenador tenga una tarjeta
de sonido y unos altavoces conectados para poder escuchar audio.

166
Imagen I.19 Reproductor local de audio.

5.6 Reproducción de archivos almacenados en el PC

El reproductor también es capaz de reproducir archivos almacenados en el


ordenador sin necesidad de ser grabados en la tarjeta de memoria. Para ello hay se
seleccionar en el menú de la izquierda la opción “Reproductor\Lista de reproducción”. En
la zona principal aparece la lista de los archivos MP3 que se van a reproducir, y sobre este
listado un pequeño control de reproducción, tal y como se muestra en la Imagen I.20.

Imagen I.20 Lista de reproducción

167
Para añadir archivos a la lista de reproducción tan solo hay que arrastrar los
archivos deseados de una ventana del explorador a la aplicación. Se pueden añadir tanto
archivos MP3 como archivos PLS (listas de reproducción) como se muestra en la Imagen
I.21.

Imagen I.21 Añadiendo archivos al listado de reproducción

Además la lista de reproducción puede ser exportada a un archivo PLS, así esta
misma lista puede ser utilizada en el futuro, tanto por la aplicación como por otros
programas que lean este formato de archivo (por ejemplo el Winamp). Para hacer esto hay
que pulsar sobre el botón rojo del control de reproducción.

Para reproducir un archivo hay que hacer doble clic sobre él o seleccionarlo y
presionar el botón de reproducción del control de reproducción superior. El archivo en
reproducción se mostrará con un icono de color verde a su izquierda, y los demás con un
icono de color rojo, tal y como se muestra en la Imagen I.22. Cuando finaliza la
reproducción de un archivo comienza la reproducción del siguiente de la lista.

Imagen I.22 Detalle de los iconos del estado del archivo

5.7 Streaming

El reproductor permite reproducir flujos de datos MP3 descargados de internet


directamente, sin necesidad de ser almacenados ni en el ordenador ni en la tarjeta de
memoria. Estos pueden ser archivos MP3 (podcast por ejemplo) o flujos de datos
transmitidos en tiempo real, como una radio a través de internet. Para ello hay que
seleccionar una de las opciones del menú dentro de la sección “Streaming”. Existen dos
subsecciones dentro de “Streaming”: Podcasting e Internet Radio.

Podcasting

Dentro de la subsección “Podcasting” se encuentra la opción “Podcasters


Favoritos”, aquí se guardan una lista de las direcciones de podcasting favoritas del

168
usuario. En la Imagen I.23 puede verse la apariencia de la lista, que contiene enlaces para
borrar y añadir direcciones.

Imagen I.23 Podcast Favoritos

Al presionar sobre el título de una dirección guardada se carga en el explorador


de internet integrado en la aplicación la página web de dicha dirección. Una vez en la
página web se puede navegar por ésta, al igual que en un navegador web habitual, con la
peculiaridad que al presionar enlaces cuyos contenidos sean archivos MP3 estos serán
reproducidos en el reproductor. La reproducción puede controlarse con los controles que
se encuentran sobre el navegador web. Puede verse un ejemplo en la Imagen I.24.

Imagen I.24 Contenido de un Podcast.

169
Internet Radio

Además de archivos MP3 la aplicación puede mandar al reproductor flujos de


audio en formato MP3 que descarga de la red a partir de fuentes que transmiten el
contenido en tiempo real, como son las radios. El funcionamiento es similar al del
Podcasting, pero esta vez los enlaces no apuntan a archivos MP3 sino a servidores que
transmiten dicho contenido o a archivos PLS (listas de reproducción) que contienen la
dirección de dichos servidores.

Dentro de la subsección “Internet Radio” hay dos opciones:

 ShoutCast: Página web con cientos de radios que emiten codificando el audio
en formato MP3.
 Radios Favoritas: Similar a “Poscasters Favoritos” pero en este caso se
almacena la dirección del servidor o archivo PLS de la radio en cuestión.

Ambas opciones funcionan de manera similar a la opción “Poscasters Favoritos”,


cargando el contenido del enlace en el navegador web integrado. La reproducción se
controla con los botones que se encuentran sobre el navegador web. En la Imagen I.25
puede verse la página web de SHOUTcast.

Imagen I.25 Página web de SHOUTcast.

170
APÉNDICE II Estructura de FAT16

II.1 Introducción
En este apéndice se va a detallar la estructura del sistema de archivos FAT16 que
se ha utilizado en el presente proyecto. A partir de la información aquí descrita se ha
desarrollado la librería para el microcontrolador que fue explicada en el capítulo de
Firmware.

II.2 Estructura de FAT16


En el primer sector del disco se encuentra el Master Boot Record (MBR) que a su
vez guarda información de donde se encuentran cada una de las particiones del disco 51. Es
el primer sector que se debe leer antes de poder acceder a una partición.

II.2.1 Master Boot Record

Es la estructura más importante en un disco y se crea cuando éste es particionado.


Contiene una pequeña cantidad de código ejecutable, llamado código de arranque
maestro, la firma del disco y las tablas de partición del disco. Se puede ver la estructura en
la Tabla II.1.

Posición Descripción Tamaño


0x000 Código ejecutable 446 bytes
0x1BE 1ª Partición 16 bytes
0x1CE 2ª Partición 16 bytes
0x1DE 3ª Partición 16 bytes
0x1EE 4ª Partición 16 bytes
0x1FE Firma de la unidad (0x55AA) 2 bytes
Tabla II.1 Estructura del Master Boot Record

Lo primero que se debe hacer es localizar la posición de la primera partición, que


es donde se van a alojar los archivos y con la que se va a trabajar. Como se puede
observar en la Tabla II.1 la información para localizar la primera partición se encuentra en
la posición 0x1BE dentro del MBR, la estructura de este campo se puede ver en la Tabla
II.2, gracias a estos datos se puede localizar el principio y fin de la partición, el tipo de
partición y su tamaño.

51 Se utilizará 'disco' de manera genérica, ya que la estructura es igual tanto en discos duros como en
tarjetas de memoria.

171
Posición Descripción Tamaño
relativa
0x00 Estado de la partición (0x00=desactivo; 0x80=activo) 1 byte
0x01 Cabezal de inicio de la partición 1 byte
0x02 Cilindro/Sector de inicio de la partición 2 bytes
(10 bits indican el cilintro y 6 el sector)
0x04 Tipo de partición 1 byte
(0x04=FAT16 de menos de 32MB; 0x08=FAT16 de más de
32MB)
0x05 Cabezal de fin de la partición 1 byte
0x06 Cilindro/Sector de fin la partición 2 bytes
(10 bits indican el cilindro y 6 el sector)
0x08 Número de sectores entre el principio del disco y el principio de 4 bytes
la partición
0x0C Número total de sectores de la partición 4 bytes
Tabla II.2 Estructura del registro de partición en el MBR

II.2.2 Sector de arranque de la partición

La estructura de una partición FAT16 se compone de cuatro partes: el sector de


arranque de la partición, dos copias de la tabla de partición, el directorio raíz y el área de
datos, tal y como aparece en la Imagen II.1.

Imagen II.1 Estructura de una partición FAT16

El sector de arranque es el primer sector en la partición y su estructura depende


del tipo de partición del que se trate. La estructura del sector de arranque de FAT16 se
puede ver en la Tabla II.3.

172
Posición Descripción Tamaño
relativa
0x00 Código de salto 3 bytes
0x03 OEM ID 8 bytes
0x0B Bytes por sector (512 bytes) 2 bytes
0x0D Sectores por cluster 1 byte
0x0E Sectores reservados 2 bytes
0x10 Números de copias de FAT 1 byte
0x11 Número máximo de entradas en el directorio raíz 2 bytes
0x13 Número de sectores en la partición 2 bytes
0x15 Descripción del medio 1 byte
0x16 Sectores por FAT 2 bytes
0x18 Sectores por pista 2 bytes
0x1A Número de cabezales 2 bytes
0x1C Número de sectores ocultos en la partición 4 bytes
0x20 Número de sectores en la partición 4 bytes
0x24 Número de la unidad lógica de la partición 2 bytes
0x26 Firma extendida (0x29) 1 byte
0x27 Número de serie de la partición 4 bytes
0x2B Nombre de volumen de la partición 11 bytes
0x36 Nombre de la FAT (FAT16) 8 bytes
0x3E Código ejecutable 448 bytes
0x1FE Marca fin de sector (0x55AA) 2 bytes
Tabla II.3 Estructura del sector de arranque de FAT16

Gracias a los datos que se pueden extraer del sector de arranque de la partición
podemos localizar las tablas de partición (FAT), el directorio raíz y el área de datos, así
como conocer diferentes parámetros importantes, como el tamaño del sector, los sectores
por cluster, número de sectores, etc. En la Tabla II.4 se describe como calcular la posición
de los diferentes elementos de la partición a partir de los datos extraídos del sector de
arranque.

Elemento Posición
Sector de arranque Inicio de la partición
Tablas FAT Inicio + Número de sectores reservados
Directorio raíz Inicio + Nº sectores reservados + (Nº sectores por FAT * Nº FATs)
Área de datos Posición directorio raiz + ((Max Nº de entradas en el dir. Raíz * 32) /
bytes por sector)
Tabla II.4 Cálculo de la posición de los elementos de una partición

Hay que recordar que todas estas posiciones hacen referencia a sectores, por tanto
hay que multiplicar por el número de bytes por sector para obtener la posición en bytes.

173
II.2.3 Tabla de asignación de archivos (FAT)

Los ficheros son alojados en disco divididos en pequeños fragmentos, cada uno
de estos fragmentos se almacenan en una unidad de asignación o cluster en el área de
datos. La tabla de asignación de archivos utiliza una estructura encadenada donde cada
cluster apunta al siguiente, y permite enlazar cada una de las partes de los archivos
almacenados. La FAT se compone de un conjunto de celdas compuestas por 16 bytes, de
forma que existe una correspondencia entre las celda de la FAT y los clusters del área de
datos.

Las dos primeras celdas de la FAT contiene información especial y no se utilizan,


por tanto se empieza utilizando la tercera celda. Cada celda contiene información sobre
cuál es el siguiente cluster del fichero, el valor de la celda puede ser:

● 0x0002-0xFFEF El valor señala el número del siguiente cluster del


fichero.
● 0x0000 Cluster libre
● 0x0001 Valor no usado
● 0xFFF0-0xFFF6 Reservados
● 0xFFF7 Cluster erróneo
● 0xFFF8-0xFFFF Último cluster del fichero

De esta forma se señala si un determinado cluster está en uso o no, y si lo está


cuál es el siguiente cluster del archivo o si se trata del último cluster. En la Imagen II.2
puede verse un ejemplo simple de FAT, donde se observan tres ficheros no fragmentados
de 3, 2 y 1 cluster. La información referente al nombre del archivo, primer cluster y otros
parámetros se encuentran en las secciones de directorio raíz o en el área de datos como
veremos posteriormente.

Imagen II.2 Ejemplo de tabla de asignación

El tamaño de cada cluster depende del tamaño del disco y se obtiene del sector de
arranque de la partición. En la Tabla II.5 se muestran los tamaños de cluster asociados al
tamaño de la partición.

174
Tamaño de la partición Sectores por cluster Tamaño del cluster
0 MB – 32 MB 1 512 bytes
33 MB – 64 MB 2 1 KB
65 MB – 128 MB 4 2 KB
129 MB – 255 MB 8 4 KB
256 MB – 511 MB 16 8 KB
512 MB – 1023 MB 32 16 KB
1024 MB – 2047 MB 64 32 KB
2048 MB – 4095 MB 128 64 KB
(solo compatible en algunos
sistemas)
Tabla II.5 Tamaños de cluster según tamaño de partición

II.2.4 Directorio raíz

Después de las tablas FAT se encuentra el directorio raíz, que contiene


información sobre los archivos y directorios que se encuentran en el directorio raíz del
sistema de archivos. Cada archivo o directorio se representa como una entrada de 32 bytes
en la cual se almacena la información necesaria para acceder a dicho archivo.
Dependiendo del valor del primer byte de la entrada se puede saber si se trata de una
entrada vacía (0x00), con un archivo borrado (0xE5) o una entrada en uso (cualquier otro
valor). En la Tabla II.6 se puede ver la estructura de cada una de las entradas del
directorio.

Posición Tamaño Descripción


0x00 8 bytes Nombre del archivo
0x08 3 bytes Extensión del archivo
0x0B 1 byte Atributos
0x0C 10 bytes Reservados
0x16 2 bytes Hora de la última modificación
0x18 2 bytes Fecha de la última modificación
0x1A 2 bytes Cluster inicial
0x1C 4 bytes Tamaño del archivo (0 si se trata de un directorio)
Tabla II.6 Estructura de entrada de directorio

El byte de atributos está compuesto por un conjunto de bits, cada uno representa
un atributo que puede tener o no el archivo. Los atributos son:

● Bits del 7-6: Reservados


● Bit 5: Archivo. Si este bit es 1 significa que ha sido modificado desde la
última copia de seguridad.
● Bit 4: Directorio. Es 1 si la entrada es de un directorio.
● Bit 3: Nombre de volumen. El nombre del archivo es el nombre del
volumen.

175
● Bit 2: Archivo del sistema.
● Bit 1: Oculto.
● Bit 0: Archivo de solo lectura.

La hora se codifica de la siguiente forma: los bits del 15-11 corresponden a la


hora, del 10-5 los minutos y del 4-0 los segundos (divididos entre 2). La fecha de codifica:
del 15-9 el año (comenzando desde 1980), del 8-5 el mes y del 4-0 el día.

En caso de que la entrada se trate de un directorio los datos almacenados en el


cluster dentro de el área de datos corresponden a una estructura equivalente a la descrita
en el directorio raíz.

II.2.5 Área de datos

A continuación del directorio raíz se encuentra el área de datos, que se compone


de un conjunto de clusters donde se guardan los fragmentos de los ficheros tal y como se
indica en la tabla de asignación de archivos. También se almacenan las estructuras de los
directorios en el caso de que se trate de un directorio en lugar de un archivo.

176
Bibliografía

[Aguayo04] Paul Aguayo, Introducción al Microcontrolador, Ingeniería LCI.

[AN232B02] AN232B02 Application Notes "FT232BM/FT245BM Power


Control and Pin States". Future Technology Devices
International

[AN232B03] AN232B-03 Application Notes "Optimising D2XX Data


Throughput". Future Technology Devices International

[AN232B04] AN232B-04 Application Notes "Data Throughput, Latency &


Handshaking". Future Technology Devices International

[AN232B06] AN232B-06 Application Notes "Debugging FT232BM and


FT245BM Based Designs". Future Technology Devices
International

[AN232B07] AN232B-07 Application Notes "Configuring FTDI's VCP Drivers


to use Location IDs". Future Technology Devices International

[AN232R04] AN232R-04 Application Notes "Windows Combined Driver


Model". Future Technology Devices International Ltd.

[Anderson01] Don Anderson, USB System Architectur (USB 2.0), 2001.


MindShare, Inc. ISBN: 0-201-46137-4

[AmontecLCD] Amontec. Nokia 3310 LCD.


http://www.amontec.com/lcd_nokia_3310.shtml

[Axelson05] Jan Axelson, USB Complete, Tercera edidion 2005


Lakeview Research LLC, ISBN 978-1-931448-03-1

[Buchmann] Isidor Buchmann, Batteries in a portable world, Segunda edición.


Codex Electronics Inc.

[BZX85C] Fairchild, Especificaciones del diodo zener BZX85C3V6, 2004

[DG245] DG245 Application Notes "FT245BM Designers Guide". Future


Technology Devices International

[DLPUSB245M] DLP Design. DLP-USB245M User Manual, 2002.

177
[Dobiash99] Jack Dobiash, FAT16 Structure Information, 1999
http://home.teleport.com/~brainy/fat16.htm

[FraunHist] Fraunhofer IIS, The MP3 History


http://www.iis.fraunhofer.de/EN/bf/amm/mp3history/mp3history01
.jsp

[FT245BM] FT245BM Datasheet 1.8, 2005. Future Technology Devices


International

[FTDID2XX] D2XX Programmer's Guide 3.4 (2006). Future Technology Devices


International

[Fujitsu00] Soporte Técnico OEM Fujitsu España, Un paseo por USB-1, 2000.

[Hacker00] Scot Hacker, MP3: The Definitive Guide, 2000.


Publisher: O'Relly, ISBN: 1-56592-661-7

[Harrison04] Pete Harrison, Micromouse Information Centre - Battery Chargers.


2004.
http://micromouse.cannock.ac.uk/batteries/charging.htm

[HITACHI03] Hitachi, Multimedia Card User's Manual, 2003

[Hung] Hung-Chih Lai; Advisor: Dr. Jwo-Shen Hu, Real-Time


Implementation of MPEG-1 Layer 3 Audio Decoder on a DSP
Chip. Institute of Electrical and Control Engineering, National
Chiao-Tung University, Taiwan.

[ID3ORG] Web oficial y especificaciones ID3


http://www.id3.org

[IEEE97] IEEE, MPEG Digital Audio Coding, september 1997.


IEEE Signal Process Magazine, pag. 59-81. September 1997.

[Lagerstöm01] Krister Lagerstöm, Design and Implementation of an MPEG-1


Layer III Audio Decoder, 2001. Master's Thesis, Computer Science
and Engineering Program.
Chalmers University of Technology, Gothenburg, Sweden.

[Linden02] David Linden and Thomas B. Reddy, Handbook of batteries,


Tercera edición 2002.
McGraw-Hill, ISBN 0-07-135978-8

[MAX1675] Maxim, Especificaciones del regulador de tensión MAX1675,


2000

178
[Microsoft99] Microsoft, FAT: General Overview of On-Disk Format, 1999

[MP3RefHist] MP3 History - www.mp3reference.com


http://www.mp3reference.com/history.htm

[MPManReview] MPManiac, Eiger Labs MPMan Review - Models F10 & F20,,
1999 http://business.fortunecity.com/tisch/493/MPManReview.htm

[Noll00] Peter Noll, MPEG Digital Audio Coding Standars, 2000.


CRC Press LLC. Technical University of Berlin

[Pan93] Davis Yen Pan, Digital Audio Compression, 1993.


Digital Technical Journal, Vol. 5 No. 2 Spring 1993

[Pan95] Davis Yen Pan, A Tutorial on MPEG/Audio Compression


IEEE Multimedia, Summer 1995, pag. 60-74

[PCD8544] Philips Semiconductors. PCD8544 48x84 pixels matrix LCD


controller/driver, 1999.

[PIC18FXX2] Microchip Technology, PIC18FXX2 Datasheet

[PJB100] PJB-100 Info Site


http://www.mpython.com/pjb/index.htm

[PLSREF] Especificaciones del formato PLS


http://developer.apple.com/documentation/QuickTime/QT6Whats
New/Chap1/chapter_1_section_58.html

[PODCASTREF] Especificaciones del formato Podcast


http://www.apple.com/itunes/store/podcaststechspecs.html

[Samsung] Samsung Semiconductors, NAND Flash


http://www.samsung.com/global/business/semiconductor/products/
flash/Products_NANDFlash.html

[Samsung04] Samsung, Multimedia Card Specification, 2004

[SanDisk03] SanDisk, Multimedia Card Product Manual, 2003

[TC115] Microchip, Especificaciones del regulador de tensión TC115, 2003

[VargasDuque01] Alexander Vargas y Alejandro Duque, Codificador MP3 en


Matlab, 2001. Universidad Pontificia Bolivariana de Medellín,
Colombia. http://members.fortunecity.com/alex1944/index.html

179
[VS1001K] VSLI Solution, VS1001K Datasheet 4.14, 2004

[VS10XXANOUT] VSLI Solution, VS10XX AppNote: Connecting analog outputs, Rev


1.22, 2006

[ZXM61P03F] Zetex, Especificaciones del MOSFET de canal P ZXM61P03, 1999

180

También podría gustarte