ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA UNIVERSIDAD

Anuncio
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
UNIVERSIDAD DE SEVILLA
Ingeniería de Telecomunicación
Proyecto fin de carrera
Desarrollo e implementación del firmware y la interfaz de usuario de un
lector RFID para la activación y lectura de un sensor inalámbrico de
señales biomédicas compatible con el protocolo EPC Class-1
Generation-2
Autor del proyecto:
Jesús Montalvo Fernández
Tutor del proyecto:
Dr. Óscar Guerra Vinuesa
Directores del proyecto:
Dr. Alberto Rodríguez Pérez
Dr. José Antonio Rodríguez Rodríguez
Departamento de Electrónica y Electromagnetismo
Sevilla, Septiembre 2014
Índice de contenido
Capítulo 1 - Introducción.......................................................................................................1
1.1. Introducción a los sistemas de identificación basados en radiofrecuencia...............1
1.2. Objetivos y alcance del proyecto................................................................................8
Capítulo 2 - Flujo de comunicación personalizado compatible con el estándar EPC C1
Gen2.....................................................................................................................................11
2.1. Introducción al protocolo EPC C1 Gen2...................................................................11
2.1.1. Comandos........................................................................................................11
2.1.2. Comunicación Lector a Tag..............................................................................11
2.1.3. Comunicación Tag a Lector..............................................................................14
2.2. Flujo de comunicación estándar...............................................................................15
2.2.1. Temporización del flujo de comunicación.........................................................16
2.2.1.1. T2...............................................................................................................17
2.2.1.2. Tiempo de respuesta al comando Write....................................................18
2.3. Particularidades para el tag sensor de señales biomédicas....................................18
2.3.1. Temporización..................................................................................................18
2.3.2. Comandos implementados...............................................................................18
2.3.2.1. Comandos obligatorios..............................................................................19
2.3.2.2. Comandos personalizados........................................................................21
2.3.2.2.1. Comando ClockCalibration.................................................................21
2.3.2.2.2. Comando SensorCalibration..............................................................21
Capítulo 3 - Plataforma de test...........................................................................................22
3.1. Arquitectura...............................................................................................................22
3.1.1. Circuito Integrado AS3992...............................................................................23
3.1.1.1. Registros de configuración usados............................................................24
3.1.1.1.1. IRQ and status....................................................................................24
3.1.1.1.2. FIFO status.........................................................................................24
3.1.2. Microcontrolador...............................................................................................25
3.1.3. PC.....................................................................................................................25
3.1.4. Tag....................................................................................................................25
3.2. Interconexión de componentes................................................................................25
Capítulo 4 - Firmware..........................................................................................................27
-I-
4.1. Introducción..............................................................................................................27
4.2. Capas de comunicación...........................................................................................27
4.3. Firmware proporcionado por el fabricante................................................................29
4.3.1. Modificación de la ISR......................................................................................29
4.3.2. Validación de la función as399xWaitForResponseTimed................................30
4.4. Firmware EPC Gen2 desarrollado............................................................................31
4.5. Protocolo personalizado de comunicación entre microcontrolador y PC.................31
4.5.1. Comandos implementados...............................................................................31
4.5.2. Flujo de los comandos.....................................................................................33
4.5.2.1. Comando GetConfiguration.......................................................................33
4.5.2.2. Comando SetConfiguration........................................................................34
4.5.2.3. Comando StoreRN16.................................................................................34
4.5.2.4. Comando SingleRead................................................................................35
4.5.2.5. Comando CompleteSense.........................................................................35
4.5.2.6. Comando TestClockCalibration..................................................................36
4.6. Firmware para comunicación USB...........................................................................37
4.7. Función main del firmware.......................................................................................38
Capítulo 5 - Interfaz de usuario...........................................................................................40
5.1. Introducción..............................................................................................................40
5.2. Desarrollo de la GUI.................................................................................................40
5.2.1. Configuración del AS3992................................................................................41
5.2.2. Test...................................................................................................................42
5.2.3. Operación.........................................................................................................43
Capítulo 6 - Esquema demodulador...................................................................................44
6.1. Motivación.................................................................................................................44
6.2. Teoría básica de modulación y demodulación.........................................................44
6.2.1. Modulación.......................................................................................................44
6.2.2. ASK...................................................................................................................45
6.2.3. Demodulación...................................................................................................48
6.3. Esquema...................................................................................................................49
Capítulo 7 - Programas y periféricos utilizados..................................................................58
7.1. Introducción..............................................................................................................58
7.2. Silicon Labs IDE.......................................................................................................58
7.3. Keil 8051 Tools..........................................................................................................58
- II -
7.4. USBXpress...............................................................................................................59
7.5. Visual Basic 2010 Express Edition...........................................................................60
7.6. Osciloscopio..............................................................................................................60
Conclusiones y trabajo futuro.............................................................................................61
1. Conclusiones..............................................................................................................61
2. Trabajo futuro..............................................................................................................62
- Bibliografía........................................................................................................................63
- Anexos..............................................................................................................................66
1. Código fuente de la interfaz de usuario......................................................................66
1.1. USBXpress.vb.....................................................................................................66
1.2. Form1.vb.............................................................................................................67
- III -
Introducción
Capítulo 1 Introducción
1.1. Introducción a
radiofrecuencia
los
sistemas
de
identificación
basados
en
Los procedimientos de identificación automática (Auto-ID) son muy populares en
muchas actividades relacionadas con campos tales como servicios, logística de compras
y distribución, industria o sistemas de flujo de materiales [1]. Estos procedimientos de
identificación automática sirven para proporcionar información acerca de personas,
animales y productos.
Las omnipresentes etiquetas de códigos de barra resultan actualmente inadecuadas
en cada vez más casos. En particular, sus principales limitaciones son su nula capacidad
de almacenamiento y la dificultad de leer identificadores debido a la proximidad y posición
en la que se deben poner los lectores.
Una solución es almacenar los datos en un chip de silicio. La forma más común de
aplicar esta solución es el uso de las tarjetas inteligentes (smart card). Esta tarjeta se
introduce en un lector, en el que se produce una conexión galvánica con las superficies de
contacto de la tarjeta. Sin embargo, este contacto mecánico es a menudo poco práctico,
lo que hace deseable una transferencia de información sin contacto entre el dispositivo
que contiene los datos y el lector, en aras de una mayor flexibilidad. Este tipo de sistemas
de identificación sin contacto se denominan sistemas RFID (Radio Frequency
IDentification, identificación por radiofrecuencia) [1].
En la Tabla 1.1 se comparan diversas tecnologías que se usan en los sistemas de
identificación automática, mostrando sus ventajas y desventajas.
RFID es un sistema de identificación por radiofrecuencia que está compuesto de 2
elementos:
•
El transpondedor o tag, que se sitúa en el objeto que se quiere identificar (a partir
de ahora se le denominará tag).
Departamento de Electrónica y Electromagnetismo
Página 1
Introducción
•
El interrogador o lector, que dependiendo del diseño y la tecnología usada será un
dispositivo de lectura o de lectura/escritura (a partir de ahora se le denominará
lector, independientemente de si solo lee datos o si también tiene la capacidad de
escribirlos).
En la Figura 1.1 se muestra el esquema de un sistema RFID.
Figura 1.1: El lector y el transpondedor son los componentes principales de un sistema RFID
El lector típicamente contiene un módulo de radiofrecuencia (transmisor y receptor),
una unidad de control y un elemento de acoplamiento (bobina, antena) para comunicarse
con el tag, y opcionalmente para alimentarlo. Adicionalmente, muchos lectores también
disponen de una interfaz adicional (RS 232, USB, etc.) que les permita reenviar los datos
recibidos a otro sistema (PC, sistema de control robótico, etc.).
El tag, que es el dispositivo que almacena los datos de identificación en un sistema
RFID, normalmente consiste en un elemento de acoplamiento y un microchip.
Un lector recibe información de un tag transmitiendo una señal de radiofrecuencia al
tag. El tag responde o bien modulando el coeficiente de reflexión de su antena, enviando
así de vuelta una señal de información al lector (a este procedimiento de enviar
información al lector modificando el coeficiente de reflexión de la antena se le denomina
backscattering [12], y se muestra en la Figura 1.2); o bien usando su propio sistema de
transmisión, dependiendo del tipo de tag empleado, como se comentará más adelante. El
tipo de comunicación entre lector y tag es maestro-esclavo, también denominado ITF
(Interrogator-Talks-First) en el ámbito de RFID. Es decir, un tag solo responde cuando ha
sido interrogado por un lector.
Departamento de Electrónica y Electromagnetismo
Página 2
Parámetros
Cantidad
(bytes)
de
Código de
barras
datos 1-100
OCR
Reconocimiento de
voz
Biometría
Smart card
Sistemas RFID
1-100
-
-
16-64k
16-64k
Baja
Alta
Alta
Muy alta
Muy alta
Capacidad de lectura Buena
automática
Buena
Costosa
Costosa
Buena
Buena
Capacidad de lectura Limitada
por personas
Simple
Simple
Difícil
Imposible
Imposible
Influencia
de Muy alta
suciedad / humedad
Muy alta
-
-
Posible
(contactos)
Ninguna
Influencia de cobertura Total
óptica (visión directa)
Total
-
Posible
-
Ninguna
Influencia de dirección Baja
y posición
Baja
-
-
Unidireccional
Ninguna
Degradación
desgaste
Limitado
-
-
Contactos
Ninguno
Coste (electrónica de Muy bajo
lectura)
Medio
Muy alto
Muy alto
Bajo
Medio
Costes de operación Bajo
(ej: impresión)
Bajo
Ninguno
Ninguno
Medio
(contactos)
Ninguno
Copia/modificación no Ligero
autorizada
Ligero
Posible
audio)
Imposible
Imposible
Velocidad de lectura
Baja ~3s
Muy baja >5s
Muy baja >5-10s
Baja ~4s
Muy baja ~0,5s
<1cm
(escáner)
0-50 cm
Contacto directo
dactilares)
Densidad de los datos
Baja
/ Limitado
Baja ~4s
Máxima distancia entre 0-50 cm
lector y tag
(cinta
de Imposible
(huellas Contacto directo 0-5m,
microondas
Tabla 1.1: Comparación de diferentes sistemas de identificación automática [1]
Introducción
La modulación más empleada en la comunicación es un esquema ASK (Amplitude
Shift Keying, modulación por desplazamiento de amplitud), ya que facilita la demodulación
de los datos [4].
Los distintos tipos de sistemas RFID se distinguen principalmente por la frecuencia
de las ondas de radiofrecuencia que se emplean, por la forma en que se proporciona
alimentación eléctrica a los tags, y por el protocolo que usan para comunicarse el lector y
el tag [2].
Figura 1.2: Esquema de comunicación con tag pasivo [13]
La mayor parte de la actividad de los sistemas RFID se concentra en ciertas bandas
de frecuencia establecidas por las distintas autoridades reguladoras. Las más habituales
son las de 125/134 kHz (en la zona del espectro denominada LF, Low Frequency, baja
frecuencia), 13,56 MHz (en la zona HF, High Frequency, alta frecuencia), 860-960 MHz y
2,4-2,45 GHz (en la zona UHF, Ultra High Frequency, frecuencia ultra alta) [2].
En los sistemas LF y HF la longitud de onda de la radiación electromagnética es
mucho mayor que el tamaño de la antena. En estas condiciones, casi toda la energía
emitida por la antena del lector está contenida en una región cercana a la antena y
comparable a esta en tamaño. A medida que el tag se aleja de la antena del lector, la
potencia que alcanza al tag decae rápidamente. En este caso, se dice que el lector y el
tag están acoplados inductivamente: el tag actúa como un transformador magnético,
proporcionando acoplamiento entre la corriente que fluye por el lector y la tensión en el
tag. Estos sistemas también se denominan near-field (campo cercano).
En los sistemas UHF la longitud de onda es comparable en tamaño a la antena. En
este caso se dice que existe acoplamiento radiativo entre lector y tag: el lector envía una
Departamento de Electrónica y Electromagnetismo
Página 4
Introducción
señal al tag y este responde enviando de vuelta una onda distinta. La potencia decae más
lentamente con la distancia que en el caso inductivo. Estos sistemas también se
denominan far-field (campo lejano).
Se pueden resumir las consecuencias de la elección de una u otra frecuencia de
trabajo de la siguiente manera:
•
El rango de alcance de los lectores LF y HF es comparable al tamaño de la antena;
en los sistemas UHF el rango viene dado por la potencia de transmisión.
•
Las zonas de lectura en los sistemas acoplados inductivamente (LF y HF) es
pequeña pero simple; las zonas de lectura en los sistemas acoplados
radiativamente son mayores pero más complejas y a menudo discontinuas, y
lectores cercanos pueden interferir entre ellos.
•
Los tags LF usan bobinas con muchas vueltas como antena. Los tags HF necesitan
menos vueltas. Los tags UHF usan antenas simple de tipo dipolo.
•
La radiación LF penetra en el agua y materiales acuosos una distancia mucho
mayor que el rango de lectura de un sistema típico. La radiación HF penetra una
distancia comparable al rango de lectura, y en lo sistemas UHF la penetración en el
agua es despreciable.
•
La radiación LF puede penetrar capas finas de material conductivo. Las radiaciones
HF y UHF son apantalladas incluso por láminas finas de material metálico.
•
Los tags LF proporcionan una tasa binaria inferior a los tags HF. Los tags UHF
pueden operar a velocidades más altas aún.
Las diferentes características asociadas con cada banda de frecuencia hace que las
aplicaciones óptimas varíen de una banda a otra.
Los sistemas RFID LF son particularmente apropiados para identificación de
animales y humanos. Los lectores y tags no se ven afectados por la presencia de agua,
sal o similar. Por tanto, los tags pueden colocarse en la oreja de un animal, ser insertados
en el estómago o implantarse debajo de la piel. Estos sistemas también son populares
para el control de acceso a edificios o instalaciones. Un rango de lectura pequeño (un
metro o menos) es aceptable. La baja tasa de datos no es problemática, ya que no existe
la necesidad de identificar rápidamente un número elevado de tags.
Departamento de Electrónica y Electromagnetismo
Página 5
Introducción
Los tags HF se usan ampliamente en tarjetas inteligentes sin contacto, para
transacciones financieras seguras. Las operaciones criptográficas requieren una energía
considerable, que se consigue a costa de reducir el rango de lectura. Esta reducción del
alcance también ayuda a evitar interceptaciones y uso involuntario de los tags presentes
en las tarjetas. La mayor tasa de datos permite un intercambio de información
relativamente complejo, necesario en sofisticadas transacciones financieras. Los tags HF
también se pueden usar, al igual que los LF, en el control de acceso a edificios. Asimismo,
se usan cada vez más en pasaportes con funcionalidad RFID. También se emplean en el
seguimiento de activos y gestión de suministros: la disponibilidad de alta energía (a corto
alcance) permite que los tags HF soporten amplios espacios de memoria, lo que se puede
usar para grabar una importante cantidad de información en los tags sobre el terreno.
Los tags UHF se benefician del amplio rango de lectura de estos sistemas.
Asimismo, la simplicidad de la antena de estos tags reduce su coste. Se usan
ampliamente en peajes automáticos para automóviles y seguimiento de vagones, casos
en los que el alcance de varios metros añade flexibilidad a la instalación. Se usan cada
vez más en la gestión de cadenas de suministro, seguimiento del transporte de equipaje y
seguimiento de activos, campos en los que el bajo coste es importante, y en los que el
largo alcance también añade flexibilidad. Un tag UHF equipado con una pila puede
alcanzar rangos de decenas o centenas de metros, y se puede usar para el seguimiento
de contenedores de transporte y para localizar activos concretos en grandes
instalaciones.
Según la forma en que se proporciona alimentación eléctrica a los tags, estos se
clasifican en pasivos, activos y semi-pasivos [2][4]:
•
Tag activo: Se abastece de energía mediante una batería interna de larga
duración, y dispone de un transmisor propio. De esta forma se consiguen las
mayores coberturas, pero como contrapartida aumentará el coste del tag.
•
Tag pasivo: No necesita ninguna batería para operar, ya que aprovechará la
energía electromagnética emitida por el lector y la acondicionará mediante una
transformación de tensión alterna a continua para poder generar las tensiones de
alimentación en el tag. No dispone de transmisor propio, por lo que para enviar
información de vuelta al lector usará backscattering.
•
Tag semi-pasivo: Es una solución híbrida entre uno pasivo y uno activo, ya que
con la potencia que obtiene de la señal RF procedente del lector alimentará gran
parte de la circuitería del tag, pero los bloques más demandantes de corriente
Departamento de Electrónica y Electromagnetismo
Página 6
Introducción
serán alimentados por una batería. Al igual que el pasivo, no dispone de transmisor
propio y usará backscattering para enviar información al lector.
En cuanto a los protocolos RFID que siguen para comunicarse los lectores y tags, en
la Tabla 1.2 se muestran algunos de ellos, clasificados en función de la frecuencia de
trabajo y del tipo de tag que contemplan. Los diversos protocolos especifican distintos
requerimientos físicos y lógicos para la comunicación, como los símbolos y la codificación
empleada, la modulación que se utiliza y el procedimiento de resolución de colisiones (por
ejemplo, en el caso de que haya múltiples tags en la zona de acción de un lector).
Por ejemplo, los protocolos ISO 11784 [14] y 11785 [15], y su versión actualizada
ISO 14223 [16], están diseñados para la identificación de ganado. ISO 14443 [18] soporta
tarjetas inteligentes en la frecuencia de 13,56 MHz. ISO 15693 [19] también soporta
tarjetas inteligentes a 13 MHz, pero usa esquemas distintos para las comunicaciones
entre lectores y tags y para la resolución de colisiones. El protocolo Title 21 [20] fue
diseñado para los sistemas de peaje para automóviles de California.
El organismo de estandarización de sistemas RFID EPCGlobal también ha
desarrollado diversos estándares describiendo protocolos de comunicación entre lectores
y tags. Los primeros que lanzó fueron dos protocolos en la banda UHF para tags de Clase
0 (solo lectura y con memoria programada en el momento de la fabricación) y Clase 1
(solo lectura y con memoria no volátil programable una sola vez), con el objetivo de que
se empezara a comercializar la tecnología EPC [21], consistente en un sistema de
numeración universal para la identificación de productos. Posteriormente EPCGlobal
lanzó la segunda generación de sus protocolos, HF EPC Class-1 Generation-2 (HF EPC
C1 Gen2) y UHF EPC Class-1 Generation-2 (UHF EPC C1 Gen2), que permitieron
compatibilidad con la serie ISO 18000 (el protocolo UHF EPC C1 Gen2 ha sido aprobado
por ISO como el estándar ISO 18000-6C). Además, esta generación permitió la escritura y
lectura de los tags de Clase 1, y se añadieron opciones de seguridad como la
autentificación de usuarios y bloqueo de determinadas zonas de memoria, y un arbitraje
eficiente para poblaciones de tags.
La tecnología EPC es la dominante en la actualidad [4].
A partir de los comandos enviados por el lector, el tag seleccionado proporciona la
información solicitada. En los llamados tags de sensado (sensory tags) esta información
puede consistir no solo en datos de identificación, sino también en lecturas de variables
del entorno (por ejemplo, temperatura, presión, variables ópticas o químicas,...) obtenidas
a partir de una interfaz de sensado embebida [3]. En este trabajo nos interesa la
Departamento de Electrónica y Electromagnetismo
Página 7
Introducción
posibilidad que ofrecen estos tags de sensado de ser usados en aplicaciones biomédicas,
en las que el tag estaría adherido a un paciente, y mediante su etapa de sensado podría
obtener los valores de variables de interés relacionadas con la salud, bajo la dirección del
lector. Los datos medidos por el tag y recibidos por el lector podrían ser transmitidos a
otro sistema para su procesamiento.
Tipo de tag
Pasivo
Frecuencia
125/134 kHz 5-7 MHz
13,56 MHz
ISO
ISO10536
11784/5,
iPico DF/iPX
14223
ISO18000-2
HiTag
MIFARE
ISO14443
Tag-IT
ISO15693
ISO18000-3
TIRIS
Icode
303/433
MHz
2,45 GHz
ISO18000- ISO18000-4
6A,B,C
Intellitag
EPC class 0 µ-chip
EPC class 1
Intellitag
Title 21
AAR S918
Ucode
Semi-pasivo
Activo
860-960
MHz
AAR S918
Title 21
EZPass
Intelleflex
Maxim
ANSI 371.2
ISO18000-7
RFCode
ISO18000-4
Alien BAP
ISO18000-4
ANSI 371.1
Tabla 1.2: Resumen de los protocolos más empleados en la actualidad, ordenados en función del
tipo de tag y su frecuencia de trabajo [2]
1.2. Objetivos y alcance del proyecto
En este caso en particular estamos interesados en programar un lector que tiene
como objetivo comunicarse con un tag pasivo diseñado para la medida de temperatura y
pulso cardiaco en un paciente.
Este tag sensor de señales biomédicas ha sido diseñado para ser compatible (con
algunas especificidades, como se comentará más adelante) con el protocolo UHF EPC
Class-1 Generation-2 (en adelante EPC Class 1 Gen 2 o simplemente EPC Gen2), que es
un protocolo específico para sistemas RFID, operando en el rango de frecuencias de 860
a 960 MHz, y que define unos requerimientos físicos y lógicos para lectores y tags. Este
protocolo solo contempla tags pasivos.
El tag fue diseñado con la idea de ser adherido a un paciente, y poder ser
interrogado por un lector presente en la misma habitación, por lo que el rango típico de la
Departamento de Electrónica y Electromagnetismo
Página 8
Introducción
comunicación podría estar entre 1 y 3 metros. Para conseguir esta cobertura se eligió
como banda de operación la de UHF. Asimismo, para aumentar el confort del paciente y
disminuir el precio del tag, se optó por diseñar un tag pasivo. De entre los protocolos
disponibles para la banda UHF y que contemplen tags pasivos, dado que también se
pretendía hacer el sistema compatible con el protocolo más utilizado para la banda
elegida, y que el tag tuviera cierta proyección en el ámbito de la industria, se eligió el
protocolo UHF EPC C1 Gen2 [4].
El tag fue diseñado en paralelo a este trabajo, por lo que aún no estaba disponible
cuando se programó el lector. Se han usado tags pasivos con capacidad básica de lectura
y escritura con fines de depuración.
Como se verá más adelante, el tag requiere una temporización ligeramente distinta a
la que especifica el protocolo EPC Gen2, y la implementación de algunos comandos y
operaciones específicos en el lector, tanto para la calibración y test del tag como para
obtener medidas biomédicas una vez que se esté usando. Se necesita poder controlar y
ordenar estas operaciones desde una interfaz de usuario en un PC, que estará conectado
al lector.
Por tanto, se hace necesario usar un lector que permita un alto grado de
personalización. La mayoría de los lectores comerciales [5][6][7][8] implementan funciones
simples de lectura y escritura de tags, y resulta complicado personalizar los tiempos de
respuesta del lector e incluso la forma en que se accede a los tags.
Para este trabajo se ha partido del kit de demostración “ROGER” [9] - UHF RFID
Reader System del fabricante austriamicrosystems, que consiste en una placa de circuito
impreso que incluye, en la versión usada, el chip lector RFID AS3992 [10], de la misma
compañía, que ofrece gran flexibilidad para su programación y soporta el protocolo EPC
Gen2. Asimismo, como se verá más adelante, se ha comprobado que este lector permite
comunicarse con el tag cumpliendo la temporización requerida por este.
La placa también dispone de un microcontrolador, que se encarga de manejar el chip
lector de acuerdo con las instrucciones de su programa. Al programa que ejecuta el
microcontrolador se le denomina en adelante firmware.
Asimismo, el microcontrolador dispone de una interfaz USB, por lo que es posible
conectar un PC por USB a la placa para interactuar con el microcontrolador para que el
lector lleve a cabo con el tag las operaciones que se le indiquen.
El fabricante del lector usado proporciona el código de algunas funciones básicas,
Departamento de Electrónica y Electromagnetismo
Página 9
Introducción
que se han usado como base para desarrollar las funciones, comandos y operaciones que
requiere el tag sensor de señales biomédicas.
Por tanto, este trabajo consiste en la programación del lector mencionado y la
elaboración de una interfaz de usuario en el PC para operar el lector.
Departamento de Electrónica y Electromagnetismo
Página 10
Flujo de comunicación personalizado compatible con el estándar EPC C1 Gen2
Capítulo 2 Flujo de comunicación
personalizado compatible con el estándar
EPC C1 Gen2
2.1. Introducción al protocolo EPC C1 Gen2
2.1.1. Comandos
Según el protocolo EPC Class-1 Generation-2 UHF RFID [11] (para comunicaciones
en el rango 860 MHz – 960 MHz) la comunicación entre el lector y el tag (o los tags) se
realiza mediante un flujo de comandos, que se relacionan en la Tabla 2.1. En este
protocolo la comunicación RFID se divide en 3 fases llamadas Selección, Inventario y
Acceso. Por tanto, los comandos existentes corresponderán a alguna de estas 3 fases de
la comunicación. En primer lugar se usa un comando de la categoría de Selección, para
elegir de entre la población de tags presentes dentro del rango del lector aquél o aquellos
con los que se quiera establecer la comunicación. A continuación se utilizan comandos de
la categoría de Inventario para realizar el procedimiento mediante el cual el lector
identifica a los tags: el lector envía un comando, al que en general responderá un solo tag
(se usa un algoritmo de arbitraje para intentar evitar que varios tags respondan a la vez; si
a pesar de ello varios tags responden simultáneamente el lector puede o bien intentar
resolver la colisión o bien enviar otro comando de Inventario para intentar que responda
un solo tag). El lector detecta la respuesta del tag y solicita su código de identificación
(llamado EPC, Electronic Product Code, en el protocolo EPC Class-1 Generation-2). Por
último, se realiza el acceso (lectura o escritura) al tag identificado anteriormente, mediante
el uso de comandos de la categoría Acceso.
2.1.2. Comunicación Lector a Tag
Un lector se comunica con un tag modulando una portadora de radiofrecuencia
usando una modulación digital en amplitud.
La codificación de los datos que se usa es PIE (Pulse-Interval Encoding). En la
Departamento de Electrónica y Electromagnetismo
Página 11
Flujo de comunicación personalizado compatible con el estándar EPC C1 Gen2
Figura 2.1 se muestran los símbolos binarios usando la codificación PIE.
Figura 2.1: Símbolos PIE
Tari es el intervalo temporal de referencia para las comunicaciones de lector a tag, y
coincide con la duración de un 0 binario. El valor de Tari debe estar comprendido entre
6,25 y 25 µs.
El protocolo especifica los rangos de valores que deben cumplir los tiempos de
subida y bajada de las señales y PW (Pulse Width).
Todos los comandos que el lector envíe al tag estarán precedidos o bien de una
trama denominada preámbulo o bien de una señal denominada frame-sync.
El preámbulo antecede al primer comando que se envía en la fase de Inventario (es
decir, al comando Query). Su estructura se muestra en la Figura 2.2.
Figura 2.2: Preámbulo (Lector a Tag)
Departamento de Electrónica y Electromagnetismo
Página 12
Flujo de comunicación personalizado compatible con el estándar EPC C1 Gen2
Categoría
Selección
Comando
Descripción
Select
Permite seleccionar de entre la población de tags presentes
aquéllos con los que se quiere establecer la comunicación.
Query
Inicia el procedimiento de identificación de los tags. Especifica
parámetros de la comunicación tag a lector, elige qué tags pueden
responder con su identificación y especifica la probabilidad de que
los tags respondan. Tiene como parámetros:
• DR: determina, junto con la longitud del símbolo TRcal, como se
verá más adelante, la frecuencia de la comunicación tag a lector.
• M: determina el tipo de codificación en la comunicación tag a
lector, eligiendo entre FM-0 y varias posibilidades de SubPortadora Miller.
• TRext: determina el tipo de preámbulo que se enviará en el
enlace tag a lector.
• Sel, Session y Target: definen cómo será realizada la fase de
Inventario de los tags.
• Q: determina el valor máximo de la población de tags, de forma
que el máximo número de etiquetas que podrá arbitrar el algoritmo
de anti-colisión presente en el estándar será 2 Q.
QueryAdjust
Se usa para modificar el parámetro Q (es decir, para variar la
población máxima de tags). Solo es útil cuando se trabaja con más
de un tag.
QueryRep
Se usa repetidas veces hasta que responda un tag. Solo es útil
cuando se trabaja con más de un tag.
ACK
Se usa para singularizar un tag concreto, con el que a continuación
se realizarán las operaciones de Acceso.
NAK
Se usa para devolver los tags al estado en el que esperan un
Query.
Req_RN
Se usa para solicitar al tag el envío de un nuevo número aleatorio
de 16 bits (RN16).
Read
Se utiliza para leer una parte específica de la memoria del tag.
Write
Se usa para escribir una palabra de 16 bits en la memoria del tag.
Kill
Se utiliza para inhabilitar un tag permanentemente. Esta operación
es irreversible.
Lock
Permite restringir las operaciones de lectura/escritura en
determinada región de la memoria del tag. Esta operación es
reversible.
Access
Se usa para poner al tag en el estado en que el que se permite la
ejecución de los comandos Lock y BlockPermalock.
BlockWrite
Permite escribir múltiples palabras en la memoria de un tag con un
solo comando.
BlockErase
Permite borrar múltiples palabras de la memoria de un tag con un
solo comando.
BlockPermalock
Permite bloquear permanentemente la escritura en parte de la
memoria del tag.
Inventario
Acceso
Tabla 2.1: Comandos EPC Gen2
Departamento de Electrónica y Electromagnetismo
Página 13
Flujo de comunicación personalizado compatible con el estándar EPC C1 Gen2
El preámbulo incluye un símbolo de calibración de lector a tag, denominado RTcal
(Reader to Tag calibration), y un símbolo de calibración de tag a lector, denominado TRcal
(Tag to Reader calibration).
•
RTcal: La mitad de RTcal se denomina pivot, y se utilizará por el tag para
decodificar los símbolos como ceros o unos. Si un símbolo tiene una duración
mayor al pivot, se corresponderá con un uno lógico, y si es menor, con un cero
lógico.
•
TRcal: Este símbolo especifica, junto con el parámetro DR (Divide Ratio) del
comando Query, la frecuencia de la comunicación en el sentido tag a lector
(denominada BLF, Backscatter Link Frequency). La relación entre estos parámetros
se especifica en la ecuación (1).
BLF =
DR
TRcal
(1)
La frecuencia BLF coincide con el régimen binario de la comunicación tag a lector o
bien es 2, 4 u 8 veces el régimen binario, dependiendo de la codificación utilizada.
La trama frame-sync antecede al resto de comandos. Su estructura se muestra en la
Figura 2.3.
Figura 2.3: Frame-Sync
2.1.3. Comunicación Tag a Lector
Un tag se comunica con un lector alternando el coeficiente de reflexión de su antena
entre dos estados, de acuerdo con el dato que se esté enviando (a esta comunicación
variando el coeficiente de reflexión se le denomina backscattering).
Departamento de Electrónica y Electromagnetismo
Página 14
Flujo de comunicación personalizado compatible con el estándar EPC C1 Gen2
El tag elige el formato de la modulación. El lector especifica la codificación y el
régimen binario usando el comando Query.
La modulación que se utiliza en la comunicación de tag a lector es en amplitud (ASK)
o en fase (PSK, Phase Shift Keying, modulación por desplazamiento de fase).
La codificación es o bien FM0 (bi-phase space) en banda base o bien una
codificación Miller en la que la señal en banda base se multiplica por una subportadora
que consiste en una señal cuadrada con una frecuencia que es 2, 4 u 8 veces el régimen
binario (esta frecuencia sería BLF).
BLF puede variar entre entre 40 y 640 kHz.
2.2. Flujo de comunicación estándar
El flujo completo de una comunicación típica entre un lector y un tag podría ser el
mostrado en la Figura 2.4.
En primer lugar se transmite el comando Select (el único comando de la categoría de
Selección).
A continuación se usa el comando Query, el primero de la categoría de Inventario,
que especifica algunos parámetros de la comunicación en ambos sentidos entre lector y
tag. Al comando Query pueden responder uno o más tags. La respuesta de los tags
consiste en un número aleatorio de 16 bits, al que se denomina RN16 (Random Number
16 bits, número aleatorio de 16 bits). El lector detecta la respuesta de uno de los tags (si
hay más de una respuesta el lector puede usar un procedimiento de resolución de
colisiones). A continuación se envía el comando ACK (ACKnowledge, confirmar), usando
como parámetro el RN16 con el que respondió el tag. De esta forma se singulariza un
único tag (caso de que hubiera más de uno presente). El tag responde al ACK con su
identificación: PC (Protocol-Control, que incluye la longitud del EPC), EPC (Electronic
Product Code, que es la identificación del objeto al que irá unido el tag) y un CRC de 16
bits calculado por el tag y almacenado en su memoria denominado StoredCRC16.
En la fase de Acceso se usa en primer lugar el comando Req_RN (Request Random
Number, solicitar número aleatorio), ante el cual el tag responde con un nuevo número
aleatorio de 16 bits, llamado handle, y que se usa como parámetro en los otros comandos
de acceso. A continuación se ha usado el comando Write, para escribir datos en la
memoria del tag, y por último el comando Read para leer datos de la memoria del tag.
Departamento de Electrónica y Electromagnetismo
Página 15
Flujo de comunicación personalizado compatible con el estándar EPC C1 Gen2
Figura 2.4: Ejemplo de flujo de
comunicación entre lector y tag
2.2.1. Temporización del flujo de comunicación
El protocolo EPC Gen2 establece unos requisitos temporales para la transmisión y
recepción de comandos entre lector y tag, como se muestra en la Figura 2.5.
La descripción y los valores de los parámetros que establecen la temporización de la
comunicación se expresan en la Tabla 2.2.
Tpri es el periodo de la comunicación en el sentido tag a lector. Se define como 1/BLF.
FT es la tolerancia en frecuencia, también establecida por el protocolo.
Departamento de Electrónica y Electromagnetismo
Página 16
Flujo de comunicación personalizado compatible con el estándar EPC C1 Gen2
Figura 2.5: Temporización de la comunicación entre lector y tag
Parámetro
Mínimo
Nominal
Máximo
Descripción
T1
Tiempo
desde
la
MAX(RTcal,10Tpri) x MAX(RTcal, MAX(RTcal,10Tpri) x
transmisión del lector hasta
(1-|FT|)-2µs
10Tpri)
(1+|FT|)+2µs
la respuesta del tag.
T2
3.0Tpri
Tiempo de respuesta del
lector requerido si el tag
tiene que demodular la
señal del lector.
T3
0.0Tpri
Tiempo que el lector
espera, tras T1, antes de
transmitir otro comando.
T4
2.0 RTcal
Tiempo mínimo entre dos
comandos del lector.
20.0Tpri
Tabla 2.2: Parámetros de temporización de la comunicación entre lector y tag
2.2.1.1.
T2
Dado que en este trabajo se programa un lector, el parámetro más crítico es T2, que
especifica el tiempo en que tiene que enviar el siguiente comando el lector tras recibir la
respuesta del tag. En el desarrollo del trabajo, como se verá en el Capítulo 4, se prestará
una especial atención al cumplimiento de la temporización establecida por este
Departamento de Electrónica y Electromagnetismo
Página 17
Flujo de comunicación personalizado compatible con el estándar EPC C1 Gen2
parámetro.
2.2.1.2.
Tiempo de respuesta al comando Write
Asimismo el protocolo, cuando describe los distintos comandos, indica que si el
lector, tras enviar el comando Write, no obtiene una respuesta por parte del tag en 20ms,
el comando Write no se ha completado satisfactoriamente.
2.3. Particularidades para el tag sensor de señales biomédicas
2.3.1. Temporización
En el caso que se está tratando (comunicación entre el lector y el tag para la lectura
de señales biomédicas), el flujo de comandos que se propone es igual al comentado
anteriormente: se selecciona e identifica el tag, se escribe en la memoria del tag unos
datos predeterminados (en función de si queremos que el tag realice el sensado de
temperatura, ECG o ambos) y a continuación se lee la memoria del tag, donde se habrá
almacenado la lectura de las señales biomédicas elegidas.
Sin embargo, el comportamiento del tag en el caso en que estamos interesados
consiste en medir la señal biomédica cuando recibe el comando Write, y una vez que la
ha obtenido, responder con el handle, como se observa en la Figura 2.6.
El tiempo estimado para que el tag obtenga la medida de la señal biomédica (que es
de varios segundos, hasta un máximo de 10s [4]) excede con mucho del que el protocolo
especifica para la respuesta del tag al comando Write (20ms), por lo que a la hora de
programar el dispositivo habrá que tener en cuenta esta temporización, y considerar
satisfactoria la respuesta del tag aunque se produzca pasados los 20ms.
2.3.2. Comandos implementados
A continuación se describen los comandos EPC Gen2 implementados en este
trabajo.
Departamento de Electrónica y Electromagnetismo
Página 18
Flujo de comunicación personalizado compatible con el estándar EPC C1 Gen2
Figura 2.6: Flujo de comunicación propuesto
para la medición de señales biomédicas
2.3.2.1.
Comandos obligatorios
Los lectores y tags que cumplan el protocolo EPC Gen2 deben implementar una
serie de comandos, denominados comandos obligatorios.
Para la aplicación que se está tratando, se han implementado en el lector solo
aquellos comandos obligatorios que son necesarios para la comunicación con el tag
sensor de señales biomédicas, como se muestra en la Tabla 2.3.
Departamento de Electrónica y Electromagnetismo
Página 19
Flujo de comunicación personalizado compatible con el estándar EPC C1 Gen2
Categoría
Comando
Implementado
Selección
Select
SÍ
Query
SÍ
QueryAdjust
NO
QueryRep
NO
ACK
SÍ
NAK
Proporcionado por el fabricante
Req_RN
Proporcionado por el fabricante
Read
SÍ
Write
SÍ
Kill
NO
Lock
SÍ
Inventario
Acceso
Tabla 2.3: Comandos obligatorios implementados
Los comandos QueryAdjust y QueryRep se usan para gestionar las respuestas de
los tags cuando hay más de uno. En este caso solo se ha contemplado la comunicación
con un único tag, por lo que no se han implementado estos comandos.
El comando NAK (Negative AcKnowledgment) se puede usar en cualquier momento
para terminar las comunicaciones con el tag. El tag vuelve al estado en el que permanece
a la espera de recibir un comando Query, denominado estado arbitrate. El protocolo EPC
Gen2 recomienda que antes de quitar la alimentación los lectores finalicen la
comunicación con el tag, dejándolo en este estado. El comando NAK está soportado
nativamente por el lector AS3992, y no requiere ningún parámetro, por lo que se ha usado
la versión proporcionada por el fabricante.
El comando Req_RN está soportado nativamente por el lector AS3992. Siempre usa
como parámetro el último RN16 recibido, que el lector AS3992 almacena
automáticamente. Por lo tanto se ha usado la versión proporcionada por el fabricante.
El comando Lock se puede usar para permitir o impedir la escritura en la memoria
del tag. El comando Lock no se usa en las operaciones desarrolladas en este trabajo para
el tag pero se ha implementado por si se considera oportuno su uso futuro.
El comando Kill se puede usar para deshabilitar un tag permanentemente. No es
necesario implementarlo para la comunicación con el tag desarrollada en este trabajo.
Departamento de Electrónica y Electromagnetismo
Página 20
Flujo de comunicación personalizado compatible con el estándar EPC C1 Gen2
2.3.2.2.
Comandos personalizados
El protocolo EPC Gen2 contempla la posibilidad de implementar lo que llama custom
commands (comandos personalizados). Para ello el protocolo reserva un rango de
códigos de comando (concretamente el código de comando de los comandos
personalizados debe tener 16 bits y comenzar por 1110).
El tag sensor de señales biomédicas requiere que el lector que se use para
comunicarse con él implemente dos comandos personalizados en concreto. Estos
comandos se han denominado ClockCalibration y SensorCalibration [4].
2.3.2.2.1. Comando ClockCalibration
El tag hace uso de este comando para la calibración del reloj. Su estructura se
muestra en la Tabla 2.4.
Número de bits
Descripción
Código
calWord
16
8
1110 0000 0000 0000
Palabra de calibración
Tabla 2.4: Comando ClockCalibration
El único parámetro de este comando es un byte cuyo contenido se usará para la
calibración.
2.3.2.2.2. Comando SensorCalibration
El tag hace uso de este comando para la calibración del sensor. Su estructura se
muestra en la Tabla 2.5.
Número de bits
Descripción
Código
numBits
16
7
80 + numBits
1110 0000 0000 0001
Número de 0s para
transmitir
000...0
Tabla 2.5: Comando SensorCalibration
En este comando, tras el código del mismo, se transmite un número de 0s lógicos
marcado por el parámetro numBits. Se transmiten 80 + numBits 0s, por lo que, dado que
el valor de numBits puede oscilar entre 0 y 127, el número de 0s que se transmitirá
oscilará entre 80 y 207.
Departamento de Electrónica y Electromagnetismo
Página 21
Plataforma de test
Capítulo 3 Plataforma de test
3.1. Arquitectura
En la Figura 3.1 se muestran los distintos componentes de la plataforma de test que
se ha utilizado, con indicación de los lugares en que se ha desarrollado software.
Figura 3.1: Esquema de la plataforma de test
La parte más importante de la plataforma es el AS399x UHF RFID Reader System
Demo Kit (ROGER) del fabricante austriamicrosystems. Este demo kit incluye una placa
de circuito impreso cuyo componente principal es el chip AS3992, que hace funciones de
lector RFID y soporta el protocolo EPC Gen 2. La placa dispone asimismo de un
microcontrolador, concretamente el C8051F340 del fabricante Silicon Labs (Silabs), que
se encargará de controlar el lector.
El microcontrolador se programará haciendo uso del dispositivo USB Debug Adapter
Departamento de Electrónica y Electromagnetismo
Página 22
Plataforma de test
de Silabs [22]. En la documentación del ROGER se indica cómo conectar el USB Debug
Adapter a la placa y cómo configurar la aplicación para PC Silicon Labs IDE para volcar al
micro el firmware desarrollado con dicha aplicación.
Asimismo, dado que el microcontrolador soporta comunicación por USB y la placa
ROGER dispone de dicha conexión, se ha desarrollado una GUI (Graphical User
Interface, Interfaz Gráfica de Usuario) en el PC, usando Microsoft Visual Basic 2010
Express, para poder controlar diversas operaciones de comunicación por RFID desde el
ordenador.
3.1.1. Circuito Integrado AS3992
El chip AS3992 UHF Gen2 Reader soporta el uso de los protocolos ISO 18000-6c
(EPC Gen2) e ISO18000-6a,b usados en sistemas RFID. Dispone de un front-end
analógico de radiofrecuencia y de un controlador digital que gestionará las
comunicaciones con el microcontrolador externo y que proporciona las funciones
necesarias en el protocolo EPC Gen2.
La configuración del lector se consigue configurando varios registros de control, que
permiten especificar con precisión los diversos parámetros de operación.
El sistema de transmisión del lector soporta la generación automática de las señales
de control FrameSync y Preámbulo, así como del CRC, a la hora de enviar comandos
EPC Gen2.
El sistema receptor comprueba el CRC y organiza los datos en bytes. El
microcontrolador puede acceder a los datos recibidos a través de un registro de 24 bytes
de tipo FIFO.
La comunicación entre el circuito integrado AS3992 y el microcontrolador se puede
efectuar de dos modos distintos:
•
Modo normal: los datos que se transmiten y se reciben son transferidos usando el
registro FIFO, y todo el procesamiento de los datos del protocolo se realiza
internamente (generación de FrameSync y Preámbulo, comprobaciones de
CRC,...).
•
Modo directo: la señal de banda-base utilizada en la transmisión se introduce
directamente en el AS3992 y este la modulará.
Departamento de Electrónica y Electromagnetismo
Página 23
Plataforma de test
En este caso se va a usar el modo normal, ya que facilita la generación de los
comandos del protocolo y no existe la necesidad de controlar en mayor medida las
señales.
3.1.1.1.
Registros de configuración usados
3.1.1.1.1. IRQ and status
Este registro muestra la causa de una interrupción que se haya producido, y el
estado de la transmisión o recepción. Su contenido se muestra en la Tabla 3.1.
Bit
Nombre
Función
Comentarios
B7
Irq_tx
Interrupción por el fin
de la TX
B6
Irq_srx
Interrupción por
inicio de la RX
B5
Irq_fifo
Interrupción debida a
que la FIFO tiene
menos de 6 o más de
18 bytes
B4
Irq_err1
Interrupción por error
de CRC
el
Irq_header
Interrupción por error El bit header se activa
en el bit header
en la respuesta del tag
a un comando de
acceso
cuando
el
mismo no se ha podido
completar.
Irq_err2
Interrupción por error Indica
al
en la cuenta en RX
microcontrolador que la
recepción fue más
corta de lo esperado.
B1
Irq_err3
Interrupción por error
en la detección del
Preámbulo
B0
Irq_noresp
B3
B2
Interrupción por
respuesta del tag
no
Tabla 3.1: Descripción del registro IRQ and status
3.1.1.1.2. FIFO status
Este registro muestra el número de bytes recibidos y las flags que indican el estado
de la FIFO. Su contenido se muestra en la Tabla 3.2.
Departamento de Electrónica y Electromagnetismo
Página 24
Plataforma de test
Bit
Nombre
Función
Comentarios
B7
Fhil
Nivel alto de la FIFO
Indica que ya hay 18
bytes en la FIFO (para
RX)
B6
Flol
Nivel bajo de la FIFO
Indica que solo quedan
6 bytes en la FIFO
(para TX)
B5
Fove
Error
de
desbordamiento de la
FIFO
B4
Fb4
Bytes en la FIFO fb[4]
B3
Fb3
Bytes en la FIFO fb[3]
B2
Fb2
Bytes en la FIFO fb[2]
B1
Fb1
Bytes en la FIFO fb[1]
B0
Fb0
Bytes en la FIFO fb[0]
Cuántos bytes en la
FIFO no se han leído
todavía
Tabla 3.2: Descripción del registro FIFO Status
3.1.2. Microcontrolador
El microcontrolador que incluye la placa ROGER es el C8051F340 del fabricante
Silicon Labs. De entre las prestaciones que ofrece las más destacadas para este trabajo
son su soporte para USB y la posibilidad de programación y depuración incluso si, como
es el caso, el chip está instalado en el sistema.
3.1.3. PC
Se ha usado un PC con Windows 7 para gestionar la programación del
microcontrolador y para ejecutar la GUI.
3.1.4. Tag
Se han utilizado 3 tags con fines de depuración, para realizar las diversas pruebas
de identificación, lectura y escritura.
3.2. Interconexión de componentes
El PC se comunica con la placa ROGER de dos maneras:
•
Por un lado con la interfaz USB del microcontrolador, para enviar y recibir datos
relacionados con la operación del lector AS3992.
Departamento de Electrónica y Electromagnetismo
Página 25
Plataforma de test
•
Por otro lado, también usando una interfaz USB, con el dispositivo USB Debug
Adapter, el cual a su vez se conecta a la placa haciendo uso de la interfaz llamada
C2 del microcontrolador, que permite la programación del microcontrolador y la
ejecución del firmware en modo debug. El conector procedente del USB Debug
Adapter es un conector de 10 pines, de los cuales solo hacen falta 3 pines para la
comunicación usando la interfaz C2 [22], que son los que se conectan a la placa.
El microcontrolador se conecta con el AS3992 haciendo uso de la interfaz de
comunicación paralela que ofrece el lector, y que es el modo de comunicación normal
(también es posible la comunicación en modo serie si se requiere).
El conector para la antena del que dispone la placa ROGER es del tipo MMCX.
La comunicación entre la antena y el tag consiste, obviamente, en el intercambio de
comandos RFID del protocolo EPC Gen 2.
Departamento de Electrónica y Electromagnetismo
Página 26
Firmware
Capítulo 4 Firmware
4.1. Introducción
El kit ROGER incluye una memoria USB que contiene un software de demostración,
documentación acerca del sistema y, como se vio en el Capítulo 3, el código fuente de
una serie de funciones escritas en C pensadas para ser usadas en la programación del
microcontrolador (es decir, una API) y que permiten realizar diversas operaciones con el
lector AS3992.
Todo el firmware se ha realizado utilizando como base estas librerías ofrecidas por
austriamicrosystems. A partir de ellas se ha desarrollado el firmware que permite enviar
diversos comandos EPC Gen 2 y el firmware que permite realizar diversas operaciones de
interés en la comunicación con el tag sensor de señales biomédicas.
4.2. Capas de comunicación
En la Tabla 4.1 se indican las capas en las que están estructuradas las funciones
proporcionadas por austriamicrosystems como parte del demo kit ROGER para programar
el microcontrolador de la placa.
En este caso se pretenden implementar diversos comandos de utilidad para la
aplicación de la plataforma a la medida de señales biomédicas. Las funciones de la
librería gen2 proporcionada por el fabricante están orientadas al programa de
demostración y no presentan la flexibilidad necesaria para poder ser usadas con facilidad
para esta aplicación, ya que cada una de ellas implica un flujo concreto de comandos
EPC Gen2 y usan una estructura de datos para almacenar la información del tag
predefinida, por lo que se escribirán nuevas funciones haciendo uso de las capas
inferiores interface y as399x, que proporcionan la funcionalidad básica para manejar el
lector a nivel de comandos individuales EPC Gen2, y de la capa genérica as399x_public,
para la inicialización del sistema.
Departamento de Electrónica y Electromagnetismo
Página 27
Firmware
application code
gen2
iso6b
as399x_public
Capa superior en la que se ejecuta la
aplicación.
Capa de protocolo en que se hace la
ejecución.
• as399x_public
◦ Definición de una estructura de datos
para almacenar la información de un tag
◦ Inicialización y reseteo del AS3992
◦ Activación de la antena
◦ Medida RSSI
• gen2
◦ Funciones para diversas operaciones
RFID: búsqueda de tags en el entorno,
configuración, escritura y lectura de los
tags...
as399x
Procedimientos específicos del dispositivo
lector.
• Definiciones de códigos de comandos del
AS3992
• Envío y lectura de un comando RFID
• Lectura y escritura de la FIFO para enviar y
recibir datos
interface
Capa de interfaz para la comunicación con el
chip lector.
• Definiciones de pines del µC
• Inicialización de la interfaz de comunicación
paralela
• Configuración de modo normal o directo
Tabla 4.1: Capas de las librerías para el AS3992 proporcionadas por el fabricante
Asimismo, dado que la plataforma se va a manejar desde una GUI que se ejecutará
en el PC, se escribirán las funciones adecuadas para interpretar y gestionar los datos
recibidos por el microcontrolador desde el PC a través de la interfaz USB y para enviar a
la GUI la información que se requiera según la operación que se esté realizando con la
plataforma.
Por tanto, el software para esta aplicación quedaría estructurado como se describe
en la Figura 4.1 (se han sombreado las capas que se han implementado en este trabajo).
Departamento de Electrónica y Electromagnetismo
Página 28
Firmware
Figura 4.1: Capas de software para esta aplicación
En la capa Firmware EPC Gen2 estarían incluidas las funciones que se han escrito
para enviar comandos EPC Gen2 simples, y en la capa de Protocolo personalizado se
incluirían una serie de comandos, cada uno de los cuales puede constar de varios
comandos EPC Gen2, y que se corresponden con operaciones que resultan de interés
para la aplicación de la plataforma al tag de medida de señales biomédicas.
4.3. Firmware proporcionado por el fabricante
Se ha hecho uso de las capas inferiores de la API proporcionada para el fabricante
para escribir otras funciones, pero también en algún caso ha habido que modificar y
analizar las propias funciones de la API, como se comenta a continuación.
4.3.1. Modificación de la ISR
Un pin de entrada del microcontrolador (el P0.3) se configura como interrupción
externa, y a él está conectado el pin de salida IRQ del chip AS3992, que se activa cuando
se cumple alguna condición relacionada con la operación del lector (fin de transmisión,
inicio de recepción, FIFO llena o vacía, error de CRC, recepción más corta de lo
esperado, error de preámbulo, no respuesta,...). Cuando esto ocurre, se ejecuta en el
microcontrolador la ISR (Interrupt Service Routine, rutina de servicio de la interrupción)
correspondiente, que es proporcionada por el fabricante en la capa as399x (fichero
as399x.c) del firmware.
Esta ISR inicialmente lee el registro IRQ and status del AS3992, y comprueba la
causa de la interrupción, y almacena en una variable global volátil (as399xResponse) los
valores del registro de interrupciones y del registro FIFO status del AS3992. Esta variable
Departamento de Electrónica y Electromagnetismo
Página 29
Firmware
global se usa como una flag para indicar una recepción de datos: las funciones que se
usan para comprobar si se han recibido o enviado datos al tag (también incluidas en el
fichero as399x.c) son as399xWaitForResponse y as399xWaitForResponseTimed, que
hacen timeout cuando agotado un contador o pasado un tiempo determinado,
respectivamente, la ISR no ha escrito un valor en la variable as399xResponse.
Como se vio en el Capítulo 2, el protocolo EPC Gen2 especifica unos requisitos de
temporización relativamente estrictos. En particular, el tag debe responder a los
comandos Query y ACK del lector en un tiempo T2, ya que de lo contrario el tag vuelve al
estado arbitrate y no podría continuar el flujo normal de la comunicación.
En las diversas pruebas que se han realizado, se ha comprobado que a la hora de
implementar un flujo normal no era posible cumplir la temporización, por lo que se ha
modificado la ISR añadiendo una variable global, que se activará cuando se vaya a enviar
uno de estos dos comandos, y que se comprobará en la ISR para que en el caso de que
se haya activado la interrupción de recepción y la variable mencionada esté activada, se
vuelva inmediatamente de la ISR sin hacer más comprobaciones. Asimismo se ha
implementado la función as399xWaitForResponseToQueryOrACK para esperar las
respuestas a los comandos en estos dos casos concretos.
4.3.2. Validación de la función as399xWaitForResponseTimed
Como se vio en el Capítulo 2, el protocolo EPC Gen2 especifica que la respuesta del
tag al comando Write debe producirse en 20 ms como máximo, mientras que para el caso
del tag sensor de señales biomédicas la tardanza de esta respuesta se estima en unos 10
s. Por tanto, habrá que comprobar que el firmware que se va a ejecutar en esta aplicación
permite la comunicación con un tag que tarde más tiempo en responder al Write del
especificado por el protocolo.
En este caso, tras enviar el Write al tag se ejecuta la función
as399xWaitForResponseTimed, que espera durante el tiempo en ms que se le pase como
parámetro a que se produzca una interrupción (en este caso la interrupción que se espera
es la de recepción de datos). Si se sobrepasa el tiempo especificado, y se escribe en la
variable as399xResponse el valor que indica que no se ha obtenido respuesta y se
resetea el dispositivo.
El parámetro que indica el tiempo que se va a esperar la respuesta antes de hacer
timeout es una variable del tipo u16 (unsigned int16), es decir, un número de entero de 16
bits. Por tanto puede almacenar un valor entero desde 0 hasta 65535, que se
Departamento de Electrónica y Electromagnetismo
Página 30
Firmware
correspondería, dado que la unidad que expresa el parámetro son milisegundos, con un
tiempo de espera a la respuesta desde 0 hasta 65 segundos, lo que es tiempo más que
suficiente para que el tag sensor obtenga la medida biomédica y responda al Write, por lo
que podemos usar esta función que proporciona el fabricante sin ninguna modificación.
No se disponía de un tag que se comportara como está previsto que lo haga el tag
sensor de señales biomédicas, ya que todos los tags incluidos en el demo kit ROGER
cumplen el tiempo de respuesta al Write especificado por el protocolo. Sin embargo, se ha
hecho la prueba de enviar un dato de control desde el microcontrolador al PC, a
continuación llamar a la función as399xWaitForResponseTimed con un parámetro del
orden de 10000 (es decir, 10 segundos) y al hacer timeout la función por no obtener
respuesta volver a enviar un dato de control al PC. Se ha comprobado que el tiempo
transcurrido ha sido el esperado (aproximadamente 10 segundos), y se puede concluir
que si se hubiera recibido una interrupción durante ese tiempo (aun excediendo en mucho
de los 20ms especificados por el protocolo) debido a la respuesta del tag al Write se
habría detectado y se habría podido procesar y continuar el flujo de comandos previsto.
4.4. Firmware EPC Gen2 desarrollado
Se han escrito una serie de funciones haciendo uso de las capas inferiores de las
librerías proporcionadas por el fabricante, que se relacionan en la Tabla 4.2.
4.5. Protocolo personalizado de comunicación entre microcontrolador y
PC
Se han definido varios comandos personalizados de comunicación que resultan de
utilidad para el caso del tag sensor de señales biomédicas al que se refiere este trabajo.
El protocolo personalizado compuesto por estos comandos se implementa tanto en
la GUI que se ejecuta en el PC como en el firmware que se ejecuta en el
microcontrolador. Por tanto, cada comando implica un flujo de comunicación entre el PC,
el microcontrolador de la placa ROGER, el chip lector AS3992 y el tag.
4.5.1. Comandos implementados
Los comandos que componen el protocolo personalizado de comunicación se
muestran en la Tabla 4.3.
Departamento de Electrónica y Electromagnetismo
Página 31
Firmware
Función
Descripción
Parámetros
send_Select
Envía un comando Select del
protocolo EPC Gen2.
- (en este caso se usan
parámetros por defecto
especificados manualmente)
send_Query
Envía un comando Query del
protocolo EPC Gen2.
Array de 2 bytes (con los
parámetros que especifica el
protocolo para este comando)
send_ACK
Envía un comando ACK del
protocolo EPC Gen2.
- (se usa la capacidad del
AS3992 de enviar el ACK
automáticamente)
send_Write
Envía un comando Write del • 1 byte (parámetro WordPtr)
protocolo EPC Gen2.
• Array de 2 bytes (datos que
se van a escribir)
• Array de 2 bytes (handle)
send_Read
Envía un comando Read del • 1 byte (parámetro MemBank)
protocolo EPC Gen2.
• 1 byte (parámetro WordPtr)
• 1 byte (parámetro
WordCount)
• Array de 2 bytes (handle)
send_Lock
Envía un comando Lock del • Array de 3 bytes (parámetro
protocolo EPC Gen2.
Payload)
• Array de 2 bytes (handle)
send_CustomCommand1
Envío
del
comando
personalizado
para
esta
aplicación ClockCalibration.
1 byte (parámetro calWord)
send_CustomCommand2
Envío
del
comando
personalizado
para
esta
aplicación SensorCalibration.
1 byte (parámetro numBits)
as399xWaitForResponseToQu Para esperar la respuesta del
eryOrACK
tag a los comandos Query y
ACK y poder continuar el flujo
de comunicación cumpliendo
las
especificaciones
temporales del protocolo.
-
Tabla 4.2: Funciones escritas para el firmware
Departamento de Electrónica y Electromagnetismo
Página 32
Firmware
Comando
Descripción
Parámetros
GetConfiguration
Obtención del estado de
configuración del chip.
-
SetConfiguration
Establecer la configuración del
chip.
11 bytes (valores para escribir
en los registros de
configuración del AS3992)
StoreRN16
Almacenar un número aleatorio
de 16 bits (RN16).
1 byte (que define el tiempo
que el tag tiene y no tiene
alimentación)
SingleRead
Lectura simple (de temperatura
o ECG).
1 byte (tipo de lectura: ECG o
temperatura)
CompleteSense
Sensado completo.
• 1 byte (usar ClockCalibration
o no, tipo de lectura)
• 1 byte (parámetro numBits
del comando
SensorCalibration)
• 1 byte (parámetro calWord
del comando ClockCalibration)
TestClockCalibration
Testeo de la calibración del
reloj.
1 byte (parámetro calWord del
comando ClockCalibration)
Tabla 4.3: Comandos implementados
4.5.2. Flujo de los comandos
4.5.2.1.
Comando GetConfiguration
El flujo de comunicación del comando GetConfiguration se muestra en la Figura 4.2.
Este comando se usa para obtener la configuración del AS3992.
Figura 4.2: Flujo de comunicación del comando
GetConfiguration
Departamento de Electrónica y Electromagnetismo
Página 33
Firmware
4.5.2.2.
Comando SetConfiguration
El flujo de comunicación del comando SetConfiguration se muestra en la Figura 4.3.
Este comando se usa para especificar la configuración del AS3992.
Figura 4.3: Flujo de comunicación del comando
SetConfiguration
4.5.2.3.
Comando StoreRN16
El flujo de comunicación del comando StoreRN se muestra en la Figura 4.4. Este
comando se usa para enviar un determinado número de comandos Query al tag y
almacenar en un fichero los RN16 recibidos en respuesta.
Figura 4.4: Flujo de comunicación del comando
StoreRN16
Departamento de Electrónica y Electromagnetismo
Página 34
Firmware
4.5.2.4.
Comando SingleRead
El flujo de comunicación del comando SingleRead se muestra en la Figura 4.5. Este
comando se usa para obtener una medida de ECG o temperatura.
PC
μC
AS3992
TAG
PC
μC
AS3992
TAG
~10s
Figura 4.5: Flujo de comunicación del comando SingleRead
4.5.2.5.
Comando CompleteSense
El flujo de comunicación del comando CompleteSense se muestra en la Figura 4.6.
Este comando se usa para ejecutar el flujo completo de comunicación entre el AS3992 y
el tag.
Departamento de Electrónica y Electromagnetismo
Página 35
Firmware
PC
μC
AS3992
TAG
PC
μC
AS3992
TAG
~10s
Figura 4.6: Flujo de comunicación del comando CompleteSense
4.5.2.6.
Comando TestClockCalibration
El flujo de comunicación del comando TestClockCalibration se muestra en la Figura
4.7. Este comando se usa para enviar el comando personalizado ClockCalibration con
todo el rango de valores posibles de su parámetro.
Departamento de Electrónica y Electromagnetismo
Página 36
Firmware
Figura 4.7: Flujo de comunicación del comando
TestClockCalibration
4.6. Firmware para comunicación USB
Para el firmware que se ejecuta en el microcontrolador para la comunicación de
datos por USB con el PC, se ha usado la solución USBXpress, que consiste en una API
que ofrece Silicon Labs para la comunicación con los microcontroladores
C8051F32x/34x/38x a través de USB.
USBXpress proporciona la API tanto para el software del host (en este caso la GUI
que se ejecuta en el PC) como para el firmware del dispositivo (en este caso el
microcontrolador C8041F340). El flujo de datos de USBXpress se muestra en la Figura
4.8.
La API de firmware para el microcontrolador de USBXpress consta de funciones para
inicializar y deshabilitar la interfaz USB, activar y desactivar las interrupciones y leer y
escribir datos a través de USB.
Departamento de Electrónica y Electromagnetismo
Página 37
Firmware
Figura 4.8: Flujo de datos de
USBXpress
Esta API se proporciona como un archivo de librería precompilado usando el tool
chain Keil C51. El firmware para hacer uso de la API se debe desarrollar usando el tool
chain Keil C51.
Esta API se utiliza mediante el uso de interrupciones. Para el microcontrolador
C8041F340, se requiere que se implemente una ISR en la posición de memoria 0x008B
(código de interrupción 17) para atender las interrupciones relacionadas con la interfaz
USB. Una vez dentro de la ISR, se hace uso de la función Get_Interrupt_Source para
determinar la causa de la interrupción.
4.7. Función main del firmware
En el firmware que se ejecuta en el microcontrolador en primer lugar se definen
diferentes variables que se usan durante la comunicación. Después se inicializan el
Departamento de Electrónica y Electromagnetismo
Página 38
Firmware
microcontrolador, el AS3992 y la interfaz USB. A continuación se ejecuta un bucle infinito,
en el que mediante un switch se comprueba si se ha recibido algún comando del
protocolo personalizado.
Al ejecutar en el PC el programa en Visual Basic (la GUI) se intenta establecer la
comunicación con el microcontrolador por USB. Cuando se inicia o se realiza alguna
acción en la GUI, se envía el comando personalizado correspondiente al microcontrolador.
Esto genera una interrupción, en cuya ISR se escribe en la variable que controla el switch
el código del comando personalizado recibido, tras lo cual en el bucle infinito el switch
pasará a ejecutar el trozo de código que se corresponda con el comando personalizado.
Departamento de Electrónica y Electromagnetismo
Página 39
Interfaz de usuario
Capítulo 5 Interfaz de usuario
5.1. Introducción
La interfaz gráfica de usuario (GUI) se ha implementado usando Microsoft Visual
Basic 2010 Express. Se ha escogido esta aplicación debido a que las funciones de la
solución USBXpress para el programa del PC se pueden usar en C++ o en Visual Basic, y
se ha elegido esta última opción por la simplicidad en la elaboración de la GUI.
La librería de funciones de USBXpress para el PC se proporciona en la forma de una
DLL (Dynamic Link Library) para Windows. La DLL se comunica con dispositivo USB (el
microcontrolador en este caso) haciendo uso del driver USBXpress y de la pila USB del
sistema operativo.
Esta librería incluye funciones para monitorizar el número de dispositivos USB
conectados y sus descriptores, abrir la conexión con un dispositivo concreto y cerrarla,
enviar y recibir datos y algunas otras funciones de gestión de la interfaz USB.
5.2. Desarrollo de la GUI
La GUI desarrollada implementa el protocolo de comunicación personalizado para
esta aplicación compatible con EPC C1 Gen2.
La DLL que proporciona USBXpress para el PC se sitúa en la misma carpeta que los
archivos del proyecto Visual Basic que se ha creado para desarrollar la GUI. Una vez
hecho esto, es posible declarar las funciones de USBXpress en el proyecto y utilizarlas en
el código.
Se usan 2 archivos de código en el proyecto Visual Basic:
•
USBXpress.vb: declara las funciones USBXpress referenciando la DLL, y define
constantes de utilidad para indicar los distintos errores y respuestas que pueden
devolver las funciones USBXpress y para gestionar la comunicación por USB.
Departamento de Electrónica y Electromagnetismo
Página 40
Interfaz de usuario
•
Form1.vb: contiene el código asociado al formulario que constituye la GUI. Consta
de diversas rutinas, cada una de las cuales se ejecuta cuando se elige la opción
correspondiente en el formulario.
Las distintas opciones disponibles en el formulario se corresponden con los diversos
comandos del protocolo personalizado.
5.2.1. Configuración del AS3992
La parte de la GUI relacionada con la configuración se muestra en la Figura 5.1 (a) y
(b).
Figura 5.1: Captura de la GUI - Configuración
Aquí se reflejan los valores de los distintos parámetros de configuración del chip
AS3992. Se implementan los comandos del protocolo personalizado GetConfiguration y
Departamento de Electrónica y Electromagnetismo
Página 41
Interfaz de usuario
SetConfiguration.
Cuando se inicia la aplicación en el microcontrolador y en el PC, en la GUI primero
se comprueba si hay algún dispositivo USB conectado. Si se encuentra, se abre una
conexión con ese dispositivo (que en este caso sería el microcontrolador) y se ejecuta la
rutina GetConfiguration, que en primer lugar define las variables oportunas para
almacenar la configuración del AS3992, a continuación envía el comando
GetConfiguration del protocolo personalizado al microcontrolador y después se queda en
un bucle comprobando si se han recibido datos por USB. El comando enviado provocará
una interrupción USB en el microcontrolador, y en la ISR correspondiente se determina el
código del comando recibido y sus parámetros. En este caso el microcontrolador leería los
datos almacenados en los distintos registros de configuración del AS3992 y enviaría estos
valores por USB al PC. En la GUI se detectaría que se han recibido datos y se saldría del
bucle, y a continuación se leerían los datos recibidos por USB, y con estos datos se
actualizan los valores de los distintos botones y controles de la GUI.
Si se desea cambiar la configuración del AS3992 basta con elegir los valores de los
parámetros en la GUI y pulsar el botón Enviar Configuración. El microcontrolador escribirá
en los registros de configuración del AS3992 los valores indicados. Así se implementa, por
tanto, el comando del protocolo personalizado SetConfiguration.
5.2.2. Test
Esta parte de la GUI se muestra en la Figura 5.2.
Figura 5.2: Captura de la GUI - Test
Por un lado, se implementa el comando del protocolo personalizado StoreRN16. En
la GUI se especifica el número de RN16 que se quiere obtener (es decir, el número de
Departamento de Electrónica y Electromagnetismo
Página 42
Interfaz de usuario
comandos Query que se van a enviar) y el tiempo que se mantiene el tag con y sin
alimentación entre cada obtención de RN16. El código de la GUI crea un archivo de texto
y almacena en una línea distinta cada RN16 recibido.
Por otro lado, se implementa el comando del protocolo personalizado
TestClockCalibration. Al pulsar el botón Clock Calibration se inicia el envío de comandos
ClockCalibration. Se envía al microcontrolador el código del comando
TestClockCalibration del protocolo personalizado y el valor del parámetro calWord del
comando ClockCalibration. Se itera el valor del parámetro mediante un bucle for entre 0 y
255, por lo que el AS3992 enviará al tag 256 comandos ClockCalibration, recorriendo
todos los valores posibles de su parámetro.
5.2.3. Operación
Esta parte de la GUI se muestra en la Figura 5.3.
Figura 5.3: Captura de la GUI - Operación
Se implementan los comandos del protocolo personalizado SingleRead y
CompleteSense. Mediante dos checkbox se elige si se desea medir temperatura, ECG o
ambos. Se especifican los valores de los parámetros de los comandos SensorCalibration
y ClockCalibration. El envío del ClockCalibration es opcional y se elige mediante otro
checkbox. Por último, se especifica el tiempo durante el cual se debe esperar la respuesta
del tag sensor de señales biomédicas (antes de interpretar que no ha habido respuesta).
Departamento de Electrónica y Electromagnetismo
Página 43
Esquema demodulador
Capítulo 6 Esquema demodulador
6.1. Motivación
Para validar que los comandos implementados se envían correctamente y para
comprobar la temporización de la comunicación en distintos casos se hace necesario
visualizar las señales que envían el lector y el tag.
Para ello, se ha implementado un esquema demodulador para recibir y mover a
banda base las señales y visualizarlas en un osciloscopio.
6.2. Teoría básica de modulación y demodulación
6.2.1. Modulación
La modulación consiste en preparar una señal de información para su transmisión a
través de un canal de comunicaciones de la forma más adecuada. El procedimiento
clásico de modulación analógica usa la modificación continua de una señal sinusoidal,
denominada portadora, en función de los datos que se quieren transmitir [23]. La señal
portadora sinusoidal se puede representar como se muestra en la ecuación (2).
s(t )= A( t )⋅cos (ωc t + ϕ(t ))
(2)
A(t) es la amplitud, ωc es la frecuencia angular ( ωc =2 π f c , donde fc es la
frecuencia de la portadora) y φ(t) es la fase. En función de cuál de estos 3 parámetros se
modifica, podemos distinguir entre modulación en amplitud (Amplitude Modulation, AM),
modulación en frecuencia (Frequency Modulation, FM) y modulación en fase (Phase
Modulation, PM).
En la modulación analógica la señal de datos original puede tomar un número infinito
de valores para modular el parámetro que se esté modificando de la portadora, y la
variación del parámetro es continua en el tiempo de acuerdo con la variación de la señal
analógica original. En la modulación digital se trata de transmitir un flujo de bits, por lo que
Departamento de Electrónica y Electromagnetismo
Página 44
Esquema demodulador
solo hay un número limitado de símbolos digitales que la variación del parámetro de la
portadora debe representar, y el cambio del parámetro solo ocurre en el límite del
intervalo que dura cada símbolo digital. Las modulaciones digitales correspondientes a las
modulaciones analógicas comentadas anteriormente se denominan ASK (Amplitude Shift
Keying, modulación por desplazamiento de amplitud), FSK (Frequency Shift Keying,
modulación por desplazamiento de frecuencia) y PSK (Phase Shift Keying, modulación
por desplazamiento de fase) [24].
6.2.2. ASK
En este caso la señal portadora que se trasmite tiene una frecuencia y fase
constante y varía su amplitud de acuerdo con los símbolos binarios que se pretenden
comunicar. La señal transmitida se puede expresar como se ve en la ecuación (3), donde
m(t) es la señal moduladora que representa los datos binarios originales.
s(t)=m(t)⋅cos(ωc t)
(3)
En la Figura 6.1 se representa m(t) como una señal cuadrada ideal que varía entre
dos estados. Usando la codificación PIE como en el estándar EPC Gen2 esta señal
representa los datos binarios 010. Las bruscas transiciones de la señal cuadrada implican
un ancho de banda de la señal muy elevado, por lo que lo habitual es suavizar las
transiciones [25], como se observa en la Figura 6.2.
Figura 6.1: Ejemplo de señal moduladora ideal
Departamento de Electrónica y Electromagnetismo
Página 45
Esquema demodulador
Figura 6.2: Ejemplo de señal moduladora real
Para obtener la señal modulada s(t) que se transmite se multiplica m(t) por una
senoide de alta frecuencia, como se muestra en la Figura 6.3. Para ello se usa un
mezclador RF, que es un dispositivo de radiofrecuencia que multiplica 2 señales, lo que en
el dominio de la frecuencia se corresponde con un desplazamiento. Su funcionamiento se
describe en la Figura 6.4. Un mezclador dispone de 3 puertos; dos de entrada y uno de
salida. Los 3 puertos se denominan Oscilador local (LO, Local Oscillator),
Radiofrecuencia (RF, Radio Frequency) y Frecuencia intermedia (IF, Intermediate
Frequency). El puerto LO es de entrada y se alimenta típicamente con una señal
sinusoidal. Los otros dos puertos, RF e IF, se pueden intercambiar como segunda entrada
y salida, dependiendo de la aplicación. Si la frecuencia de salida deseada es menor que la
frecuencia de la segunda entrada, el proceso es una conversión a una frecuencia inferior,
y el puerto RF es de entrada y el puerto IF es de salida. Si la frecuencia de salida
deseada es mayor que la frecuencia de la segunda entrada, el proceso es una conversión
a frecuencia superior, y el puerto IF es de entrada y el puerto RF es de salida [26].
Figura 6.3: Esquema
básico de modulación
Departamento de Electrónica y Electromagnetismo
Página 46
Esquema demodulador
Figura 6.4: Ejemplo de funcionamiento de un mezclador
La señal s(t) resultante se muestra en la Figura 6.5. Así se desplaza mediante el
mezclador el espectro en frecuencia de la señal original m(t) a las frecuencias ωc y -ωc,
como se ve en la Figura 6.6.
Figura 6.5: Ejemplo de señal modulada
Departamento de Electrónica y Electromagnetismo
Página 47
Esquema demodulador
Figura 6.6: Ejemplo de espectro original desplazado
6.2.3. Demodulación
Al recibir la señal transmitida se puede optar por un método de demodulación o bien
síncrono o coherente (si se utiliza una señal sincronizada en frecuencia y fase con la
señal portadora usada en la modulación) o bien no coherente (si el receptor no contempla
ninguna forma de recuperar la fase de la señal portadora original). Al no implementar
ningún mecanismo para recuperar la señal portadora, el receptor no coherente es menos
costoso que el coherente, a costa de un menor rendimiento en cuanto a tolerancia al ruido
[27].
En la Figura 6.7 se muestra el esquema de un demodulador coherente simple [27].
La señal recibida s(t) se multiplica por una señal de oscilador local, que es una senoide
sincronizada en frecuencia y fase con la senoide portadora original. Como se observa en
la Figura 6.8 esto tiene el efecto de desplazar el espectro de la señal recibida una
cantidad ωc y -ωc, por lo que el espectro de la señal moduladora original aparece en las
frecuencias 0, 2ωc y -2ωc (ignorando constantes multiplicativas). El filtro paso de baja
(LPF, Low Pass Filter) permite eliminar las bandas de las frecuencias 2ωc y -2ωc,
obteniendo la señal de información original. Por último, en un sistema digital se necesita la
funcionalidad de interpretar cada intervalo de la señal demodulada como un símbolo
digital (1 ó 0 en el caso binario), de lo que se encarga el bloque Dispositivo de decisión.
Departamento de Electrónica y Electromagnetismo
Página 48
Esquema demodulador
Figura 6.7: Esquema básico de demodulador coherente
Figura 6.8: Ejemplo ilustrativo del desplazamiento del espectro en el demodulador
6.3. Esquema
En nuestro caso solo nos interesa poder visualizar las señales enviadas por el lector
y el tag de manera cualitativa: no importan posibles desviaciones del valor DC ni se
necesita visualizar las señales con la misma amplitud y forma que las originales;
simplemente se pretende poder distinguir los 1s y 0s lógicos y cuándo está transmitiendo
datos el lector y cuándo el tag. Por tanto, se ha implementado el montaje más simple
posible y se ha comprobado que cumple el objetivo propuesto.
El esquema demodulador se muestra en la Figura 6.9 y en la Figura 6.10.
Departamento de Electrónica y Electromagnetismo
Página 49
Esquema demodulador
Figura 6.9: Esquema del demodulador
Figura 6.10: Modelo de demodulación
La señal mr(t) es la señal en banda base, con codificación PIE, que contiene la
información que pretende transmitir el lector. En este caso suponemos que se quieren
transmitir los símbolos binarios 010. La señal se representa en la Figura 6.11 (a), y su
espectro se representa en la Figura 6.11 (b). El lector usa la modulación ASK para
transmitir los datos, lo que se traduce en mezclar m r(t) con una senoide (cos(ωct)) con una
frecuencia comprendida dentro del rango establecido por el protocolo EPC Gen 2, es
decir, entre 860 y 960MHz. En este trabajo se ha usado para las diferentes pruebas la
Departamento de Electrónica y Electromagnetismo
Página 50
Esquema demodulador
frecuencia de fc=912MHz ( ωc =2 π f c ). Esta señal modulada mr(t)cos(ωct) se representa
en la Figura 6.12 (a), y su espectro en frecuencia equivale a desplazar el espectro de m r(t)
una cantidad ωc y -ωc, como se muestra en la Figura 6.12 (b).
Figura 6.11: Ejemplo de señal de información del
lector en banda base: (a) Representación temporal,
(b) representación espectral
La señal procedente del lector se conecta a la entrada de un divisor RF, que entrega
la misma señal (atenuada) en cada una de sus dos salidas. Una de las salidas alimenta
una antena, que envía los comandos RFID al tag y le proporciona la alimentación
eléctrica, y recibe los comandos enviados por el tag. La otra salida se usa como señal de
oscilador local en la demodulación, como se verá más adelante.
Departamento de Electrónica y Electromagnetismo
Página 51
Esquema demodulador
Figura 6.12: Ejemplo de señal modulada emitida
por el lector: (a) Representación temporal, (b)
representación espectral
El tag es alimentado eléctricamente con la señal emitida por el lector. Cuando el
lector no transmite datos emite un nivel de señal denominado CW (Continuous Wave,
Onda Continua) con el objeto de proporcionar energía al tag. Suponemos que el tag
responde al mensaje enviado por el lector con los mismos datos (010). Suponemos que el
tag utiliza la codificación FM0 y modulación ASK. m t(t) es la señal en banda base, con
codificación FM0, que contiene la información que pretende transmitir el tag. Se muestra
en la Figura 6.13 (a). Su espectro se muestra en la Figura 6.13 (b). La señal modulada
que emite el tag usa la misma frecuencia portadora que la emitida por el lector (ya que el
tag responde simplemente cambiando el coeficiente de reflexión de su antena), y la
podemos escribir como mt(t)cos(ωct). Esta señal modulada mt(t)cos(ωct) se representa en
la Figura 6.14 (a), y su espectro en frecuencia equivale a desplazar el espectro de m t(t)
una cantidad ωc y -ωc, como se muestra en la Figura 6.14 (b).
Departamento de Electrónica y Electromagnetismo
Página 52
Esquema demodulador
Figura 6.13: Ejemplo de señal de información del
tag en banda base: (a) Representación temporal, (b)
representación espectral
Las señales emitidas por el lector y el tag se reciben mediante otra antena. A esta
señal recibida por la antena la denominamos r a(t) y consiste en la superposición de las
señales emitidas por lector y tag: r a(t)=mr(t)cos(ωct)+mt(t)cos(ωct). El lector emite los datos
(010), y pasa a emitir CW. El tag responde con sus datos (010), y esta señal emitida por el
tag se superpone al nivel de CW que está emitiendo el lector, como se representa en la
Figura 6.15 (a). El espectro de ra(t) sigue concentrado en torno a ωc y -ωc, como se
muestra en la Figura 6.15 (b).
Departamento de Electrónica y Electromagnetismo
Página 53
Esquema demodulador
Figura 6.14: Ejemplo de señal modulada
emitida por el tag: (a) Representación
temporal, (b) representación espectral
Para detectar la señal ra(t), tenemos que devolverla a baja frecuencia (banda base),
es decir, demodularla. Una forma de hacerlo es mezclarla con una senoide con la misma
frecuencia portadora que se usó para modular, de forma que se obtiene el espectro de la
señal original en las frecuencias 0, 2ωc y -2ωc, como se comentó en el apartado anterior.
Dado que está disponible la señal emitida por el lector m r(t)cos(ωct), que obviamente tiene
la misma frecuencia portadora, se va a usar esta señal como oscilador local,
comprobándose a continuación que, aunque no se trate de una senoide pura, se puede
realizar el análisis cualitativo en el que estamos interesados en este capítulo.
Departamento de Electrónica y Electromagnetismo
Página 54
Esquema demodulador
Figura 6.15: Ejemplo de señal recibida por la
antena: (a) Representación temporal, (b)
representación espectral
Por tanto, a la hora de demodular, se utiliza un mezclador, en el que se usa como
entrada del puerto LO (oscilador local) la señal emitida por el lector, como entrada del
puerto RF (radiofrecuencia) la superposición de las señales emitidas por el lector y el tag,
y se conecta el puerto IF (frecuencia intermedia), que en este caso es de salida, a la
entrada del osciloscopio.
Al mezclar la señal recibida por la antena r a(t) con la señal mr(t)cos(ωct) se obtiene la
señal rm(t) (señal recibida tras el mezclador), que se puede expresar como se muestra en
la ecuación (5), haciendo uso de la identidad trigonométrica (4).
1
2
cos (θ)= (1+cos (2 θ))
2
Departamento de Electrónica y Electromagnetismo
(4)
Página 55
Esquema demodulador
r m (t)=r a (t)⋅mr (t )⋅cos(ωc t )(m r (t)⋅cos (ωc t)+m t (t)⋅cos (ωc t))m r (t)⋅cos(ω c t)=
1
2
2
2
=(mr (t)+mr (t)⋅mt (t))cos (ωc t)=(mr (t)+m r (t)⋅mt (t)) (1+cos(2 ωc t))
2
(5)
A continuación se aplica un filtro paso de baja a la señal r m(t), con lo que se rechaza
el término de alta frecuencia cos(2ωct), y se obtiene la señal r(t), que es la que se
visualizaría en el osciloscopio. El filtrado paso de baja lo realiza el propio osciloscopio, ya
que posee un ancho de banda de 60MHz, muy superior al ancho de banda de las señales
emitidas por lector y tag en banda base pero muy inferior a f c=912MHz. Por tanto,
podemos escribir r(t) como se muestra en la ecuación (6), ignorando constantes
multiplicativas.
2
r (t)≈mr (t)+mr (t) mt (t)
(6)
Dado que la comunicación entre lector y tag es half-duplex, se pueden distinguir dos
casos:
•
Cuando el lector transmite, el tag no lo hace. En este caso el lector emite m r(t) y
mt(t) = 0. Por tanto en este caso podemos expresar r(t) como en la expresión (7).
}
mr (t)
2
⇒ r (t)≈mr (t )
mt (t )=0
•
(7)
Cuando el tag transmite, el lector está emitiendo CW. En este caso el tag emite
mt(t) y mr(t) ≈ CW. Por tanto en este caso podemos expresar r(t) como en la
expresión (8).
}
m r (t)≈CW
⇒ r (t)≈CW +mt (t)
m t (t)
(8)
Es decir, r(t) en teoría exhibe una forma proporcional a m2r (t) (que se corresponde
con una versión más abrupta de m r(t)) cuando emite el lector, y proporcional a la señal
mt(t) superpuesta al valor CW cuando emite el tag, lo que hace posible distinguir
cualitativamente, observando la pantalla del osciloscopio, si el lector o el tag están
emitiendo datos y qué símbolos se están transmitiendo. En la Figura 6.16 se muestra una
imagen de la pantalla del osciloscopio, en la que se observan los símbolos binarios 1 y 0
que transmite el lector.
Departamento de Electrónica y Electromagnetismo
Página 56
Esquema demodulador
Figura 6.16: Captura del osciloscopio en la
que se observa la señal transmitida por el lector
Departamento de Electrónica y Electromagnetismo
Página 57
Programas y periféricos utilizados
Capítulo 7 Programas y periféricos
utilizados
7.1. Introducción
En el desarrollo de este trabajo se han utilizado una serie de herramientas software,
tanto para programar el microcontrolador como para desarrollar la GUI. También se ha
hecho uso, como instrumento de medida, de un osciloscopio para visualizar las señales
emitidas por el lector y el tag.
7.2. Silicon Labs IDE
Se trata de un entorno de desarrollo integrado que proporciona las herramientas
necesarias para desarrollar y testear proyectos de programación de microcontroladores
de Silabs [28].
Proporciona las funcionalidades habituales de debug (breakpoints, watchpoints,
ejecución paso a paso...).
Permite integrar ensambladores, compiladores y enlazadores externos, a través del
diálogo Tool Chain Integration. En este caso el código se ha escrito en el lenguaje de
programación C (ligeramente extendido con algunas palabras clave que permiten
especificar algunas opciones propias de la programación del microcontrolador), y se ha
usado el compilador correspondiente.
Se ha elegido este entorno de desarrollo para la programación del firmware del
microcontrolador debido a que lo proporciona el mismo fabricante que el microcontrolador,
minimizando los problemas de compatibilidad y configuración.
7.3. Keil 8051 Tools
Los productos Keil de ARM proporcionan una serie de herramientas de desarrollo de
software para varias familias de procesadores, entre ellas la familia de microcontroladores
Departamento de Electrónica y Electromagnetismo
Página 58
Programas y periféricos utilizados
8051 de Silicon Labs (a la que pertenece el microcontrolador que se ha usado aquí).
Las herramientas para la familia 8051 [29] (concretamente un ensamblador, un
compilador y un enlazador) se integran con el Silicon Labs IDE para programar el
microcontrolador.
La documentación proporcionada por el fabricante austriamicrosystems junto con el
lector ROGER incluye una nota de aplicación con instrucciones para integrar las
herramientas de desarrollo Keil 8051 con el Silicon Labs IDE. Asimismo, el fabricante
Silabs ofrece en su página web de descargas para su familia de microcontroladores de 8
bits (en la que se incluye el microcontrolador usado en este trabajo) las herramientas Keil
[30]. Por tanto, la elección de estas herramientas se considera la más apropiada para la
programación del microcontrolador.
7.4. USBXpress
USBXpress es una solución proporcionada por el fabricante Silabs para facilitar la
comunicación por USB con los microcontroladores de este fabricante que incorporan esta
interfaz [31].
Esta solución incorpora:
•
Drivers para Windows
•
API para el host (es decir, para el PC), en el formato de una librería DLL. Esta
librería se puede importar para su uso en aplicaciones escritas en los lenguajes de
programación Visual Basic y C++. Consiste en una serie de funciones que se
pueden invocar para manejar la comunicación por USB desde el lado del PC.
•
API para el dispositivo (es decir, el microcontrolador). Consiste en una serie de
funciones que se pueden invocar en el firmware que se ejecuta en el
microcontrolador para manejar la comunicación por USB desde el lado del
microcontrolador.
Dado que el microcontrolador que incorpora el lector RFID ROGER es del fabricante
Silabs, y que dispone de la posibilidad de comunicación por USB, la elección de la
solución USBXpress para la comunicación por USB entre la GUI y el lector es la más
adecuada, ya que la proporciona el mismo fabricante que el microcontrolador, por lo que
se minimizan los problemas de compatibilidad y configuración. Además no requiere de
conocimientos expertos del protocolo USB ni del driver del PC.
Departamento de Electrónica y Electromagnetismo
Página 59
Programas y periféricos utilizados
7.5. Visual Basic 2010 Express Edition
Ha sido necesario desarrollar una GUI relativamente simple, con la funcionalidad
básica de un formulario (botones, checkboxes, cajas de entrada de texto, botones
radio,...). La API USBXpress permite usar como lenguaje de programación Visual Basic o
C++, y se ha elegido Visual Basic por ofrecer mayor simplicidad en la elaboración de la
GUI.
Microsoft Visual Studio Express es un conjunto de IDEs con licencia freeware
desarrollados por Microsoft, y que suponen una versión limitada (y orientada a estudiantes
y aficionados) de Microsoft Visual Studio, que está dirigida a desarrolladores de software
profesionales. Entre estos IDEs se encuentran Visual Basic Express y Visual C++
Express, que serían las opciones permitidas por USBXpress.
Por tanto, el IDE usado en este caso para desarrollar la GUI ha sido Visual Basic
Express, en su versión de 2010 [32], que posee todas las funcionalidades precisas para la
aplicación requerida en este trabajo.
7.6. Osciloscopio
El osciloscopio usado ha sido el modelo TDS 1002B del fabricante Tektronix [33].
Este dispositivo posee un ancho de banda de 60MHz, 2 canales analógicos, una tasa de
muestreo de 109 muestras/s y una longitud de registro de 2500 puntos en todas las bases
temporales. Se pretende visualizar en la pantalla de un osciloscopio las señales emitidas
por el tag y el lector. El único requisito que debe cumplir el dispositivo es poseer un ancho
de banda muy superior a las señales emitidas por el lector y el tag, para que estas puedan
ser visualizadas correctamente, y muy inferior a la frecuencia portadora de modulación,
para que las componentes de alta frecuencia sean filtradas, como se comenta en el
Capítulo 6.
El ancho de banda de las señales en banda base emitidas por el lector y el tag oscila
entre 26,7 y 128 kHz en el caso del lector y entre 40 y 640 kHz en el caso del tag (usando
codificación FM0). La frecuencia portadora oscila entre 860 y 960 MHz [11].
Por tanto, el osciloscopio mencionado cumple con los requisitos, y fue elegido por
encontrarse disponible en el laboratorio donde se realizaron las pruebas.
Departamento de Electrónica y Electromagnetismo
Página 60
Conclusiones y trabajo futuro
Conclusiones y trabajo futuro
1. Conclusiones
En este proyecto se ha programado un lector RFID para la comunicación con el tag
RFID sensor de señales biomédicas compatible con el protocolo EPC Gen2 presentado
en [4], cumpliendo con los requisitos establecidos por dicho tag sensor. Se ha
comprobado que eligiendo un lector con suficiente capacidad de personalización y
herramientas software fácilmente accesibles ha sido posible cumplir e implementar los
requisitos exigidos.
Adicionalmente, se ha implementado una interfaz de usuario para poder gestionar la
comunicación con el tag de forma más cómoda y a más alto nivel y responder a las
necesidades establecidas por el diseñador del tag. Esto también se ha realizado con
herramientas software disponibles para cualquier persona.
Por último, se ha comprobado que con un equipamiento y montaje relativamente
simple es posible validar cualitativamente en las pantalla de un osciloscopio con un ancho
de banda limitado las señales emitidas por el lector y el tag.
Ha sido preciso el estudio del estándar EPC Gen2, del datasheet del chip lector
AS3992, de la forma de configurar el entorno de desarrollo para programar el
microcontrolador y de las funciones de la librería USBXpress para la comunicación por
USB. También se ha necesitado realizar algún ajuste del código básico proporcionado por
el fabricante del lector para poder realizar en la práctica la comunicación entre lector y
tags de prueba.
Los cambios principales respecto a una comunicación RFID normal siguiendo el
protocolo EPC Gen2 han consistido en la implementación de dos comandos
personalizados relacionados con la calibración del tag sensor y la implementación y
validación de una forma de cumplir los requisitos temporales específicos de este tag.
Departamento de Electrónica y Electromagnetismo
Página 61
Conclusiones y trabajo futuro
2. Trabajo futuro
Este proyecto tiene una orientación muy específica (la comunicación con el tag
sensor desarrollado en [4]). Por tanto, el trabajo futuro derivado de él más inmediato
consistiría en usar la herramienta desarrollada con fines de test del tag indicado.
Se podría explorar la forma de extenderlo para su aplicación a un entorno en el que
existiera más de un lector y/o más de un tag, y en general la adaptación a trabajos futuros
derivados del tag sensor. También podrían reutilizarse y adaptarse la plataforma y el
código desarrollado para realizar pruebas con otros tags compatibles con el protocolo
EPC Gen2.
Asimismo, en base al trabajo desarrollado, conviene plantear la posibilidad de
desarrollar lectores específicos para este tipo de aplicaciones biomédicas, sin tener que
recurrir a una plataforma de test como la descrita, y con vistas a una posible aplicación
comercial. Para ello sería preciso modificar el estándar EPC Gen2 (o extenderlo) para:
•
Definir un procedimiento estandarizado de calibración de tag sensor de señales
biomédicas, y los comandos RFID correspondientes (similares a los
ClockCalibration y SensorCalibration definidos en este trabajo).
•
Definir los comandos necesarios para leer los datos obtenidos por el tag sensor,
con la suficiente flexibilidad temporal para obtener la medida. El tag podría, durante
la identificación, comunicarle al lector los tipos de medida biomédica que puede
realizar y el tiempo necesario para obtenerlas. Convendría definir un comando
específico para indicar al tag que debe obtener la medida, en lugar de hacerlo
escribiendo en la memoria del tag mediante el comando Write. Asimismo habría
que definir las posiciones de la memoria del tag en las que habría que aplicar el
comando Read para leer el resultado de la medida. Estas posiciones podrían estar
definidas a priori en el estándar o, para mayor flexibilidad, ser establecidas en el
diálogo entre lector y tag durante la identificación o durante la orden de obtención
de la medida biomédica.
Departamento de Electrónica y Electromagnetismo
Página 62
Bibliografía
Bibliografía
[1]
K. Finkenzeller, RFID Handbook: Fundamentals and Applications in Contactless
Smart Cards, Radio Frequency Identification and Near-Field Communication, 3rd ed.
John Wiley and Sons, 2010.
[2]
Daniel M. Dobkin, The RF in RFID, 2nd ed. Newnes, 2012.
[3]
Rodriguez-Rodriguez, J.A.; Delgado-Restituto, M.; Masuch, J.; Rodriguez-Perez, A.;
Alarcon, E.; Rodriguez-Vazquez, A., "An Ultralow-Power Mixed-Signal Back End for
Passive Sensor UHF RFID Transponders," Industrial Electronics, IEEE Transactions
on , vol.59, no.2, pp.1310,1322, Feb. 2012
[4]
J.A. Rodríguez-Rodríguez; “Diseño de un sistema RFID pasivo de bajo consumo
para monitorizar inalámbricamente constantes biomédicas”; Thesis - Date of
defense: 05/04/2013; UNIVERSIDAD DE SEVILLA, IMSE-CNM
[5]
http://www.impinj.com/RFID_Products/
[6]
http://www.thingmagic.com/embedded-rfid-readers
[7]
http://solutions.3m.com/wps/portal/3M/en_US/NA_Motor_Vehicle_Services_Systems/
Motor_Vehicle_Industry_Solutions/product_catalog/rfid-access-control-system/rfidreaders/
[8]
http://www.alientechnology.com/readers/
[9]
https://www.ams.com/eng/Support/Demoboards/UHF-RFID/UHF-RFID-ReaderICs/AS3991-Demo-Kit-Roger
[10] https://www.ams.com/eng/Products/UHF-RFID/UHF-RFID-Reader-ICs/AS3992
[11] “EPC Radio-Frequency Indentity Protocols Class-1 Generation-2 UHF RFID Protocol
for Communications at 860 MHz – 960 MHz Version 1.2.0”; October 2008.
Departamento de Electrónica y Electromagnetismo
Página 63
Bibliografía
[12] J.-P. Curty, M. Declercq, C. Dehollain, and N. Joehl. Design and Optimization of
Passive UHF RFID Systems. Springer, New York, 2007
[13]
P. V. Nikitin and K. V. S. Rao, “Theory and measurement of backscattering from
RFID tags”, IEEE Antennas and Propagation Magazine, vol. 48, no. 6, Dec. 2006, pp.
212-218
[14] ISO 11784:1996 “Radio frequency identification of animals -- Code structure”
[15] ISO 11785:1996 “Radio frequency identification of animals -- Technical concept”
[16] ISO 14223-1:2011 “Radiofrequency
transponders -- Part 1: Air interface”
identification
of
animals
--
Advanced
[17] ISO/IEC 18000-2:2009 “Information technology -- Radio frequency identification for
item management -- Part 2: Parameters for air interface communications below 135
kHz”
[18] ISO/IEC 14443-1:2008 “Identification cards -- Contactless integrated circuit cards -Proximity cards -- Part 1: Physical characteristics”
[19] ISO/IEC 15693-1:2010 “Identification cards -- Contactless integrated circuit cards -Vicinity cards -- Part 1: Physical characteristics”
[20] California Code of Regulations, Title 21, Chapter 16, “Compatibility Specifications for
Automatic Vehicle Identification Equipment”
[21] “EPC Tag Data Standard”, GS1 Standard, Version 1.8, Jan-2014
[22] http://www.silabs.com/Support%20Documents/TechnicalDocs/8-bit-USB-DebugAdapter.pdf
[23] Karrenberg, Ulrich, Signals, Processes, and Systems, Berlin, Heidelberg : Springer
Berlin Heidelberg : Imprint: Springer, 2013, 3rd ed. 2013
[24] Sergei Semenov, Evgenii Krouk, Modulation and coding techniques in wireless
communications, Chichester, West Sussex, U.K. ; Hoboken, N.J. : Wiley, 2011
[25] Dag Stranneby, William Walker, Digital signal processing and applications, Oxford :
Newnes, cop. 2004, 2nd ed.
[26] Ferenc Marki & Christopher Marki, Ph.D., Mixer Basics Primer. A Tutorial for RF &
Departamento de Electrónica y Electromagnetismo
Página 64
Bibliografía
Microwave Mixers, © 2010 Marki Microwave, Inc.
[27] Haykin, Simon, Communication systems, New York [etc.] John Wiley and Sons,
2000, 4th. ed.
[28] http://www.silabs.com/products/mcu/Pages/8-bit-microcontroller-software.aspx#ide
[29] http://www.keil.com/c51/
[30] http://www.silabs.com/products/mcu/Pages/8-bit-microcontroller-software.aspx
[31] http://www.silabs.com/products/mcu/Pages/USBXpress.aspx
[32] http://www.visualstudio.com/downloads/download-visual-studiovs#DownloadFamilies_4
[33] http://www.tek.com/datasheet/tds1000b-series
Departamento de Electrónica y Electromagnetismo
Página 65
Anexos
Anexos
1. Código fuente de la interfaz de usuario
1.1. USBXpress.vb
Module USBXpress
' Declare statements for all the functions in the SiF32xUSb DLL
' NOTE: These statements assume that the DLL file is located in
'
the same directory as this project.
'
If you change the location of the DLL, be sure to change the location
'
in the declare statements also.
Public Declare Function SI_GetNumDevices Lib "SiUSBXp.dll" (ByRef lpwdNumDevices As Integer) As
Integer
Public Declare Function SI_GetProductString Lib "SiUSBXp.dll" (ByVal dwDeviceNum As Integer,
ByRef lpvDeviceString As Byte, ByVal dwFlags As Integer) As Integer
Public Declare Function SI_Open Lib "SiUSBXp.dll" (ByVal dwDevice As UInt32, ByRef cyHandle As
UInt32) As Integer
Public Declare Function SI_Close Lib "SiUSBXp.dll" (ByVal cyHandle As UInt32) As Integer
Public Declare Function SI_Read Lib "SiUSBXp.dll" (ByVal cyHandle As UInt32, ByRef lpBuffer As
Byte, ByVal dwBytesToRead As Integer, ByRef lpdwBytesReturned As Integer, ByVal lpOverlapped As
Integer) As Integer
Public Declare Function SI_Write Lib "SiUSBXp.dll" (ByVal cyHandle As UInt32, ByRef lpBuffer As
Byte, ByVal dwBytesToWrite As Integer, ByRef lpdwBytesWritten As Integer, ByVal lpOverlapped As
Integer) As Integer
Public Declare Function SI_SetTimeouts Lib "SiUSBXp.dll" (ByVal dwReadTimeout As Integer, ByVal
dwWriteTimeout As Integer) As Integer
Public Declare Function SI_GetTimeouts Lib "SiUSBXp.dll" (ByRef lpdwReadTimeout As Integer,
ByRef lpdwWriteTimeout As Integer) As Integer
Public Declare Function SI_CheckRXQueue Lib "SiUSBXp.dll" (ByVal cyHandle As UInt32, ByRef
lpdwNumBytesInQueue As UInt32, ByRef lpdwQueueStatus As UInt32) As Integer
'Masks for the serial number and description
Public Const SI_RETURN_SERIAL_NUMBER = &H0
Public Const SI_RETURN_DESCRIPTION = &H1
'Masks
Public
Public
Public
Public
Public
Public
Public
Public
Public
Public
for return values from the device
Const SI_SUCCESS = &H0
Const SI_DEVICE_NOT_FOUND = &HFF
Const SI_INVALID_HANDLE = &H1
Const SI_READ_ERROR = &H2
Const SI_RX_QUEUE_NOT_READY = &H3
Const SI_WRITE_ERROR = &H4
Const SI_RESET_ERROR = &H5
Const SI_INVALID_BUFFER = &H6
Const SI_INVALID_REQUEST_LENGTH = &H7
Const SI_DEVICE_IO_FAILED = &H8
Public Const SI_QUEUE_NO_OVERRUN = &H0
Public Const SI_QUEUE_OVERRUN = &H1
Public Const SI_QUEUE_READY = &H2
Public Const SI_MAX_DEVICE_STRLEN = 256
Public Const SI_MAX_READ_SIZE = 64
Public Const SI_MAX_WRITE_SIZE = 64
Departamento de Electrónica y Electromagnetismo
Página 66
Anexos
Public Const INVALID_HANDLE_VALUE = &H1
Public Const MAX_PACKET_SIZE = &H40
Public Const MAX_WRITE_PKTS = &H8
Public
Public
Public
Public
Const
Const
Const
Const
FT_READ_MSG = &H0
FT_WRITE_MSG = &H1
FT_READ_ACK = &H2
FT_MSG_SIZE = &H3
Public hUSBDevice As UInt32
Public Status As Integer
Public TempString As String
Public Function ConvertToVBString(ByVal Str)
Dim NewString As String
Dim i As Integer
'for the received string array, loop until we get
'a 0 char, or until the max length has been obtained
'then add the ascii char value to a vb string
i = 0
Do While (i < SI_MAX_DEVICE_STRLEN) And (Str(i) <> 0)
NewString = NewString + Chr(Str(i))
i = i + 1
Loop
ConvertToVBString = NewString
End Function
End Module
1.2. Form1.vb
Public Class Form1
'numero de dispositivos USB conectados
Dim DevNum As Integer
'numero de bytes leidos por la interfaz USB
Dim BytesReturned As Integer
'numero de bytes escritos para su envio por la interfaz USB
Dim BytesWritten As Integer
'numero de bytes en la cola de recepcion USB
Dim BytesInQueue As UInt32
'estado de la cola de recepcion USB
Dim QueueStatus As UInt32
'I/O Buffer
Dim IOBufSize As Integer = 12 '12 bytes es el maximo que va a hacer falta transmitir o recibir
por USB
Dim IOBuf(IOBufSize) As Byte 'variable para enviar y recibir datos por USB
' Rutina que se ejecuta al abrir el formulario
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
'determinamos cuantos dispositivos USB estan conectados
Status = SI_GetNumDevices(DevNum)
If DevNum <> 0 Then ' Se ha encontrado el dispositivo (microcontrolador)
'abrimos el dispositivo
Status = SI_Open(0, hUSBDevice)
If Status = SI_SUCCESS Then
Else
TextBoxError.Text = "Ocurrio un error al abrir el dispositivo"
End If
Departamento de Electrónica y Electromagnetismo
Página 67
Anexos
GetConfiguration() ' Obtenemos la configuracion del chip (AS3992)
End If
End Sub
' Rutina que envia el comando GetConfiguration al dispositivo (obtener la configuracion del chip
(AS3992))
Private Sub GetConfiguration()
' Variable que indica si se han recibido datos por USB
Dim DatosEnCola As Boolean = False
' Parametros de configuracion
Dim Rxcod As Byte
' Codificacion RX
Dim Tari As Byte
' Tari
Dim TxPW As Byte
' PW length
Dim TxOne As Byte
' TX one length
Dim Session As Byte
' Session
Dim Rx_LF As Byte
' Link frequency
Dim TRext As Boolean
' RX preamble length
Dim DR As Boolean
' Divide Ratio (DR) ; DR bit = 0 -> DR value = 8 ; DR bit = 1 -> DR
value = 64/3
Dim TRcal As UShort
' TRcal
Dim etx As Byte
' Power (current)
Dim Txdel As Byte
' Delayed transmission wait time
Dim NoResp As Byte
' No response wait time
Dim Rxw As Byte
' RX wait time
' Solicitud de GetConfiguration
IOBuf(0) = &H0 ' Este numero indica el comando GetConfiguration
' Enviamos el codigo del comando y los parametros al uC
Status = SI_Write(hUSBDevice, IOBuf(0), 1, BytesWritten, 0)
If Status = SI_SUCCESS Then
TextBoxError.Text = ""
' Esperar a que el dispositivo haya escrito la configuracion
While Not DatosEnCola
Status = SI_CheckRXQueue(hUSBDevice, BytesInQueue, QueueStatus)
If Status = SI_SUCCESS Then
Select Case QueueStatus
Case SI_QUEUE_NO_OVERRUN
' = SI_RX_EMPTY
TextBoxError.Text = "Cola vacia"
Case SI_QUEUE_OVERRUN
Case SI_QUEUE_READY
' Hay bytes en la cola
DatosEnCola = True
TextBoxError.Text = ""
End Select
Else
TextBoxError.Text = "Ocurrio un error"
End If
End While
' Leer la configuracion (son 7 bytes)
Status = SI_Read(hUSBDevice, IOBuf(0), 7, BytesReturned, 0)
If Status = SI_SUCCESS Then
' Procesamos los datos de configuracion recibidos
' IOBuf(0): Rxcod<1:0> Tari<1:0> TxPW<1:0> TxOne<1:0>
Rxcod = IOBuf(0) >> 6
Tari = (IOBuf(0) And &H30) >> 4
TxPW = (IOBuf(0) And &HC) >> 2
TxOne = IOBuf(0) And &H3
' IOBuf(1): S<1:0> Rx_LF<3:0> TRext DR
Session = IOBuf(1) >> 6
Rx_LF = (IOBuf(1) And &H3C) >> 2
TRext = (IOBuf(1) And &H2) >> 1
DR = IOBuf(1) And &H1
' IOBuf(2): TRcal<7:0>
' IOBuf(3): TRcal<11:8> etx<1:0> 0 0
TRcal = IOBuf(3) And &HF0 ' Metemos en el byte bajo de TRcal los bits <11:8>
TRcal = TRcal << 4 ' Pasamos los bits <11:8> al byte alto de TRcal
TRcal = TRcal Or IOBuf(2) ' Metemos en el byte bajo de TRcal los bits <7:0>
Departamento de Electrónica y Electromagnetismo
Página 68
Anexos
etx = (IOBuf(3) And &HC) >> 2
' IOBuf(4): Txdel<7:0>
Txdel = IOBuf(4)
' IOBuf(5): NoResp<7:0>
NoResp = IOBuf(5)
' IOBuf(6): Rxw<7:0>
Rxw = IOBuf(6)
' Escribimos los datos de configuracion en la interfaz de usuario
Select Case Rxcod
Case 0
LabelCodificacion.Text = "FM0"
RadioButtonFM0.Checked = True
Case 1
LabelCodificacion.Text = "Miller 2"
RadioButtonMiller2.Checked = True
Case 2
LabelCodificacion.Text = "Miller 4"
RadioButtonMiller4.Checked = True
Case 3
LabelCodificacion.Text = "Miller 8"
RadioButtonMiller8.Checked = True
End Select
Select Case Tari
Case 0
LabelTari.Text = "6.25"
RadioButtonTari625.Checked = True
Case 1
LabelTari.Text = "12.5"
RadioButtonTari125.Checked = True
Case 2
LabelTari.Text = "25"
RadioButtonTari25.Checked = True
End Select
Select Case TxPW
Case 0
LabelPWLength.Text = "0.27*Tari"
RadioButtonPW027Tari.Checked = True
Case 1
LabelPWLength.Text = "0.35*Tari"
RadioButtonPW035Tari.Checked = True
Case 2
LabelPWLength.Text = "0.44*Tari"
RadioButtonPW044Tari.Checked = True
Case 3
LabelPWLength.Text = "0.5*Tari"
RadioButtonPW05Tari.Checked = True
End Select
Select Case TxOne
Case 0
LabelTXOneLength.Text = "1.5*Tari"
RadioButtonTXone15Tari.Checked = True
Case 1
LabelTXOneLength.Text = "1.66*Tari"
RadioButtonTXone166Tari.Checked = True
Case 2
LabelTXOneLength.Text = "1.83*Tari"
RadioButtonTXone183Tari.Checked = True
Case 3
LabelTXOneLength.Text = "2*Tari"
RadioButtonTXone2Tari.Checked = True
End Select
Select Case Session
Case 0
LabelSession.Text = "S0"
RadioButtonSessionS0.Checked = True
Case 1
LabelSession.Text = "S1"
RadioButtonSessionS1.Checked = True
Departamento de Electrónica y Electromagnetismo
Página 69
Anexos
Case 2
LabelSession.Text = "S2"
RadioButtonSessionS2.Checked = True
Case 3
LabelSession.Text = "S3"
RadioButtonSessionS3.Checked = True
End Select
Select Case Rx_LF
Case 0
LabelLinkFrequency.Text = "40"
RadioButton40kHz.Checked = True
Case 6
LabelLinkFrequency.Text = "160"
RadioButton160kHz.Checked = True
Case 9
LabelLinkFrequency.Text = "256"
RadioButton256kHz.Checked = True
Case 12
LabelLinkFrequency.Text = "320"
RadioButton320kHz.Checked = True
Case 15
LabelLinkFrequency.Text = "640"
RadioButton640kHz.Checked = True
End Select
Select Case TRext
Case False
LabelRXPreambleLength.Text = "Short"
RadioButtonShortPreamble.Checked = True
Case True
LabelRXPreambleLength.Text = "Long"
RadioButtonLongPreamble.Checked = True
End Select
Select Case DR
Case False
LabelDR.Text = "8"
RadioButtonDR8.Checked = True
Case True
LabelDR.Text = "64/3"
RadioButtonDR643.Checked = True
End Select
LabelTRcal.Text = (TRcal + 1) / 10
Select Case etx
Case 1
LabelPower.Text = "7"
RadioButtonPower7mA.Checked = True
Case 2
LabelPower.Text = "14"
RadioButtonPower14mA.Checked = True
Case 3
LabelPower.Text = "22"
RadioButtonPower22mA.Checked = True
End Select
LabelDelayedTransmissionWaitTime.Text = Txdel * 6.4
NumericUpDownTxdel.Value = Txdel * 6.4
LabelNoResponseWaitTime.Text = NoResp * 25.6
NumericUpDownNoResp.Value = NoResp * 25.6
LabelRXWaitTime.Text = Rxw * 6.4
NumericUpDownRxw.Value = Rxw * 6.4
Else
TextBoxError.Text = "Ocurrio un error"
End If
Else
TextBoxError.Text = "Ocurrio un error al intentar escribir en el dispositivo"
End If
Departamento de Electrónica y Electromagnetismo
Página 70
Anexos
End Sub
' Rutina que envia el comando SetConfiguration al dispositivo (especificar la configuracion del
chip (AS3992))
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
' Variable que indica si se han recibido datos por USB
Dim DatosEnCola As Boolean = False
' Parametros de configuracion
Dim Rxcod As Byte
' Codificacion RX
Dim Tari As Byte
' Tari
Dim TxPW As Byte
' PW length
Dim TxOne As Byte
' TX one length
Dim Session As Byte
' Session
Dim Rx_LF As Byte
' Link frequency
Dim TRext As Boolean
' RX preamble length
Dim DR As Byte
' DR (Divide Ratio): 0 ó 1
Dim DRValue As Single
' DR (Divide Ratio): 8 ó 64/3
Dim TRcal As UShort
' TRcal
Dim BLF As UShort
' BLF (Backward Link Frequency) [kHz]
Dim etx As Byte
' Power (current)
Dim Txdel As Byte
' Delayed transmission wait time
Dim NoResp As Byte
' No response wait time
Dim Rxw As Byte
' RX wait time
' Se escriben en las variables correspondientes a los parametros de configuracion
' los valores que se corresponden con las opciones elegidas en la interfaz de usuario
If RadioButtonFM0.Checked = True Then
Rxcod = 0
ElseIf RadioButtonMiller2.Checked = True Then
Rxcod = 1
ElseIf RadioButtonMiller4.Checked = True Then
Rxcod = 2
ElseIf RadioButtonMiller8.Checked = True Then
Rxcod = 3
End If
If RadioButtonTari625.Checked = True Then
Tari = 0
ElseIf RadioButtonTari125.Checked = True Then
Tari = 1
ElseIf RadioButtonTari25.Checked = True Then
Tari = 2
End If
If RadioButtonPW027Tari.Checked = True Then
TxPW = 0
ElseIf RadioButtonPW035Tari.Checked = True Then
TxPW = 1
ElseIf RadioButtonPW044Tari.Checked = True Then
TxPW = 2
ElseIf RadioButtonPW05Tari.Checked = True Then
TxPW = 3
End If
If RadioButtonTXone15Tari.Checked = True Then
TxOne = 0
ElseIf RadioButtonTXone166Tari.Checked = True Then
TxOne = 1
ElseIf RadioButtonTXone183Tari.Checked = True Then
TxOne = 2
ElseIf RadioButtonTXone2Tari.Checked = True Then
TxOne = 3
End If
If RadioButtonSessionS0.Checked = True Then
Session = 0
ElseIf RadioButtonSessionS1.Checked = True Then
Session = 1
ElseIf RadioButtonSessionS2.Checked = True Then
Session = 2
ElseIf RadioButtonSessionS3.Checked = True Then
Departamento de Electrónica y Electromagnetismo
Página 71
Anexos
Session = 3
End If
If RadioButton40kHz.Checked = True
Rx_LF = 0
BLF = 40
ElseIf RadioButton160kHz.Checked =
Rx_LF = 6
BLF = 160
ElseIf RadioButton256kHz.Checked =
Rx_LF = 9
BLF = 256
ElseIf RadioButton320kHz.Checked =
Rx_LF = 12
BLF = 320
ElseIf RadioButton640kHz.Checked =
Rx_LF = 15
BLF = 640
End If
Then
True Then
True Then
True Then
True Then
If RadioButtonShortPreamble.Checked = True Then
TRext = False
ElseIf RadioButtonLongPreamble.Checked = True Then
TRext = True
End If
If RadioButtonDR8.Checked = True Then
DR = 0
DRValue = 8
ElseIf RadioButtonDR643.Checked = True Then
DR = 1
DRValue = 64 / 3
End If
If RadioButtonPower7mA.Checked = True Then
etx = 1
ElseIf RadioButtonPower14mA.Checked = True Then
etx = 2
ElseIf RadioButtonPower22mA.Checked = True Then
etx = 3
End If
Txdel = NumericUpDownTxdel.Value / 6.4
NoResp = NumericUpDownNoResp.Value / 25.6
Rxw = NumericUpDownRxw.Value / 6.4
' Solicitud de SetConfiguration
IOBuf(0) = &H1 ' Este numero indica el comando SetConfiguration
'IOBuf(1):
IOBuf(1) =
IOBuf(1) =
IOBuf(1) =
0 0 0 0 RXcod<1:0> Tari <1:0>
&H0 ' IOBuf(1) = 0 0 0 0 0 0 0 0
IOBuf(1) Or (Rxcod << 2) ' IOBuf(1) = 0 0 0 0 Rxcod<1:0> 0 0
IOBuf(1) Or Tari ' IOBuf(1) = 0 0 0 0 Rxcod<1:0> Tari<1:0>
'IOBuf(2): TxPW<1:0> TXOne<1:0> 0 0 S<1:0>
IOBuf(2) = &H0 ' IOBuf(2) = 0 0 0 0 0 0 0 0
IOBuf(2) = IOBuf(2) Or (TxPW << 6) Or (TxOne << 4) Or Session
TXOne<1:0> 0 0 S<1:0>
' IOBuf(2) = TxPW<1:0>
'IOBuf(3): Rx_LF<3:0> 0 0 TRext 0
IOBuf(3) = &H0 ' IOBuf(3) = 0 0 0 0 0 0 0 0
If TRext = False Then
IOBuf(3) = IOBuf(3) Or (Rx_LF << 4) ' IOBuf(3) = Rx_LF<3:0> 0 0 0 0
ElseIf TRext = True Then
IOBuf(3) = IOBuf(3) Or (Rx_LF << 4) Or &H2 ' IOBuf(3) = Rx_LF<3:0> 0 0 1 0
End If
'IOBuf(4): 0 0 0 0 0 0 etx<1:0>
IOBuf(4) = &H0 ' IOBuf(4) = 0 0 0 0 0 0 0 0
IOBuf(4) = IOBuf(4) Or etx ' IOBuf(4) = 0 0 0 0 0 0 etx<1:0>
'IOBuf(5): Txdel<7:0>
IOBuf(5) = Txdel
Departamento de Electrónica y Electromagnetismo
Página 72
Anexos
'IOBuf(6): NoResp<7:0>
IOBuf(6) = NoResp
'IOBuf(7): Rxw<7:0>
IOBuf(7) = Rxw
'IOBuf(8): 0 0 0 0 0 0 0 DR
IOBuf(8) = DR
y DR)
'IOBuf(9): TRcal<7:0>
'IOBuf(10): 0 0 0 0 TRcal<11:8>
' BLF = DR / TRcal
' TRcal [us] = DR * 1000 / BLF [kHz] ; TRcal = 0.1...409 [us]
' TRcal [0...4095] = (DR * 1000 / BLF [kHz]) * 10 - 1
' En el caso del AS3992, los posibles valores de TRcal son discretos (como lo son los de BLF
Select Case BLF
Case 40
If DR = 0
TRcal
End If
Case 160
If DR = 0
TRcal
ElseIf DR
TRcal
End If
Case 256
If DR = 0
TRcal
ElseIf DR
TRcal
End If
Case 320
If DR = 0
TRcal
ElseIf DR
TRcal
End If
Case 640
If DR = 1
TRcal
End If
End Select
Then
= 1999
' DR = 8
Then
= 499
= 1 Then
= 1332
' DR = 8
Then
= 312
= 1 Then
= 832
' DR = 8
Then
= 249
= 1 Then
= 666
' DR = 8
Then
= 332
' DR = 64/3
' DR = 64/3
' DR = 64/3
' DR = 64/3
IOBuf(9) = TRcal And &HFF
IOBuf(10) = TRcal >> 8
'IOBuf(11): byp160 byp40 lp<3:1> hp<3:1>
Select Case BLF
Case 40
IOBuf(11) = &HFF
Case 160
IOBuf(11) = &H3F
Case 256
IOBuf(11) = &H37
Case 320
IOBuf(11) = &H27
Case 640
IOBuf(11) = &H7
End Select
' Enviamos el codigo del comando y los parametros al uC
Status = SI_Write(hUSBDevice, IOBuf(0), 12, BytesWritten, 0)
If Status = SI_SUCCESS Then
TextBoxError.Text = ""
' Esperar a que el dispositivo haya escrito los datos
While Not DatosEnCola
Status = SI_CheckRXQueue(hUSBDevice, BytesInQueue, QueueStatus)
If Status = SI_SUCCESS Then
Select Case QueueStatus
Case SI_QUEUE_NO_OVERRUN
' = SI_RX_EMPTY
TextBoxError.Text = "Cola vacia"
Departamento de Electrónica y Electromagnetismo
Página 73
Anexos
Case SI_QUEUE_OVERRUN
Case SI_QUEUE_READY
' Hay bytes en la cola
If BytesInQueue = 1 Then
' La respuesta a este comando
(SetConfiguration) es de 1 byte
DatosEnCola = True
TextBoxError.Text = ""
End If
End Select
Else
TextBoxError.Text = "Ocurrio un error"
End If
End While
' Leer la respuesta a este comando (SetConfiguration)
Status = SI_Read(hUSBDevice, IOBuf(0), 1, BytesReturned, 0) ' La respuesta a este
comando (SetConfiguration) es de 1 byte
If Status = SI_SUCCESS Then
If IOBuf(0) = &H0 Then ' No ha ocurrido ningun error al procesar el comando
SetConfiguration
GetConfiguration() ' Obtenemos la configuracion del chip (AS3992)
Else
' Ha ocurrido un error al procesar el comando SetConfiguration
TextBoxError.Text = "Error al enviar la configuracion al chip"
End If
Else
TextBoxError.Text = "Ocurrio un error"
End If
Else
TextBoxError.Text = "Ocurrio un error al intentar escribir en el dispositivo"
End If
End Sub
' Rutina que envia el comando StoreRN16 al dispositivo (almacenar numero aleatorio de 16
bits)
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button2.Click
' Variable que indica si se han recibido datos por USB
Dim DatosEnCola As Boolean = False
' Variable para el fichero de texto para escribir los RN16 recibidos
Dim Fichero As System.IO.StreamWriter
' Variable para cada linea del fichero de texto
Dim Linea As String
' Barra de progreso en la interfaz de usuario. Se llena a medida que se va
escribiendo el numero especificado de RN16
ProgressBarRN16.Value = 0
' Creamos un nuevo fichero de log de los RN16
Fichero =
Microsoft.VisualBasic.FileIO.FileSystem.OpenTextFileWriter("C:/Users/usuario/Desktop/RN16 log.txt",
False)
' Obtenemos del Tag el numero de RN16 indicado por el control NumericUpDownNumberOfRN16
For index = 1 To NumericUpDownNumberOfRN16.Value
'Solicitud de StoreRN16
IOBuf(0) = &H2 'Este numero indica el comando StoreRN16
' Construimos un byte en el que el nibble mas significativo es el tiempo en que el Tag
se mantiene a power-on
' y el nibble menos significativo es el tiempo que el Tag se mantiene powered-off
IOBuf(1) = (NumericUpDownPoweredOnTime.Value / NumericUpDownPoweredOnTime.Increment) *
16 _
+ (NumericUpDownPoweredOffTime.Value / NumericUpDownPoweredOffTime.Increment)
' Enviamos el codigo del comando y los parametros al uC
Status = SI_Write(hUSBDevice, IOBuf(0), 2, BytesWritten, 0)
If Status = SI_SUCCESS Then
TextBoxError.Text = ""
' Esperar a que el dispositivo haya escrito el RN16
While Not DatosEnCola
'While BytesInQueue < 4 ' La respuesta a este comando es de 3 bytes: ErrorCode
Departamento de Electrónica y Electromagnetismo
Página 74
Anexos
(1 byte) RN16 (2 bytes)
'While False
Status = SI_CheckRXQueue(hUSBDevice, BytesInQueue, QueueStatus)
If Status = SI_SUCCESS Then
Select Case QueueStatus
Case SI_QUEUE_NO_OVERRUN
' = SI_RX_EMPTY
TextBoxError.Text = "Cola vacia"
Case SI_QUEUE_OVERRUN
Case SI_QUEUE_READY
' Hay bytes en la cola
' Aparentemente, esperando a que se produzca el estado
SI_QUEUE_READY y a que el numero
' de bytes en la cola sea el esperado, la recepcion de RN16 funciona
siempre bien
If BytesInQueue >= 4 Then
DatosEnCola = True
TextBoxError.Text = ""
End If
End Select
Else
TextBoxError.Text = "Ocurrio un error"
End If
End While
DatosEnCola = False
' Leer el RN16
Status = SI_Read(hUSBDevice, IOBuf(0), BytesInQueue, BytesReturned, 0)
If Status = SI_SUCCESS Then
recibido un RN16
If IOBuf(1) = 0 Then ' La respuesta al Query fue correcta por lo que habremos
' Construimos el RN16
Linea = Hex(IOBuf(2)) & Hex(IOBuf(3))
' Escribimos el RN16 en el fichero de log
Fichero.WriteLine(Linea)
Else
' La respuesta al Query NO fue correcta por lo que NO habremos recibido
un RN16
' Reflejamos el fallo en el fichero de log
Fichero.WriteLine("Failed")
End If
Else
TextBoxError.Text = "Ocurrio un error"
End If
Else
TextBoxError.Text = "Ocurrio un error al intentar escribir en el dispositivo"
End If
' Actualizamos la barra de progreso
ProgressBarRN16.Value = (index / NumericUpDownNumberOfRN16.Value) * 100
Next
' Cerramos el fichero de log de los RN16
Fichero.Close()
End Sub
' Rutina que envia el comando SingleRead al dispositivo (lectura simple)
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button3.Click
'Variable que indica si se han recibido datos por USB
Dim DatosEnCola As Boolean = False
' Solicitud de SingleRead
IOBuf(0) = &H3 ' Este numero indica el comando SingleRead
IOBuf(1) = &H0
' Construimos el byte que es el parametro de este comando
Departamento de Electrónica y Electromagnetismo
Página 75
Anexos
If CheckBoxTemperatura.Checked = True And CheckBoxECG.Checked = True Then
IOBuf(1) = &H3
ElseIf CheckBoxTemperatura.Checked = True Then
IOBuf(1) = &H2
ElseIf CheckBoxECG.Checked = True Then
IOBuf(1) = &H1
End If
If IOBuf(1) <> &H0 Then ' Si se ha marcado Temperatura o ECG
' Enviamos el codigo del comando y los parametros al uC
Status = SI_Write(hUSBDevice, IOBuf(0), 2, BytesWritten, 0)
If Status = SI_SUCCESS Then
' Esperar a que el dispositivo haya escrito los datos
While Not DatosEnCola
Status = SI_CheckRXQueue(hUSBDevice, BytesInQueue, QueueStatus)
If Status = SI_SUCCESS Then
Select Case QueueStatus
Case SI_QUEUE_NO_OVERRUN
' = SI_RX_EMPTY
TextBoxError.Text = "Cola vacia"
Case SI_QUEUE_OVERRUN
Case SI_QUEUE_READY
' Hay bytes en la cola
DatosEnCola = True
End Select
Else
TextBoxError.Text = "Ocurrio un error"
End If
End While
' Leer el valor de Temperatura o ECG solicitado
' Respuesta del uC al comando SingleRead
' Temperatura
ECG
' 1 byte
1 byte
Status = SI_Read(hUSBDevice, IOBuf(0), 2, BytesReturned, 0)
If Status = SI_SUCCESS Then
If CheckBoxTemperatura.Checked = True Then
LabelTemperatura.Text = IOBuf(0)
End If
If CheckBoxECG.Checked = True Then
LabelECG.Text = IOBuf(1)
End If
Else
TextBoxError.Text = "Ocurrio un error"
End If
Else
TextBoxError.Text = "Ocurrio un error al intentar escribir en el dispositivo"
End If
End If
End Sub
' Rutina que envia el comando CompleteSense al dispositivo (sensado completo)
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button4.Click
' Variable que indica si se han recibido datos por USB
Dim DatosEnCola As Boolean = False
Dim WaitTime As Byte ' Para definir el tiempo que se va a esperar entre el Write y el Read
' Numero de bytes que se esperan en respuesta al comando CompleteSense
Dim ExpectedBytes As Byte ' Seran 8 (si se mide tempratura y ECG) o 6 (si se mide solo una
de las 2 magnitudes)
' Solicitud de CompleteSense
IOBuf(0) = &H4 ' Este numero indica el comando CompleteSense
IOBuf(1) = &H0
' Construimos el byte que es el primer parametro de este comando
If CheckBoxECG.Checked = True Then
IOBuf(1) = IOBuf(1) + 1
Departamento de Electrónica y Electromagnetismo
Página 76
Anexos
End If
If CheckBoxTemperatura.Checked = True Then
IOBuf(1) = IOBuf(1) + 2
End If
If CheckBoxClockCalibration.Checked = True Then
IOBuf(1) = IOBuf(1) + 4
End If
' Hemos obtenido en IOBuf(1): 0 0 0 0 0 ClockCal T ECG
WaitTime = (NumericUpDownWaitTime.Value - 3) * 2 ' WaitTime: 0 0 0 0 WaitTime<3:0>
WaitTime = WaitTime << 4 ' Obtenemos en WaitTime: WaitTime<3:0> 0 0 0 0
IOBuf(1) = IOBuf(1) Or WaitTime ' Obtenemos en IOBuf(1): WaitTime<3:0> 0 ClockCal T ECG
' Construimos los otros 2 bytes que tiene como parametros este comando
IOBuf(2) = NumericUpDownSensorCalibration.Value
IOBuf(3) = NumericUpDownClockCalibration.Value
If IOBuf(1) <> &H0 Then ' Si se ha marcado Temperatura o ECG
'Determinamos el numero de bytes que se esperan en respuesta al comando CompleteSense
If CheckBoxTemperatura.Checked = True And CheckBoxECG.Checked = True Then
ExpectedBytes = 9
' Si se marcan temperatura y ECG la respuesta sera de 9 bytes
Else
' Solo se ha marcado o bien temperatura o bien ECG
ExpectedBytes = 7
End If
' Enviamos el codigo del comando y los parametros al uC
Status = SI_Write(hUSBDevice, IOBuf(0), 4, BytesWritten, 0)
Return
If Status = SI_SUCCESS Then
' Esperar a que el dispositivo haya escrito los datos solicitados
While BytesInQueue < ExpectedBytes ' La respuesta al comando CompleteSense es de
ExpectedBytes bytes
'While Not DatosEnCola
Status = SI_CheckRXQueue(hUSBDevice, BytesInQueue, QueueStatus)
If Status = SI_SUCCESS Then
Select Case QueueStatus
Case SI_QUEUE_NO_OVERRUN
' = SI_RX_EMPTY
TextBoxError.Text = "Cola vacia"
Case SI_QUEUE_OVERRUN
Case SI_QUEUE_READY
' Hay bytes en la cola
DatosEnCola = True
End Select
Else
TextBoxError.Text = "Ocurrio un error"
End If
End While
' Leer el valor de Temperatura o ECG solicitado y los parametros para el escalado
' Respuesta del uC al comando SingleRead
' sens_cal_count
N2cal
N2temp (Temperatura)
ncycles (ECG)
' 2 bytes
2 bytes
2 bytes
2 bytes
Status = SI_Read(hUSBDevice, IOBuf(0), ExpectedBytes, BytesReturned, 0)
'Status = SI_Read(hUSBDevice, IOBuf(0), 1, BytesReturned, 0)
If Status = SI_SUCCESS Then
Hex(IOBuf(3)) & _
MsgBox(Hex(IOBuf(0)) & " " & Hex(IOBuf(1)) & " " & Hex(IOBuf(2)) & " " &
" " & Hex(IOBuf(4)) & " " & Hex(IOBuf(5)) & " " & Hex(IOBuf(6)))
If IOBuf(ExpectedBytes - 1) <> &HFF Then ' No ha habido error
If CheckBoxTemperatura.Checked = True Then
LabelTemperatura.Text = IOBuf(4) * 16 + IOBuf(5)
End If
If CheckBoxECG.Checked = True And CheckBoxTemperatura.Checked = True Then
LabelECG.Text = IOBuf(6) * 16 + IOBuf(7)
ElseIf CheckBoxECG.Checked = True Then
LabelECG.Text = IOBuf(4) * 16 + IOBuf(5)
End If
Departamento de Electrónica y Electromagnetismo
Página 77
Anexos
MsgBox("sens_cal_count: " & (IOBuf(0) * 16 + IOBuf(1)) & ", N2cal: " &
(IOBuf(2) * 16 + IOBuf(3)))
Else
' Ha habido error
MsgBox("Error")
End If
Else
TextBoxError.Text = "Ocurrio un error"
End If
Else
TextBoxError.Text = "Ocurrio un error al intentar escribir en el dispositivo"
End If
End If
End Sub
' Rutina que envia el comando TestClockCalibration al dispositivo (testeo de la calibracion
del reloj)
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button5.Click
' Variable que indica si se han recibido datos por USB
Dim DatosEnCola As Boolean = False
' Solicitud de TestClockCalibration
IOBuf(0) = &H5 ' Este numero indica el comando TestClockCalibration
' Barra de progreso en la interfaz de usuario. Se llena a medida que se van enviando
los comandos
ProgressBarTestClockCalibration.Value = 0
' Bucle para iterar por todos los valores posibles del parametro del comando
ClockCalibration
For CalWord = 0 To 255
IOBuf(1) = CalWord
' Enviamos el codigo del comando y los parametros al uC
Status = SI_Write(hUSBDevice, IOBuf(0), 2, BytesWritten, 0)
If Status = SI_SUCCESS Then
TextBoxError.Text = ""
' Esperar a que el dispositivo haya escrito los datos
While Not DatosEnCola
Status = SI_CheckRXQueue(hUSBDevice, BytesInQueue, QueueStatus)
If Status = SI_SUCCESS Then
Select Case QueueStatus
Case SI_QUEUE_NO_OVERRUN
' = SI_RX_EMPTY
TextBoxError.Text = "Cola vacia"
Case SI_QUEUE_OVERRUN
Case SI_QUEUE_READY
' Hay bytes en la cola
If BytesInQueue = 1 Then
DatosEnCola = True
TextBoxError.Text = ""
End If
End Select
Else
TextBoxError.Text = "Ocurrio un error"
End If
End While
DatosEnCola = False
' Leer la respuesta a este comando
Status = SI_Read(hUSBDevice, IOBuf(0), 1, BytesReturned, 0)
If Status = SI_SUCCESS Then
If IOBuf(1) = 0 Then ' La respuesta fue correcta
' Actualizamos la barra de progreso
ProgressBarTestClockCalibration.Value = (CalWord / 255) * 100
Else
' La respuesta NO fue correcta
Departamento de Electrónica y Electromagnetismo
Página 78
Anexos
TextBoxError.Text = "Ocurrio un error durante la ejecucion del comando
TestClockCalibration"
End If
Else
TextBoxError.Text = "Ocurrio un error"
End If
Else
TextBoxError.Text = "Ocurrio un error al intentar escribir en el dispositivo"
End If
Next
End Sub
End Class
Departamento de Electrónica y Electromagnetismo
Página 79
Descargar