Dudas WIZ810MJ (transmisión de datos)

Hola buenas. Como ya he comentado en algún post estoy desarrollando un sistema con un MSP430 2274 y un módulo WIZ810MJ.

Bien, el caso es que estoy programando los datos que quiero enviar a través de Ethernet (que salga por la conexión RJ-45).

Según leo en el datasheet, al conectarlo por SPI como lo he hecho, solo hay dos posibles operaciones:

Command OP-Code Field Address Field Data Field
Write operation 0xF0 1111 0000 2 bytes 1 byte
Read operation 0x0F 0000 1111 2 bytes 1 byte

Tal como veis, se envía o una orden de escribir, o una orden de leer.

El caso es, que no se muy bien que es cada cosa.

Yo entiendo que lo primero que se manda, el OP-code, es para decirle si es una operación de escritura o lectura. Lo segundo es la dirección. Vale, primera duda: Esta dirección, es en la que yo mando "escribir" o "leer", no? es decir, si yo tengo conectado mi módulo con un cable ethernet a mi ordenador por decir algo, si yo le mando escribir, me escribirá en la dirección de mi ordenador lo que yo le digo que quiero que escriba no? que esa es la información del Data Field.

Vale, si esto es así, es decir, que yo cuando hago la orden de escribir me lo escribe en la dirección que he indicado en la parte del Address Field, mi pregunta es: Como se la Address Field? Quiero decir, como transformadorrmo la dirección IP de mi pc a 2 bytes? O como funciona. Esta es la parte que más dudas me trae.

Por último, el buffer de transmisión de datos del MSP430 que utilizo es de 8 bits (UCB0TXBUF). Para enviar esta frase, que tendría que hacer, usar un código tal que así?:

UCB0TXBUF = 0xF0 //Op-Code
UCB0TXBUF = 0xAA // Primer byte de la dirección, a ver si me lo podéis aclarar como lo obtengo ;)
UCB0TXBUF = 0xAA // Segundo byte de la dirección,
UCB0TXBUF = 0x21 // Byte con la información que quiero enviar.


Sería algo así?


Gracias!
 
Hola, que tal, por lo que veo estas un poco confundido con el uso del WIZ810MJ.

El WIZ810MJ es un modulo, asi que nos centraremos en el integrado que este usa: el WIZ5100.

Es necesario que bajes el datasheet del integrado, para que puedas trabajar, aqui te dejo la liga de la hoja de datos a la que hare referencia en este comentario.

http://www.wiznet.co.kr/rg4_board/down.php?&bbs_code=en_pds_1&ss[p_num]=25&bd_num=15828&key=0&mode=down

Solo como recordatorio, este chip trae integrado el stack de TCP/IP en hardware, por lo tanto tu no tienes que estar formando los paquetes que se envian, tu solo debes de colocar los datos necesarios en las localidades necesarias y el chip se encarga de hacerlo.

Bien como dices es correcto, solo hay 2 operaciones: leer y escribir.

Las direcciones a las que hacen referencia las operaciones leer y escribir corresponden con las de un mapa de memoria, tal y como el que se muestra en la pagina 13.

El mapa de memoria tiene 4 areas principales:

Common Registers: Registros de Configuración del integrado. Empieza en 0x0000.
Socket Registers: Registros para los Sockets. Empieza en 0x0400.
TX Memory: Area de Memoria donde escribiremos los datos a enviar. Empieza en 0x4000.
RX Memory: Area de Memoria donde recibiremos los datos. Empieza en 0x6000.

Entre la pagina 14 y 18 veras la descripción de los registros comunes y de sockets con su respectiva dirección.

Por ejemplo para fijar la IP del WIZ5100, hay que escribir los siguientes registros:

Source IP Address

0x000F (SIPR0)
0x0010 (SIPR1)
0x0011 (SIPR2)
0x0012 (SIPR3)


supongamos que la IP que quieres asignar al dispositivo es: 192.168.100.1

entonces debes llenar los bytes anteriores con esos valores:


0x000F (SIPR0) - 192
0x0010 (SIPR1) - 168
0x0011 (SIPR2) - 100
0x0012 (SIPR3) - 1

Remitiendonos al codigo que presentas tu seria algo asi:

UCB0TXBUF = 0xF0 //Op-Code
UCB0TXBUF = 0x00 // Dirección de SIPR0 parte Alta
UCB0TXBUF = 0x0F // Dirección de SIPR0 parte Baja
UCB0TXBUF = 0xC0 // Equivalente a 192

