Intro Stack Tcpip(1)

download Intro Stack Tcpip(1)

of 12

Transcript of Intro Stack Tcpip(1)

NOTA TCNICATema: Introduccin al Stack TCPIP de Microchip.(Distribucin Web)

`

Calle San Lorenzo 2755 Rosario (Santa Fe) (2000) ARGENTINA e-mail: [email protected] [email protected] Centro certificado por Microchip USA

La reproduccin total o parcial del presente trabajo es libre en todos los medios electrnicos.

IntroduccinEl Stack TCPIP de Microchip tiene varias versiones segn el escenario tecnolgico en el momento en que estas versiones fueron desarrolladas. Las ltimas versiones cubren los microcontroladores mas actuales con puerto Ethernet en el propio chip, sin embargo las versiones anteriores son mas livianas, ocupan menos memoria y son muy adecuadas por ejemplo para implementar la capa de red con el ENC28J60 y conectarnos a un micro mediante el protocolo SPI. Esto es particularmente interesante si consideramos que muchos micros (casi todos) tiene el puerto SPI por lo que podramos tener Ethernet en micros de bajo costo siempre que su memoria pueda contener las funciones necesarias del Stack que necesitemos. En Firtec hemos tomado como base de este ejemplo el Stack de Microchip y reorganizado sus mdulos para que sea mas fcil de entender e incluso compilar sin tener instalado Microchip Solutions.

TCP/IP con PICs.Se debe tener presente que en el Stack de Microchip no se encuentran presentes todas las capas que normalmente se encuentran en el Stack TCP/IP clsico de computadoras.

Capas del Stack TCP/IP de Microchip En general el Stack TCPIP implica un alto grado de abstraccin respecto del hardware y del propio Stack formado por una larga coleccin de archivos que configuran los respectivos mdulos del Stack. Podemos obviar el tratamiento individual de cada uno de los archivos involucrados en el proyecto ya que su funcionamiento es autnomo sin embargo hay alguno de estos archivos que si nos veremos obligados a retocar para corecto funcionamiento de nuestro proyecto. Nuestra adaptacin del Stack contiene 54 archivos vinculados al proyecto. Tambin necesitamos una configuracin particular de nuestro entorno de trabajo MPLAB.

Podemos ver aqu la estructura de nuestro proyecto

Una ves que nuestro proyecto ha sido compilado y nuestro micro programado con el cdigo podemos probar su funcionamiento haciendo un ping a la dir IP 192,168,1,201.

Veamos algunos de los archivos que son claves en nuestro proyecto y que si nos veremos obligados a reformar de acuerdo a nuestras necesidades.

El archivo Config.hDesde este archivo vamos incluir nuestra placa, el hardware que usaremos en este trabajo. Se define la direccin MAC, IP, mscara de red, pasarela, el nombre de nuestro dispositivo.#define #define #define #define #define #define DEFAULT_MAC_ADDRESS { DEFAULT_IP_ADDRESS { DEFAULT_NETMASK { DEFAULT_GATEWAY { DEFAULT_NS1 { DEFAULT_NETBIOS_NAME 0x00, 0x04, 0xa3, 0x00, 0x02, 0x00 } 192, 168, 1, 201 } 255, 255, 255, 0} 192, 168, 1, 1 } 192, 168, 1, 1 } "Firtec_TCP"

Desde este archivo vamos activar distintas funciones del stack.#define #define #define #define #define #define STACK_USE_ICMP STACK_USE_HTTP_SERVER STACK_USE_DHCP STACK_USE_FTP_SERVER STACK_USE_ANNOUNCE STACK_USE_NBNS // // // // // // Mdulo del Ping Servidor HTTP activo Cliente DHCP activo Servidor FTP activo Cliente para Ethernet Discoverer Servidor del Nombre NetBIOS activo

El password y el usuario para el FTP.#define FTP_USERNAME "firtec" #define FTP_PASSWORD "microchip" #define FTP_USER_NAME_LEN (10)

El puerto para nuestro servidor HTTP #define HTTP_PORT (80)

El archivo Hardware.hAqu se encuentran las definiciones y configuracin del hardware usado en el proyecto. Podemos encontrar por ejemplo la configuracin de pines. La frecuencia del reloj el tcy, donde van conectados los perifricos como el ENC28J60 el LCD botones LEDs, ect.

El archivo main.cAqu estn las funciones Callback, funciones que mantienen el dialogo entre nuestro hardware y el propio sitio web, la configuracin de los fusibles de nuestro microcontrolador, etc.#pragma config OSC=HSPLL, PWRT=ON, BOREN=OFF, WDT=OFF, MCLRE=ON, LVP=OFF

MPFSMicrochip PIC File System es el sistema de archivos que utiliza el micro para leer la pagina web. Una vez que tenemos nuestro sitio terminado con los archivos html, jpg o gif debemos convertirlos al sistema MPFS para luego, poder cargarlos en el micro.

La aplicacin MPFS.exe convierte el conjunto de archivos que componen la pagina web a dos formatos posibles: .bin (Para cargar el website en la memoria EEPROM externa). .c (Para cargar el website en la memoria de programa). La sintaxis de uso para MPFS seria: mpfs dir_origen archivo destino /b si quiero un binario para memoria exterior /c si coloco el sitio en memoria FLASH. La actualizacin de los sitios via FTP solo es posible si el sitio est en memoria exterior. Se debe tener presente que la construccin de los sitios web embebidos dentro de la memoria de programa de los microcontroladores consume mucha memoria, PICs como el 18F452, 18F4550, etc, no son muy adecuados por la poca memoria que poseen, para trabajar con webs en memoria de programa, debemos pensar en micros como el PIC18F4620 como mnimo ya que tiene los recursos de memoria para implementar webs en memoria FLASH.

Web en memoria FLASH vs. EEPROMLa decisin de usar la memoria FLASH o una memoria exterior para contener el sitio web depende de los requerimientos de memoria que tenga nuestra aplicacin. Un sitio web bsico puede consumir rpidamente la memoria del controlador es por esto que se

decide alojar el sitio en una memoria exterior rpida como las modernas 25LC512/1024. Dada la gran velocidad de estas memoria nuestro sistema no se ve afectado por mermas en el rendimiento. El servidor HTTP usa el archivo index.htm como pgina Web por defecto. Todas las aplicaciones deben incluir un archivo index.htm como parte de la imagen MPFS. De igual manera es de gran importancia asegurarse que ninguno de los nombres de otras pginas Web a usar contenga alguno de los siguientes caracteres alfanumrico: Comillas simples o dobles ( y ) Corchetes y llaves ( [, {, ] y } ) Corchetes angulares ( < y > ) El signo de nmero ( # ) El signo de porcentaje ( % ) El smbolo pipe ( | ) La barra invertida ( \ ) El acento circunflejo ( ^ ) La tilde ( ~ )

Si un archivo contiene cualquiera de estos caracteres, la pgina Web correspondiente se volver inaccesible y ninguna advertencia previa ser mostrada. El servidor tambin contiene una lista de los archivos que son soportados, usando esta informacin para avisar al explorador remoto como interpretar un archivo en particular,basado en una extensin de un archivo de tres letras. Por defecto el servidor soportalos archivos .txt, .htm, .gif, .cgi, .jpg, .cla y .wav. Una aplicacin no puede usar tipos de archivo que no estn incluidos en esta lista.

TECNOLOGAS WEBEn la actualidad existen una gran variedad de tecnologas, protocolos, herramientas y software que son utilizadas para una infinidad de aplicaciones. El conjunto de todo ello es conocido como Tecnologas Web. Estas tecnologas son desarrolladas por distintas empresas, organizaciones o pblico en general, sin embargo todas son supervisadas por el World Wide Web Consortium (W3C), que desarrolla protocolos,estndares y lineamientos para asegurar el correcto funcionamiento y crecimiento de la Web. Algunas tecnologas Web ms utilizadas son las siguientes: HTTP CGI HTML Dinmico JavaScript AJAX CSS2.10.1 HTTP CGI Un servidor HTTP puede dinmicamente alterar pginas y sustituir informacin en tiempo real, tal como status de entrada y salida. Para incorporar informacin en tiempo real, el archivo CGI correspondiente debe contener una cadena de texto %xx, donde el carcter % sirve como cdigo de control y xx representa una variable identificadora de dos dgitos. El valor de variables tiene un rango de 00-99. Cuando el servidor HTTP encuentra esta cadena de texto, se remueve el carcter % y llama la funcin HTTPGetVar(). Esta funcin realiza un llamado HTTP, cuando el servidor HTTP encuentra una cadena %xx en

una pgina CGI en servicio se llama a esta funcin. HTTPGetVar() es usada en la aplicacin principal del usuario y transfiere una variable de estatus especfica de HTTP.

TECNOLOGA AJAXEl trmino AJAX significa Asynchronous Java Script And XML (Javascript y XML Asncrono), y es una coleccin de diversas tecnologas que permiten a los usuarios enviar peticiones asncronas a un servidor Web a travs de pequeas llamadas de JavaScripts. Cuando se usan pginas Web con tecnologa AJAX se va ms all de las aplicaciones tradicionales de cliente/servidor. Una de la mayores aplicaciones de AJAX es que el usuario elimina la recarga completa de una pgina. Es decir no tiene que esperar la actualizacin de toda la pgina, solo una parte de la pgina es actualizada con los datos solicitados a un servidor. De esta manera la tecnologa AJAX ejecutada en el navegador mejora la forma de usar aplicaciones Web debido a sus llamadas asncronas hechas al servidor. Esto significa que cuando un usuario solicita una peticin al servidor, la aplicacin espera los resultados arrojados por los procedimientos del servidor. As, la pgina Web muestra dinmicamente la informacin en una seccin de ella, definida previamente por el desarrollador.

CREACIN DE LAS PGINAS WEB PGINAS CGILas siglas CGI proceden del ingls Common Gateway Interface. Sin profundizar demasiado en el significado del acrnimo CGI, podemos decir que se trata de un mecanismo que permite que un servidor web invoque la ejecucin de un programa en el propio servidor, y le pase ciertos parmetros de entrada obtenidos de una pgina HTML y contenidos en campos de un formulario. Recoger informacin en la pgina y enviarla al servidor: por ejemplo, espera que el usuario oprima un boton para cambiar el estado de un LED. Presentar el valor de una temperatura de forma dinmica en una pgina: almacenar el dato en una base de datos y mostrarlos de forma dinmica, en funcin de ciertos datos introducidos por el visitante en un formulario. Actualmente, el uso de los CGIs en los entornos informticos ha decado con la llegada de nuevas tecnologas (como el lenguaje Java y los ASPs). Sin embargo, para determinados propsitos con microcontroladores son todava el modo ms simple y prctico de trabajar con webs dinmicas. Las pginas CGI son la interfaz entre nuestra web y la Electrnica, a travs de ellas las variables Webs se conectan con el Hardware. Dentro del servidor HTTP hay un pequeo mdulo CGI con el propsito de que el servidor entienda estas pginas que intercambian informacin en tiempo real con el microcontrolador. Este pequeo mdulo permite tener una gran cantidad de variables que permiten interactuar con el sistema. El microcontrolador dispone de una pequea cantidad de memoria RAM, sin embargo esta cantidad de memoria es suficiente para nuestras aplicaciones. Este mdulo permite interactuar con el usuario mediante la funcin GET contenida en los navegadores. No vamos a desarrollar aqu como hacer CGIs (necesitaramos mucho, mucho tiempo). Nuestro propsito es aprender a utilizar los que tenemos a nuestra disposicin. Tomemos como ejemplo la pagina index.htm,el punto de entrada del web server que usaremos como ejemplo en este curso. El archivo index.htm est acompaado de index.cgi, este ltimo es el que enviar a nuestro micro las acciones efectuadas en los botones LED1,.....LED4.

Tambin tenemos el archivo status.cgi que es el encargado de actualizar en nuestra web los indicadores LEDs, IP Packet Conters, etc. Es decir entonces que las acciones ocurrirn de la siguiente forma, cuando el usurario oprima uno de los botones en la web, esta informar del cambio a travs del archivo index.cgi, el microcontrolador que cambiar el estado del pin correspondiente y le enviar a nuestra pgina informacin para que actualice los binarios de LEDs, esto lo hace con status.cgi. Todo este gran intercambio de informacin se realiza de manera dinmica (no es necesario actualizar la pgina con F5 para ver los cambios) esto debido a la tecnologa AJAK, sin embargo est claro que debe existir una correspondencia entre las variables mostradas en la web y las que maneja nuestro controlador.

Para entender como funciona esto veamos la siguiente imagen.

Vemos que por ejemplo el binario LEDs esta en realidad formado por %00 %01 %10 %11 %12 y dentro de nuestro archivo main.c encontramos:#define #define #define #define #define VAR_LED0 VAR_LED1 VAR_LED2 VAR_LED3 VAR_LED4 (0x00) (0x01) (0x10) (0x11) (0x12)

etc .......................

He ah la definicin dentro del main de cada uno de los bits y en la pagina el lugar donde se mostrarn, el estado de cada bit ser substituido segn el nombre declarado por su valor hardware. El canal analgico por ejemplo definido de la siguiente manera:#define VAR_ANAIN_AN0 (0x02)

Podemos ver en la web donde se mostrar. Tambin tenemos las declaraciones de los botones LED1,........LED4#define #define #define #define CMD_LED1 CMD_LED2 CMD_LED3 CMD_LED4 (0x0) (0x1) (0x2) (0x3)

Para detectar el momento en que el usuario oprime uno de los botones tenemos que mirar dentro del archivo index.htm, vemos unas lneas de cdigo que haciendo referencia a los valores declarados en el main.c recogen el estado de estos botones .

Lneas dentro del archivo index.htm. . . . Comando

Estado deLEDs

Identificadores en el Web Server (main.c) etc, etc Funcin del Navegador Boton (input) se detecta el evento onclick para cambiar de estado los leds.

#define CMD_LED1(0x0)

Identificador en la pagina web.

Lneas dentro del archivo Status.CGI. . . LEDs: %12 %11 %10 %01 %00

Identificadores en el Web Server (main.c) ej. #define VAR_LED4 (0x12)

Dentro del Web Server hay don funciones fundamentales para la comunicacin con nuestra pagina, HTTPExecCmd y HTTPGetVar, la primera es la encargada de detectar cambios en nuestra pagina y transmitir esto a nuestro micro, esta funcin interacciona con el hardware de acuerdo a lo que est sucediendo en la pagina web. Su prototipo es el siguiente: HTTPExecCmd(BYTE** argv, BYTE argc) Donde **argv es un puntero a un arreglo bidimensional y argc es el nmero de parmetros enviados. Dentro de esta funcin encontramos por ejemplo:command = argv[0][0] - '0'; // Primer elemento del primer vector // Desde el archivo cgi interpreto el // comando de lo que se debe hacer.

switch(command) { case CGI_CMD_DIGOUT: var = argv[1][0] - '0'; // Primer elemento del segundo vector

switch(var) { case CMD_LED1: LED1_IO ^= 1; break; case CMD_LED2: LED2_IO ^= 1; break; case CMD_LED3: LED3_IO ^= 1; break; case CMD_LED4: LED4_IO ^= 1; break;

// es pasado a su valor real (ascii - 0x30) // Discrimino la accin de acuerdo al valor // Nombre = 0x00 // Cambio estado del LED // Nombre = 0x01 // Cambio el estado del LED // Nombre = 0x02 // Cambio el estado del LED // Nombre = 0x03 // Cambio el estado del LED

} memcpypgm2ram(argv[0],COMMANDS_OK_PAGE, COMMANDS_OK_PAGE_LEN); break; . . .

Primero se decodifica el comando, pueden existir varios comandos dependiendo del trabajo de nuestra aplicacin. Luego que se decodifica el comando se pasa a la accin de este comando, en el caso que estamos viendo el comando dice que debe cambiar el estado de un pin, Ok cual pin? Lo siguiente es decodificar el pin que se debe cambiar para encender o apagar el correspondiente LED. La funcin HTTPGetVar es la encargada de actualizar los datos en la pagina de acuerdo al estado de nuestro hardware. Su prototipo es como sigue: WORD HTTPGetVar(BYTE var, WORD ref, BYTE* val) Donde: Byte var es el identificador web %xx . Word ref es donde se informa si es el primer llamado y se indica cuando es el ltimo mediante el envo de HTTP_END_OF_VAR. Byte val es el byte transmitido, esta funcin solo transmite bytes es por esto que es necesario indicar cuando se ha finalizado de trasmitir datos. Dentro de esta funcin encontramos por ejemplo:. . . switch(var){ case VAR_LED0: *val = LED0_IO ? '1':'0'; break; case VAR_LED1: *val = LED1_IO ? '1':'0'; break; case VAR_LED2: *val = LED2_IO ? '1':'0';

// Se identifica la variable // Se cambia el estado de los bits en la // web dependiendo de su indentificador.

break; case VAR_LED3: *val = LED3_IO ? '1':'0'; break; case VAR_LED4: *val = LED4_IO ? '1':'0'; break; . . . return HTTP_END_OF_VAR;

// Se indica que termin!!

(Continuar)