1.3 RESEARCH QUESTIONS 4
2.1.3.7 Board Micromanagement 24
Dado que el controlador ethernet se encarga de la transmisión de los paquetes en el medio, el microcontrolador debe formar las tramas ethernet, es decir, incorporar la información sobre las direcciones físicas de los dispositivos, para ello debe implementar el protocolo de resolución de direcciones (ARP), debe programarse la comunicación entre el microcontrolador y el controlador a bajo nivel, además se debe implementar los protocolos de la capa de Internet y de transporte que requiera la aplicación.
Además del protocolo Internet (IP) se podría implementar partes o todas las funciones del protocolo de mensajes de Internet (ICMP) que facilitarían la resolución de problemas de conexión.
Acompañando a la tarjeta de desarrollo Easyweb se cuenta con el código fuente de un limitado stack de protocolos TCP/IP desarrollado por Texas Instruments [11], que provee una interfaz de programación para desarrollar aplicaciones de red.
Específicamente los protocolos implementados son los siguientes:
Ethernet
El microcontrolador sólo debe encargarse de formar las tramas ethernet, es decir, incorporar en un paquete de hasta 1500 bytes información sobre las direcciones físicas de los controladores, generar código de detección de errores y empaquetar y desempaquetar información proveniente de la capa de Internet. A su vez se comunica físicamente con el controlador de red por lo que debe programarse las funciones para configurar el controlador, conocer la dirección a la que responde y los registros que se debe escribir. El resto del protocolo ethernet: detección de colisión, acceso al medio, y otros los realiza el controlador ethernet, así como la interfaz con el medio físico.
Protocolo de resolución de direcciones, ARP
El objetivo de este protocolo de la capa Internet es traducir direcciones lógicas de Internet en direcciones físicas de dispositivos de red conectados al medio ethernet, para incorporar esta información en los paquetes ethernet.
Para ello el software utiliza dos mensajes: ARP Request para conocer la dirección de otro dispositivo y ARP Reply para responder a los requerimientos de otro dispositivo de red.
Protocolo Internet, IP
Este protocolo de la capa Internet se encarga de transmitir información entre los protocolos de transporte y el de ethernet, contiene información sobre la dirección lógica (direcciones IP) de los puntos de origen y destino, además se ocupa de fragmentar grandes flujos de datos en paquetes más pequeños que puedan ser transferidos por el protocolo ethernet. En este nivel cada paquete es tratado como una unidad independiente, sólo se asegura el encabezado de información IP con un código de verificación de errores, pero no se asegura que los datos sean transportados libres de errores o que lleguen en el orden correcto si son fragmentados.
Protocolo de mensajes de control de Internet, ICMP
Este protocolo de capa Internet se utiliza para obtener información acerca de la fiabilidad de la conexión, o de la causa de la falla de ésta. En el caso del stack TCP/IP disponible sólo se responde al mensaje Echo Request, al que se responde con un Echo Reply.
Protocolo de control de transmisión, TCP
Este es el único protocolo de transporte disponible en el código disponible. Este protocolo provee un medio confiable de transmisión de datos, se asegura la llegada de cada paquete y en el orden correcto, lo que se logra asignando un número de secuencia a cada paquete y requiriendo que a cada paquete transmitido el receptor responda con una señal de aceptación.
Antes de comenzar la transmisión con este protocolo se debe realizar una conexión entre el servidor el cliente mediante el intercambio de ciertos paquetes en los que se acepta la conexión por parte del servidor y se sincronizan los números de secuencia de los paquetes que se envían posteriormente.
Una buena herramienta para estudiar el comportamiento de los dispositivos y protocolos de red son los analizadores de tráfico. Los cuales monitorean el tráfico de red y descomponen los paquetes para obtener el valor de los campos de los protocolos conocidos por ellos. Como ejemplo de uno de ellos se muestra el resultado de una comunicación entre un computador con IP 192.168.0.1 y la tarjeta Easyweb con IP 192.168.0.30. En este caso desde el computador se envía un paquete ARP Request, al que la tarjeta contesta con ARP Reply, a continuación se envía una petición de Echo, a la que la tarjeta contesta con un mensaje Echo Reply. En la Figura 3-21 se puede ver el resultado de la captura.
Del mismo modo se presentan las transacciones entre el mismo computador y un servidor HTTP (Protocolo de transferencia de hipertexto) implementado en la tarjeta de desarrollo, en la Figura 3-22.
Figura 3-22 Transacción http
Interfaz de programación de aplicaciones
El código fuente que se suministra está contenido en dos archivos: cs8900.c y tcpip.c. El primero se encarga de la comunicación a través de las líneas físicas de datos entre el microcontrolador y el controlador ethernet, contiene funciones para inicializar el controlador (configurar modo de transmisión y dirección MAC), escribir registros, copiar tramas ethernet recibidas o para ser transmitidas entre la memoria principal y el buffer de datos del controlador y otras. Estas funciones son utilizadas por el segundo
archivo, tcpip.c para encapsular ciertas tareas en funciones más simples de invocar, pero no son utilizadas directamente por el software del usuario.
El archivo tcpip.c provee la interfaz de programación que el usuario utiliza para crear sus aplicaciones, contiene las siguientes funciones:
void TCPLowLevelInit(void) Configura el controlador ethernet, así
como el Timer_A del microcontrolador para su uso por el stack TCP/IP.
void TCPPassiveOpen(void) Al invocar esta función se crea un socket
para recibir conexiones, en el puerto especificado por la variable TCPLocalPort.
void TCPActiveOpen(void) Esta función intenta crear una conexión a
un servidor remoto con dirección indicada por el arreglo RemoteIP[4] y las variables TCPLocalPort y TCPRemotePort.
void TCPClose(void) Cierra la conexión activa.
void TCPReleaseRxBuffer(void) Después de leer el contenido del
buffer se invoca esta función para indicar al stack que puede sobrescribir con nuevos datos.
void TCPTransmitTxBuffer(void) Esta función indica al stack que
envíe la cantidad de datos indicados por la variable TCPTxDataCount desde el buffer de transmisión, que previamente fue preparado por el software del usuario.
Además de estas 6 funciones, el estado del stack se almacena en un registro de 8 bits que sirve para sincronizar el software del usuario con el stack TCP/IP. El significado de los bits es el siguiente:
0. SOCK_ACTIVE Este flag permanece en uno mientras el stack está
intentando realizar una conexión, en este estado no se procesan nuevos intentos por crear conexiones. Si el intento fracasa o se cierra la conexión el flag vuelve a cero.
1. SOCK_CONNECTED Mientras este flag esté en uno se puede transmitir
información a través de la conexión establecida.
2. SOCK_DATA_AVAILABLE Con este flag el stack le indica al programa del
usuario que hay la cantidad de bytes indicados por la variable TCPRxDataCount disponibles en el buffer de recepción para ser leídos, después de leer su contenido el usuario debe informar al stack que puede disponer del buffer para nuevos datos, invocando la función TCPReleaseRxBuffer.
3. SOCK_TX_BUF_RELEASED Con este flag el stack le indica a la apliación
del usuario que el buffer de transmisión está disponible para ser ocupado, y que la variable TCPTxDataCount puede ser alterada.
4 – 7 SOCK_ERROR Estos cuatro bits se ocupan para informar situaciones
de error mientras se realiza una conexión o se transmiten datos. Se definen 6 códigos de error:
• SOCK_ERR_OK: Sin error.
• SOCK_ERR_ARP_TIMEOUT: Sin respuesta a una petición de resolución de dirección MAC.
• SOCK_ERR_TCP_TIMEOUT: Sin respuesta a una petición de conexión a un servidor remoto.
• SOCK_ERR_CONN_RESET: Conexión terminada por el servidor o cliente remoto.
• SOCK_ERR_REMOTE: Error en la transmisión de datos TCP. • SOCK_ERR_ETHERNET: Imposible transmitir datos TCP por el
medio ethernet, el controlador informa que no tiene espacio libre para recibir información.
Dado que no existe un sistema operativo ejecutándose en el procesador, el software del usuario debe impedir que existan condiciones de bloqueo en el código, ya que para el correcto funcionamiento del stack TCP/IP debe llamarse a la función DoNetworkStuff() lo más regular y habitualmente como sea posible para que las distintas funciones del stack puedan ser ejecutadas cuando sea necesario para procesar datos de entrada o de salida o atender operaciones temporizadas. Un programa de usuario que utilice el stack TCP/IP provisto debe tener la estructura mostrada en la Figura 3-23.
No
Si DoNetworkStuff()
Abrir o cerrar conexión
Procesar datos de entrada o de salida
Otras funciones de programa de usuario
¿Terminar programa?
Finalizar
Figura 3-23 Diagrama de programa de usuario usando DoNetworkStuff()
Las principales limitaciones del stack TCP/IP proporcionado por Texas Instruments se relacionan con la poca cantidad de memoria RAM del procesador (2 KB), lo que impide tener más que un buffer de entrada y dos de salida, uno pequeño para información de paquetes (Ethernet, IP, ICMP, ARP) y otro más grande para transmisión de datos TCP. Esta limitación hace prohibitivo que el stack TCP/IP pueda manejar más de una conexión simultáneamente o que pueda reordenar paquetes que lleguen en desorden.
La limitación de una conexión simultánea se puede superar si el software del usuario realiza y mantiene las conexiones el menor tiempo
posible, así para un sistema que quiera realizar otra conexión el retardo no sería suficiente para producir una condición de time out. Además el sistema está concebido para funcionar en sistemas embebidos, en los que las aplicaciones usuales para un sistema de control o monitoreo a distancia no requieren la transmisión de grandes volúmenes de datos.
Conclusiones
La familia de microcontroladores MSP430 posee excelentes características para ilustrar las técnicas modernas de diseño con microcontroladores. La facilidad para utilizar los periféricos incorporados al programar en lenguaje C, que gracias a su arquitectura de 16 bits y la calidad de los compiladores resulta en código compacto y muy bien optimizado. Todo lo anterior permite que el usuario domine o al menos conozca las bases de las técnicas en un corto período de tiempo, lo que en un curso de introducción a técnicas de diseño resulta vital. De la misma forma el contar con una tarjeta de desarrollo como la EasyWeb con una gran cantidad de periféricos de variados tipos incorporados permite avanzar en la enseñanza sin perder tiempo en detalles de armado y con problemas de conexionado. Al mismo tiempo esta tarjeta de desarrollo utiliza las últimas técnicas de depuración y programación en línea que cada vez incorporan más dispositivos. Todo lo anterior tiene por objeto motivar a los usuarios a desarrollar aplicaciones cada vez más complejas, por ejemplo incorporar conectividad a redes ethernet y a Internet a un sistema basado en microcontrolador. Así el sistema formado por la tarjeta de desarrollo Easyweb basada en microcontrolador de la familia MSP430, unido al software y herramientas de programación y depuración se convierte en un medio excelente para introducir conceptos de técnicas avanzadas de diseño e interconexión de periféricos.
Referencias
[1] “MSP430x1xx Family User’s Guide” (SLAU049C), Revisión C, Texas Instruments, 2003, disponible:
http://www.ti.com/msp430.
[2] “Mixed Signal Microcontroller” (SLAS272E), Revisión E, Texas Instruments, 2003, disponible: http://www.ti.com/msp430. [3] “Features of the MSP430 Bootstrap Loader” (SLAAA089A),
Revisión A, Texas Instruments, 2003, disponible: http://www.ti.com/msp430.
[4] “General Purpose 6-Pin Phototransistor Optocouplers”, Fairchild Semiconductor, 2003, disponible:
http://www.fairchildsemi.com/ds/4N/4N37-M.pdf.
[5] “MICROWIRE Serial Interface”, National Semiconductor, 1992, disponible: http://www.national.com/an/AN/AN-452.pdf.
[6] “Synchronous Microcontroller Communication Interfaces: SPI and Microwire versus I²C”, Volker Soffel, Mayo 2003, disponible:
http://www.ucpros.com/work%20samples/Microcontroller%20C ommunication%20Interfaces%201.htm.
[7] “The I²C-Bus Specification”, Philips Semiconductors, 2000, disponible:
http://www.semiconductors.philips.com/acrobat/literature/939 8/39340011.pdf
[8] “24xx515 5125K Bit I²C CMOS Serial EEPROM”, Microchip Technology Inc., 2002, disponible:
http://www.microchip.com/download/lit/pline/memory/pnp/21 673b.pdf
[9] “I²C Interfacing of the MSP430 to a 24xx Series EEPROM” (SLAA115), Texas Instruments, 2000, disponible:
http://focus.ti.com/lit/an/slaa115/slaa115.pdf
[10] “Using the Crystal 8900A in 8-Bit Mode” (AN181), 2002, Cirrus Logic, disponible:
[11] “MSP430 Internet Connectivity” (SLAA137), Texas Instruments, 2000, disponible:
Anexo
Archivo de encabezado de lenguaje C conteniendo las direcciones de memoria de los registros y posiciones de memoria de los periféricos del microcontrolador MSP430F149 provisto por Texas Instruments
/******************************************************************** *
* Standard register and bit definitions for the Texas Instruments * MSP430 microcontroller.
*
* This file supports assembler and C development for * MSP430x14x devices.
*
* Texas Instruments, Version 1.7 *
********************************************************************/ /************************************************************
* STATUS REGISTER BITS
************************************************************/ #define C (0x0001) #define Z (0x0002) #define N (0x0004) #define V (0x0100) #define GIE (0x0008) #define CPUOFF (0x0010) #define OSCOFF (0x0020) #define SCG0 (0x0040) #define SCG1 (0x0080)
/* Low Power Modes coded with Bits 4-7 in SR */ #define LPM0 (CPUOFF) #define LPM1 (SCG0+CPUOFF) #define LPM2 (SCG1+CPUOFF) #define LPM3 (SCG1+SCG0+CPUOFF) #define LPM4 (SCG1+SCG0+OSCOFF+CPUOFF) /************************************************************ * PERIPHERAL FILE MAP ************************************************************/ /************************************************************ * SPECIAL FUNCTION REGISTER ADDRESSES + CONTROL BITS ************************************************************/ #define IE1_ (0x0000) /* Interrupt Enable 1 */ sfrb IE1 = IE1_; #define U0IE IE1 /* UART0 Interrupt Enable Register */ #define WDTIE (0x01)