Enunciado

Anuncio
euskal herriko unibertsitatea
Konputagailuen Arkitektura eta
Teknologia Saila
Konputagailuen Arkitektura eta Teknologia Saila, Euskal Herriko Unibertsitatea, 649 p.k. 20080 Donostia
eman ta zabal zazu
PC2
PC1
bus RS232
bus RS232
RCS
Transceiver
Transceiver
RCS
LABORATORIO DE DISEÑO DIGITAL
Enunciado práctica
KAT - ATC
2007 - 2008
DEFINICIÓN DEL PROBLEMA
Se quiere diseñar un sistema digital para permitir la comunicación por radio entre varios PCs.
Todos los PCs son potencialmente emisores o receptores, y la comunicación puede establecerse
entre dos PCs cualesquiera. Con el fin de que el usuario pueda introducir la información a
transmitir y, además, visualizar la información recibida, en cada PC se estará ejecutando el programa
denominado “HyperTerminal”, propio del sistema Windows (carpeta accesorios/comunicaciones).
En realidad el programa “HyperTerminal” actúa como interfaz entrada-salida con el puerto serie
RS232, lo tecleado se transmite por el puerto serie y lo recibido se visualiza en pantalla.
El módulo a diseñar debe encargarse de dos tareas: por un lado, intercambiar con el PC a través
del puerto RS232 la información (a transmitir o recibida), y por otro, intercambiar dicha
información con otros PCs usando un dispositivo emisor/receptor de radiofrecuencia (transceiver)
cuyas características se detallan más adelante. La estructura general del sistema completo se presenta
en la figura siguiente, y el sistema a diseñar lo denominaremos de ahora en adelante RCS (Radio
Communication System).
PC1
PC2
Bus RS232
Bus RS232
RCS
(sistema a diseñar)
Transceiver
Transceiver
RCS
(sistema a diseñar)
Veamos, mediante un ejemplo, el funcionamiento del sistema. Sean dos PCs, PC1 y PC2, entre
los que se desea realizar una comunicación en el sentido PC1 PC2. El programa HyperTerminal
(adecuadamente configurado) que se ejecuta en PC1, detecta las teclas que se van pulsando, y, por
cada tecla, envía un código por la línea serie (RS232). El módulo RCS al que está conectado PC1
recoge estos códigos y los va almacenando en una memoria RAM. En el momento en el que el PC1
envía el código correspondiente a la tecla CR (retorno de carro) se realizan las operaciones
necesarias para enviar la información almacenada en la memoria por radio, utilizando un protocolo
especifico que asegura la correcta comunicación. En el otro extremo, el módulo RCS conectado a
PC2, recibe la información que le pasa el transceiver y la va almacenado en una memoria RAM. En el
momento en que detecta que la información recibida esta completa, vuelca el contenido de la
memoria a PC2 a través de la línea serie RS232. Finalmente el programa HyperTerminal visualiza la
información en pantalla.
El sistema puede funcionar en ambas direcciones, es decir, todo lo dicho en el ejemplo anterior,
es aplicable a una comunicación en el sentido PC2 PC1.
El diseño se implementará en un circuito integrado programable (FPGA, un PLD
reprogramable de complejidad media/alta) de la casa Altera de la serie CICLONE, montado en una
tarjeta en la que además se han dispuesto una serie de dispositivos, entre los que se incluye el
transceiver. Una descripción más detallada de dicha tarjeta, así como de los dispositivos con los que
cuenta se presenta en el apéndice A.
LDD
práctica 2007-08
1
Durante el desarrollo de la práctica se utilizará el programa Quartus II, que permite realizar
todas las fases típicas del diseño de un sistema lógico: su descripción (tanto gráfica como en forma
de texto), su simulación lógica, y su implementación programando el circuito ya citado directamente
desde el PC.
Todos los módulos y submódulos a diseñar seguirán la metodología de diseño estructurado,
que consiste en subdividir cualquier sistema en dos unidades: la unidad de control, que secuencia las
señales de control y decide el cambio de estado en cada flanco de reloj, y la unidad de proceso que
las ejecuta, generando los resultados precisos.
SISTEMA A DISEÑAR: ESTRUCTURA GENERAL
PC
Bus RS232
Control de
entrada de
datos.
K_IN
Control de
Salida de
datos.
K_OUT
RCS
Control de
Comunicación
K_COM
Transceiver
NRF905
Como se acaba de señalar, el sistema RCS a diseñar se va a encargar de tres tareas, que pueden
ser fácilmente asignadas a tres módulos diferentes, y por ello, vamos a estructurar el diseño de la
siguiente manera.
1. El módulo que denominaremos K_IN se encargará de recoger la información
procedente del teclado (tanto caracteres como operaciones a realizar) y tratarla
convenientemente. A su vez, dividiremos este módulo en otros para realizar
correctamente las operaciones necesarias.
2. El módulo que denominaremos K_COM se encargará de controlar la comunicación
por radiofrecuencia mediante un protocolo de comunicaciones específico. El
dispositivo de radiofrecuencia que se va a utilizar es el transceiver NRF905 de la casa
Nordic, cuyas características se muestran en el Apéndice B. Este módulo no lo vamos a
diseñar nosotros pero tenemos que interaccionar con él, por lo que es necesario
entender bien el significado de sus entradas y salidas.
3. El módulo que denominaremos K_OUT se encargará de tratar la información recibida
por radio, y de enviarla al PC cuando sea oportuno, para que éste la muestre en la
pantalla. Al igual que K_IN, también este módulo lo dividiremos en otros módulos.
LDD
práctica 2007-08
2
MÓDULO K_IN
Vamos a construir este módulo mediante tres submódulos y una memoria RAM. Los
submódulos se explican con detalle más adelante, y son:
1. SRPT232, que se encarga de recoger los datos que envía el PC por la línea serie.
2. SCI, que interpreta los bytes que le entrega SRPT232 y pasa las órdenes y datos adecuados a
los demás submódulos.
3. EMC que controla la memoria MEM_EM donde se va almacenando el mensaje antes de
ser enviado, e interactúa con K_COM que es quien se encarga del envío por radio.
El esquema se muestra en la figura siguiente:
PC
Bus RS232
K_IN
SRPT232
Control de Memoria
de Emisión
EMC
Interprete de
Comandos Serie
SCI
Memoria
de
Emisión
MEM_EM
Control de Comunicación
K_COM
Consideraciones sobre el puerto serie RS232
La información que llega desde el PC (y que envía el programa Hyperterminal) llega en serie a
través del bus serie RS232. Este bus es un estándar de comunicación serie, tipo enlace punto a
punto, full duplex. Dispone de dos líneas de datos independientes (RX y TX) para
recibir/transmitir bits en serie, una referencia de tensión (SG) y unas líneas de control que en el
modo de funcionamiento que hemos elegido no se usan. Para establecer la comunicación serie entre
dos dispositivos sólo tendremos en cuenta estas dos líneas RX (para la recepción), y TX (para la
transmisión), siendo SG la referencia de tensión. En la figura siguiente se muestra un ejemplo de
interconexión entre dos dispositivos a través de un bus serie de este tipo:
TxD
TxD
RxD
RxD
NC
RTS
NC
RTS
RCS
TX_PC
TX_RCS
DSR
RX_PC
RX_RCS
DCD
DCD
GND
DTR
DTR
CTS
CTS
DSR
SG
GND
SG
DTE
LDD
PC
(a)
DTE
práctica 2007-08
3
El programa HyperTerminal, además de para otras cosas, puede utilizarse para intercambiar
información a través del puerto RS232 del PC (COM1). Para ello, lo configuraremos de la siguiente
manera
Al pulsar una tecla en el PC del sistema, el programa HyperTerminal en ejecución enviará el
código de 8 bits correspondiente a la tecla por la línea serie TX_PC RX_RCS. Al contrario, el
módulo RCS se encargará de enviar los datos recibidos por radio y almacenados en memoria al
programa HyperTerminal, ahora por la línea serie TX_RCS RX_PC.
En ausencia de transmisión, las dos líneas están por defecto a ‘1’ (nivel de tensión H). El
tamaño del dato es de un byte (8 bits) y para enviarlo o recibirlo en serie, se le añaden dos bits más,
un bit de start (0) y un bit de stop (1), lo que supone que por cada tecla se envían o reciben 10 bits.
La siguiente figura muestra esa idea. Como puede verse, los bits del dato (código ASCII) se envían
empezando por el menos significativo (B0).
start => 0
B0
stop => 1
104 µseg
B1
B2
B3
B4
B5
B6
B7
H
t
L
La velocidad de la transmisión serie es configurable a través del programa “HyperTerminal”. En
este diseño se ha elegido un valor de 9600 baudios (bits/s), esto significa que la duración de un bit
es de 1/9600 = 104 microsegundos.
Una vez hechas estas aclaraciones sobre el bus serie RS232, pasemos a describir con mas detalle los
submódulos del módulo K_IN.
LDD
práctica 2007-08
4
A. Módulo SRPT232 (Serial Reception Parallel Transmission):
Este módulo se encarga de recoger el dato enviado desde el PC en serie, por la línea
TX_PCRX_RCS del bus RS232 a la velocidad ya indicada de 9600 baudios. Una vez recogido, lo
entrega a la salida en paralelo (8 bits). Para que la recepción sea adecuada, este módulo deberá
sincronizarse con la señal enviada desde el PC, detectando el flanco de bajada correspondiente al
comienzo del bit de start (mientras no hay transmisión la línea de comunicación permanece a nivel
H), instante a partir del cual deberá controlar el tiempo adecuadamente para recoger cada bit en la
mitad de su duración, tal y como se muestra en la figura siguiente. La frecuencia del reloj del
sistema es 24 Mhz, y la velocidad a la que se envía la información por la línea serie es 9600 baudios.
stop => 1
start => 0
B0
B1
B2
B3
B4
B5
B6
B7
H
t
L
52 µseg
104 µseg
El esquema del módulo es el siguiente:
8
RX_RCS
SRPT232
R_BYTE_ACK
BYTE
R_BYTE
CLK
RESET
Entradas:
• RX_RCS: 1 bit, entrada serie para la recepción del dato bit a bit ( se conectará a la
línea TX_PCRX_RCS )
• R_BYTE_ACK: 1 bit, indica que el byte ya ha sido “tratado” por el sistema externo.
Salidas:
• R_BYTE: 1 bit, indica que hay un byte disponible en la salida BYTE. Dicha señal se
mantendrá activada hasta detectar R_BYTE_ACK.
• BYTE: byte (8 bits) recibido por la línea serie.
LDD
práctica 2007-08
5
B. Módulo SCI (Serial Command Interpreter):
La función del módulo SCI es recibir los bytes que le proporciona el módulo SRPT232 y llevar a
cabo las tareas adecuadas según vamos a indicar a continuación.
La información que el módulo SRPT232 proporciona corresponde al código ASCII de la tecla
pulsada, y vamos a distinguir dos tipos de teclas: teclas que corresponden a caracteres alfabéticos
(la mayoría) y teclas que corresponden a comandos u órdenes. Para no complicar el sistema en
exceso, vamos a aceptar dos comandos: comando SEND o de envío, que corresponde a la tecla
Return (ASCII 13) y comando INIC o de inicialización, que corresponde a la tecla ESC (ASCII 27).
El resto de códigos, los interpretaremos como correspondientes a caracteres alfabéticos. Tenemos
por tanto tres casos:
1. Si se recibe un carácter hay que indicar al módulo EMC que almacene dicho carácter en la
memoria MEM_EM (véase el esquema inicial de K_IN).
2. Si se recibe el comando SEND hay que poner en marcha la comunicación vía radio a través
de K_COM con el fin de que se envíe la información almacenada en la memoria MEM_EM.
3. Si se recibe el comando INIC hay que indicar al módulo EMC que inicialice la memoria
MEM_EM.
En cualquiera de los casos, sea cual sea la tecla recibida, al finalizar las operaciones
correspondientes a la misma, el módulo SCI deberá indicar a SRPT232 que ya se ha tratado dicha
tecla (señal R_BYTE_ACK).
Veamos con detalle las entradas y salidas de este módulo:
BYTE
R_BYTE
8
8
SCI
R_CHAR_ACK
INIC_ACK
SEND_ACK
CHAR
R_CHAR
INIC
SEND
R_BYTE_ACK
CLK
RESET
Entradas:
• BYTE: código de 8 bits que proporciona SRPT232.
• R_BYTE: indica que hay un código válido en BYTE.
• R_CHAR_ACK: indica que el carácter ya se ha escrito en MEM_EM.
• INIC_ACK: indica que la inicialización de la memoria solicitada mediante INIC ya ha
finalizado.
• SEND_ACK: indica que ha finalizado el envío de la información contenida en
MEM_EM (es decir, que ha finalizado la operación SEND solicitada).
Salidas:
• CHAR: código de 8 bits correspondiente a un carácter alfabético.
• R_CHAR: señal para solicitar que el byte que está en la salida CHAR se almacene en
memoria.
• INIC: señal para solicitar que se realice el proceso de inicialización.
• SEND: señal para solicitar a EMC que comience el proceso de envío de la
información almacenada en MEM_EM.
• R_BYTE_ACK: indica que el byte recibido (carácter o comando) ya se ha tratado.
LDD
práctica 2007-08
6
C. Módulo EMC (Emission Memory Controller):
Este módulo tiene básicamente tres funciones:
1. Inicializar el contenido de la memoria con el código ASCII correspondiente al espacio en
blanco cuando se solicite mediante la entrada INIC (No olvidar que al inicializar el sistema
después de un “reset” también debe inicializarse la memoria).
2. Ir guardando en la memoria MEM_EM los caracteres recibidos desde el PC (8 bits) cuando lo
indique el módulo SCI (señales CHAR y R_CHAR). De este modo, el módulo EMC sabrá
siempre cuántos caracteres hay almacenados en memoria. En caso de que se llene la memoria y
lleguen más caracteres éstos no se guardarán.
3. Proporcionar al módulo de comunicación K_COM, cuando éste recibe de SCI una solicitud de
envío, la información almacenada en MEM_EM que debe ser enviada vía radio. Los caracteres
en memoria han sido guardados byte a byte, pero a la hora de enviar esta información vía radio,
el tamaño de la unidad de envío utilizada por el transceiver va a ser de 64 bits (8 caracteres).
Denominaremos “mensaje” al total de la información almacenada en memoria, y “paquete” a
cada conjunto de 8 bytes en los que se divide. Debido a esto, la memoria MEM_EM es un
tanto peculiar (buses de entrada y salida de datos de tamaño diferente) si la comparamos con la
estructura “habitual” de una memoria (véase apartado D a continuación, donde se describe con
detalle).
El módulo EMC debe proporcionar las señales de control adecuadas para realizar en la
memoria la operación necesaria en cada momento. Además, el módulo EMC puede recibir de
K_COM peticiones de reenvío del mensaje (o parte de él) cuando haya problemas en la
comunicación RF, cuando esto ocurra K_COM indicará el número de paquete a partir del cual
se debe enviar el mensaje. Dicha información se necesita para no enviar de nuevo toda la
información de la memoria. Ante una solicitud de retransmisión, antes de comenzar a enviar
nuevamente los paquetes hay que esperar 800 microsegundos.
El esquema del módulo es el siguiente:
INIC
CHAR
R_CHAR
INIC_ACK
8
R_CHAR_ACK
8
11
SM
RETRANS
RSP
EMC
8
CHAR_EM
ADD_EM
WREN_EM
RDEN_EM
FM
PTR
PTR_ACK
FM_ACK
8
MPN_EM
CLK
RESET
Entradas:
• INIC: solicitud de inicialización de la memoria.
• CHAR: señal de 8 bits con el código ASCII del carácter que hay que almacenar en
memoria.
• R_CHAR: indica que en la entrada CHAR hay un código que almacenar.
• SM: Indica que K_COM va a iniciar el envío de un mensaje y solicita a EMC los
paquetes necesarios para hacerlo.
• RETRANS: indica que se ha recibido por RF la petición de retransmisión y que hay
que proceder a la retransmisión del mensaje a partir del paquete indicado por RSP.
LDD
práctica 2007-08
7
•
•
RSP: señal de 8 bits que indica el nº de paquete a partir del cual se ha de realizar el
reenvío.
PTR_ACK: indica que se puede enviar el siguiente paquete (sirve para sincronizarse
con K_COM).
FM_ACK: indica que la transmisión del mensaje se da por finalizada.
•
Salidas:
• INIC_ACK: indica que ya ha finalizado la inicialización de la memoria.
• R_CHAR_ACK: indica que ya se ha escrito el carácter en memoria.
• CHAR_EM: carácter a escribir en memoria, ya sea el recibido de SCI o el espacio en
blanco (ASCII 255) en el caso de la inicialización de la memoria.
• ADD_EM: 11 bits para proporcionar la dirección de memoria (tanto de lectura como
de escritura).
• WREN_EM: orden de escritura en memoria.
• RDEN_EM: orden de lectura de memoria.
• FM: indica que ya se ha entregado el último paquete que forma el mensaje completo.
• PTR: indica que en la salida de la memoria hay un nuevo paquete, listo para ser
enviado por radio por K_COM.
• MPN_EM: 8 bits que indican el nº de paquetes que componen el mensaje
almacenado en memoria.
D. Memoria MEM_EM (Emission Memory):
Se trata de una memoria síncrona y de doble puerto de 2 Kbytes en la que se almacena el
mensaje recibido desde el teclado y que debe ser enviado cuando se solicite. Como ya se ha dicho,
la unidad de escritura es 8 bits (memoria de 2048x8), pero la de lectura es 64 bits (memoria de
256x64). Por ese motivo, se dispone de dos entradas de dirección diferentes: para escribir de 11
bits y para leer de 8. Por ejemplo, si leemos en la dirección 00000001 estamos leyendo de golpe los
8 bytes escritos en las direcciones 00000001000 a 00000001111.
Fijaros en que MEM_EM no es un módulo a diseñar con unidades de control y proceso, sino
un simple componente que será utilizado por los módulos EMC y K_COM. Cuando lo definamos
utilizando Quartus, lo haremos mediante una variación de un componente de biblioteca (el
lpm_ram_dp) generada con el “MegaWizard Plugin Manager”.
DATA
WRADD
WREN
RDADD
8
11
8
MEM_EM
2048 bytes
64
Q
RDEN
CLK
Entradas:
• DATA: Dato de entrada (1 byte).
• WRADD: Dirección de escritura (11 bits).
• WREN: Habilitación de escritura.
• RDADD: Dirección de lectura (8 bits).
• RDEN: Habilitación de lectura.
• CLK: Reloj.
Salidas:
• Q: Dato de salida (64 bits).
LDD
práctica 2007-08
8
MÓDULO K_COM
Este módulo se encarga de realizar la comunicación por RF. Además de implementar el control
del transceiver NRF9E5, sigue un protocolo de comunicación que asegura que no se pierde
información por radio. No tenemos que diseñar este módulo, pero dado que tenemos que
intercambiar información con él, es necesario que describamos su funcionamiento para entender
bien el significado de las señales y poder interconectarlo correctamente con los módulos de K_IN y
K_OUT.
Dado que la comunicación por radio implica dos sistemas, el módulo K_COM realiza dos
funciones: la de emisor por RF en el sistema que envía el mensaje, y la de receptor por RF en el
sistema que lo recibe. Vamos a tratar de explicar esas dos funciones por separado.
FUNCIONAMIENTO COMO EMISOR
El módulo K_COM comienza el proceso de emisión al recibir la señal SEND procedente del
módulo SCI, instante en el que solicita al módulo EMC los paquetes a enviar activando la señal
SM. El módulo EMC proporciona el nº total de paquetes de que consta el mensaje, MPN_EM, y
controla la memoria MEM_EM para que proporcione uno a uno a K_COM, los paquetes que
forman el mensaje. El nº de paquete que se va a enviar, PN_EM, coincide con la dirección del
mismo en la memoria. Además de toda esta información, el módulo K_COM, para formar el
paquete completo que se envía por radio (nivel LLC del esquema a continuación), necesita otras
dos entradas: el identificador del sistema que realiza el envío, MY_ID; y el identificador del sistema
que recibirá el mensaje, DEST_ID. De hecho, cada vez que se quiere enviar un paquete de 8
caracteres, lo que se envía por radio son en total 14 bytes.
8 b y te s
A p p lic a tio n
L L C
4 b y te s
1 b y te
1 b y te
A p p D a ta
D E S T _ ID
N ºP M
N ºP
L L C D a ta
M Y _ ID
M A C
P h y s ic a l
4 b y te s
P re a m b le
M A C D a ta
P h y s ic a lD a ta
20
2
b y te s
C R C
T a il
b y te s
El módulo K_COM procederá al envío de un paquete por RF cuando detecte activada la
entrada PTR, e indicará que dicha emisión ha sido realizada mediante la señal PTR_ACK. De este
modo, el módulo EMC le podrá proporcionar los datos correspondientes al siguiente paquete. Este
proceso se repite el número de veces necesarias, hasta que K_COM reciba la señal FM que indica
que ya se han entregado todos los paquetes que forman el mensaje.
Entre paquetes, el módulo K_COM no espera ninguna señal de confirmación del sistema
receptor, pero una vez enviado el último paquete, K_COM queda a la espera de que el sistema
receptor confirme que la transferencia ha sido correcta, o bien solicite la retransmisión del mensaje.
Si recibe la confirmación, K_COM activará la señal FM_ACK y si se ha solicitado la retransmisión
activará la señal RETRANS, lo que deberá dar comienzo a un nuevo proceso de envío a partir del
último paquete que ha recibido correctamente el receptor (esa información la proporciona la salida
RSP).
FUNCIONAMIENTO COMO RECEPTOR
Como receptor, el módulo K_COM irá proporcionando los datos recibidos por RF en la salida
DAT_RF_OUT, para que el módulo RMC de K_OUT (similar al EMC de K_IN) los guarde en
LDD
práctica 2007-08
9
su memoria. La señal DS indicará que hay datos para guardar y la señal PR indicará el número de
paquete (RMC utilizará esa información como dirección de escritura en la memoria). El módulo
RMC confirmará que el dato ha sido guardado con la señal DS_ACK, lo que servirá a K_COM
para proceder a la recepción del siguiente paquete.
Si se recibe todo el mensaje correctamente, K_COM activará la señal FMR y si no, solicitará al
sistema emisor la retransmisión del mensaje a partir del último paquete correcto recibido, para lo
que enviará por RF la información necesaria. Vamos a limitar el número de retransmisiones a un
máximo de 10.
El tamaño máximo de un mensaje es 254 paquetes (254 x 8 = 2032 caracteres) ya que el número
de paquete 255 (1111 1111) se reserva en el protocolo de comunicación por RF para indicar que se
está transmitiendo un comando del protocolo y no un paquete de datos.
El esquema del módulo K_COM es el siguiente:
MY_ID
DEST_ID
32
SM
32
MPN_EM
PTR
PN_EM
DAT_EM
RETRANS
RSP
8
SEND
8
PTR_ACK
FM_ACK
SEND_ACK
K_COM
8
64
DS
DAT_RF_OUT
64
FM
8
DS_ACK
PR
FMR
CLK
RESET
Entradas:
• MY_ID: identificador del sistema (4 bytes).
• DEST_ID: identificador del sistema destino (en caso de envío) (4 bytes).
• SEND: Petición de envío del mensaje.
• MPN_EM: Nº de paquetes que forman el mensaje a emitir (1 byte).
• PTR: Orden de enviar por RF el paquete.
• PN_EM: Nº del paquete a enviar (1 byte, comenzando en 0).
• DAT_EM: Dato a enviar (8 bytes).
• FM: Mensaje completo (se han volcado todos los datos almacenados en la memoria
MEM_EM).
• DS_ACK: Confirmación de que el paquete ha sido guardado en memoria.
Salidas:
• SM: Orden de envío secuencial de los paquetes guardados en la memoria de emisión.
• RETRANS: Se ha recibido por RF una solicitud de retransmisión, y se ha de
retransmitir el mensaje a partir del paquete indicado en RSP.
• RSP: Nº de paquete a partir del cual se ha de realizar el reenvío (1 byte).
• PTR_ACK: Indica que se ha enviado un paquete por RF.
• FM_ACK: Señal que indica que se ha recibido por RF la confirmación de que la
comunicación ha sido correcta.
• SEND_ACK: Señal que indica a SCI que se da por finalizada la transmisión.
• DS: Orden de guardar en memoria el dato DAT_RF_OUT.
• DAT_RF_OUT: Caracteres recibidos por RF (8 bytes).
• PR: Nº de paquetes recibidos correctamente (1 byte).
• FMR: Señal que indica que se ha completado la recepción del mensaje por RF.
LDD
práctica 2007-08
10
MÓDULO K_OUT
Este módulo lo construiremos mediante dos submódulos y una memoria RAM. Los
submódulos se explican con detalle más adelante, y son:
1. PRST232, que se encarga de enviar los datos al PC por la línea serie.
2. RMC que controla la memoria MEM_REC donde se va almacenando el mensaje recibido
antes de enviarlo al PC, e interactúa con K_COM que es quien se encarga de la recepción
por radio.
El esquema se muestra en la figura siguiente:
PC
Bus RS232
K_OUT
PRST232
Control de Memoria
de Recepción
RMC
Memoria
de
Recepción
MEM_REC
Control de Comunicación
K_COM
A. Módulo PRST232 (Parallel Reception Serial Transmission):
Este módulo realiza la función inversa al PRST232 de K_IN. Se encarga de recoger un dato en
paralelo de 8 bits (un byte), y transmitirlo al PC por la línea serie RS232 a la velocidad adecuada.
Por tanto, añadirá al byte los dos bits de start y stop, y se encargará de enviar los 10 bits por la línea
serie, controlando que la duración de cada bit en la línea sea la adecuada para que la transmisión se
realice a 9600 baudios.
El esquema del módulo es el siguiente:
TRANS
BYTE
PRST232
8
TX_RCS
TRANS_ACK
CLK
RESET
Entradas:
• TRANS: 1 bit, señal de orden de transmitir un byte. Dicha señal permanecerá activada
mientras se realice la transmisión. El módulo que la proporciona desactivará dicha
señal al ver que la transmisión ya se ha realizado (TRANS_ACK).
• BYTE: 8 bits, dato o byte a transmitir
LDD
práctica 2007-08
11
Salidas:
• TX_RCS: 1 bit, salida serie para el envío del dato bit a bit ( se conectará a la línea
TX_RCS RX_PC )
• TRANS_ACK: 1 bit, indica que el byte ha sido enviado
B. Módulo RMC (Reception Memory Controller):
Este módulo realiza básicamente tres tareas:
1. Inicializar el contenido de la memoria con el ASCII correspondiente al espacio en blanco
cuando se inicializa el sistema después de un “reset”.
2. Almacenar en memoria los paquetes (bloques de 8 bytes) que se van recibiendo por radio y que
entrega K_COM
3. Una vez recibido el mensaje completo, transferir byte a byte los datos almacenados en la
memoria al modulo PRST232, para que éste los envíe por línea serie al PC.
El esquema del módulo es el siguiente:
64
DS
DATA_RF
PR
64
11
8
RMC
FMR
DATA_RM
ADD_RM
WREN_RM
RDEN_RM
DS_ACK
TRANS_ACK
TRANS
CLK
RESET
Entradas:
• DS: Orden de almacenar un paquete de datos en la memoria de recepción.
• DATA_RF : Paquete de datos entregado por K_COM (8 bytes)
• PR: Nº del paquete recibido (1 byte).
• FMR: Señal que indica que se ha recibido un mensaje completo.
• TRANS_ACK: Confirmación de que el dato de salida de 1byte, leído de MEM_REC,
ha sido procesado por PRST232 y en consecuencia se ha enviado al PC.
Salidas:
• DATA_RM: Paquete de datos a escribir en la memoria (8 bytes), ya sea el recibido por
RF o los espacios en blanco (ASCII 255) en el caso de la inicialización de la memoria.
• ADD_RM: Dirección de la memoria, tanto para lectura como para escritura (11 bits).
• WREN_RM: señal de habilitación de escritura.
• RDEN_RM: señal de habilitación de lectura.
• DS_ACK: Señal que indica que el último dato que se ha recibido por RF ha sido
procesado (guardado en la memoria de recepción).
• TRANS: Orden a PRST232 de transmitir un Byte
LDD
práctica 2007-08
12
C. Memoria MEM_REC (Reception Memory):
Es la memoria encargada de almacenar el mensaje recibido via radio para ser enviado al PC por
el canal serie RS232 en cuanto esté completo. Como en el caso de MEM_EM se trata de una
memoria síncrona y de doble puerto de 2 Kbytes, pero al contrario que en aquella, en ésta la unidad
de escritura es de 64 bits (memoria de 256x64) y la de lectura de 8 (memoria de 2048x8). Por ese
motivo, dispone de dos entradas de dirección diferentes: para escribir de 8 bits y para leer de 11.
DATA
WRADD
WREN
RDADD
64
8
MEM_REC
2048 bytes
11
8
Q
RDEN
CLK
Entradas:
• DATA: Dato de entrada (8 bytes).
• WRADD: Dirección de escritura (8 bits).
• WREN: Habilitación de escritura.
• RDADD: Dirección de lectura (11 bits).
• RDEN: Habilitación de lectura.
• CLK: Reloj.
Salidas:
• Q: Dato de salida (8 bits).
LDD
práctica 2007-08
13
APÉNDICE A: DESCRIPCIÓN DE LA TARJETA A UTILIZAR
La tarjeta que se va a utilizar consta de dos placas interconectadas., tal y como se muestra en la
imagen siguiente:
La placa superior (MIRAKONTA) contiene el Transceiver NRF905 (1), una antena fractal (2),
la FPGA Altera CycloneII C5 (3), un oscilador de 24 MHz (4), un conector JTAG (5), un conector
de alimentación (6), un conector plano de 16 pines (7), 8 leds (8) además de otros elementos que
no utilizaremos en esta práctica.
(7)
(4)
(8)
(1)
(6)
(3)
(5)
LDD
(2)
práctica 2007-08
14
La placa inferior hace una función de adaptador, contiene un conector DB9 (a) (conector serie
para conectar con el puerto serie del PC), un circuito MAX232 (b) (adaptador de RS232 a TTL) un
conector de alimentación externa (c) , dos reguladores de tensión, uno de 5V (d) para el circuito
Max232 y otro de 3,3V (e) para la placa MIRAKONTA, un conector de alimentación para la placa
MIRAKONTA (f) , un cable plano de 16 pines (g) y soportes para colocar la placa superior (h) .
(h)
(g)
(b)
(a)
(f)
(c)
(e)
(d)
CORRESPONDENCIAS ENTRE LOS PINES DE LA FPGA CYCLONEII C5 Y LAS PLACAS:
Conexión en placa
Oscilador 24 MHZ
(Placa MK)
Pulsador
(Placa MK) (reset)
Señal DR Transceiver NRF905
(Placa MK)
Señal CSN Transceiver NRF905
(Placa MK)
Señal MISO Transceiver NRF905
(Placa MK)
Señal MOSI Transceiver NRF905
(Placa MK)
Señal SCK Transceiver NRF905
(Placa MK)
Señal TRX_CE Transceiver NRF905 (Placa MK)
Señal TX_EN Transceiver NRF905 (Placa MK)
Led D1
(Placa MK)
Led D2
(Placa MK)
Led D3
(Placa MK)
Led D4
(Placa MK)
Led D5
(Placa MK)
Led D6
(Placa MK)
Led D7
(Placa MK)
Led D8
(Placa MK)
RX RS232
(Placa ADAPTADORA)
TX RS232
(Placa ADAPTADORA)
LDD
práctica 2007-08
Pin FPGA
88
69
28
4
26
7
8
27
9
96
103
133
135
93
87
129
57
47
55
15
La placa adaptadora se conecta mediante un cable al puerto serie del PC. Para enviar datos a
través del puerto serie utilizaremos el programa Hyperterminal:
La configuración a seleccionar es la siguiente:
Colocaremos una tarjeta conectada a cada PC por el puerto serie y lo que se escriba en un
hyperterminal deberá aparecer en el otro.
LDD
práctica 2007-08
16
APÉNDICE B. CARACTERÍSTICAS TÉCNICAS DEL TRANSCEIVER NRF905
Single chip 433/868/915 MHz Transceiver nRF905
FEATURES
— True single chip GFSK transceiver in a small 32-pin package (32L QFN 5x5mm)
— ShockBurst™ mode for low power operation
— Power supply range 1.9 to 3.6 V
— Multi channel operation – ETSI/FCC Compatible
— Channel switching time <650ms
— Extremely low cost Bill of Material (BOM)
— No external SAW filter
— Adjustable output power up to 10dBm
— Carrier detect for "listen before transmit" protocols
— Data Ready signal when a valid data package is received or transmitted
— Address Match for detection of incoming package
— Automatic retransmission of data packages
— Automatic CRC and preamble generation
— Low supply current (TX), typical 11mA @ -10dBm output power
— Low supply current (RX), typical 12.5mA
—
APPLICATIONS
Wireless data communication
— Alarm and security systems
— Home Automation
— Remote control
— Surveillance
— Automotive
— Telemetry
— Industrial sensors
— Keyless entry
— Toys
GENERAL DESCRIPTION
nRF905 is a single-chip radio transceiver for the 433/868/915 MHz ISM band. The
transceiver consists of a fully integrated frequency synthesiser, receiver chain with
demodulator, a power amplifier, a crystal oscillator and a modulator. The
ShockBurstTM feature automatically handles preamble and CRC. Configuration is
easily programmable by use of the SPI interface. Current consumption is very low, in
transmit only 11mA at an output power of -10dBm, and in receive mode 12.5mA.
Built in power down modes makes power saving easily realizable.
LDD
práctica 2007-08
17
Más información en la página web de Nordic Semiconductor.
LDD
práctica 2007-08
18
Descargar