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