UCB0TXBUF = 0xF0 //Op-Code
UCB0TXBUF = 0x00 // Dirección de SIPR1 parte Alta
UCB0TXBUF = 0x10 // Dirección de SIPR1 parte Baja
UCB0TXBUF = 0xA8 // Equivalente a 168

UCB0TXBUF = 0xF0 //Op-Code
UCB0TXBUF = 0x00 // Dirección de SIPR2 parte Alta
UCB0TXBUF = 0x0F // Dirección de SIPR2 parte Baja
UCB0TXBUF = 0x64 // Equivalente a 100

UCB0TXBUF = 0xF0 //Op-Code
UCB0TXBUF = 0x00 // Dirección de SIPR3 parte Alta
UCB0TXBUF = 0x0F // Dirección de SIPR3 parte Baja
UCB0TXBUF = 0x01 // Equivalente a 1

Esto es para escribir la IP del dispositivo, pero lo mismo deberas hacer para escribir otros parametros de configuración, MAC del dispositivo, Gateway por default, etc etc.

Para establecer comunicación con otro dispositivo en la red, lo deberas hacer por medio de sockets. Estos tambien se configuran igual. Y la parte mas importante, escribir y leer datos en las areas de memoria.

Te recomiendo leas completa la hoja de datos una y otra vez... ahi viene la solución a todo.

Saludos...
 
Vale, perfecto, efectivamente, estaba confundido.

Pero tengo alguna duda más. Yo por ejemplo quiero emitir por UDP. Todas las funciones que las explican con un código como este:

{
START:
/* sets UDP mode */
Sn_MR = 0x02;
/* sets source port number */
/* ※ The value of Source Port can be appropriately delivered when remote HOST knows it. */
Sn_PORT = source_port;
/* sets OPEN command */
Sn_CR = OPEN;
/* Check if the value of Socket n Status Register(Sn_SR) is SOCK_UDP. */
if (Sn_SR != SOCK_UDP) Sn_CR = CLOSE; goto START;
}

Esto donde iría? En el MSP430? Esta parte no la entiendo mucho.

Por lo que he entendido, yo transmito primero tal y como tu me has puesto toda la información de la IP del módulo, MAC, puerta de enlace, etc. Luego, activo el modo UDP. Pero aquí ya me pierdo. Que tengo que hacer con ese código? He de emitir datos del módulo al MSP430 para poder hacer todos esos procesos?

Muchísimas gracias
 
Tal y como los has dicho primero has de escribir la información del modulo (dirección IP, MAC, Gateway, Subnet Mask, etc) tal y como viene en la pagina 37 del documento referido en el post anterior.

El WIZ5100 tiene 4 sockets, es decir cuatro canales por donde puede comunicarse, cada socket puede configurarse como TCP, UDP, IP_RAW o MAC_RAW, y ademas como cliente o servidor dependiendo del socket.

El codigo que estas adjuntando va en el MSP430 y es para configurar un socket "n" como UDP. Donde n puede ser 0,1,2 y 3. En la pagina 50 vine un diagrama donde se ve claramente como es el proceso de envio de datos en UDP.

Nuevamente es necesario que leas una y otra vez la hoja de datos, hasta que le entiendas. Ahi vienen resueltas todas estas dudas. Hay temas no tan sencillos (como el manejo de la memoria de RX y TX) que debes resolver con solo esta hoja de datos, ya que no hay mucha información disponible.

Si hay conceptos de redes que llegases a no entender, los debes buscar en bibliografia del area.

Antes de que sigas, es muy importante establecer comunicación con el modulo a través de SPI, para que puedas comprobar que los datos que estes escrbiendo esten llegando al modulo.

Como recomendación es que pongas todos los datos esenciales del modulo (Pag. 37) y actives los pings, (esto se hace a traves del registro mode, poniendo a 1 el bit4 de ese registro), así podras hacer ping al dispositivo y al mismo tiempo ver que los datos que le envias le han llegado.

En la pagina de wiznet vienen codigos de ejemplo para AVR en C, si bien tu manejas el MSP430, te puede servir de mucho.. para que te des una idea de como debes construir tu propio codigo.
 
No se ni como agradecerte toda la información. La verdad es que esto es complejo pero poco a poco se sacan las cosas.

Me bajaré los ejemplos en C y si alguna duda me surge miraré el datasheet. Si tras horas no consigo sacarlo, lo comentaré por aquí. Muchas gracias!
 
Atrás
Arriba