Autor Tema: Comunicación entre dispositivos ENC28J60  (Leído 7395 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Comunicación entre dispositivos ENC28J60
« en: 13 de Mayo de 2019, 16:47:25 »
Buenas, dispongo de varias placas que disponen de ENC28J60, en principio estaban pensadas para añadirles un webservice.

Pero ahora tengo la necesidad de que se comuniquen mediante el ethernet, algo parecido a como actuaría un maestro esclavo. ¿Es posible comunicar las placas mediante los ENC28J60?

Todavía no me he puesto a programarlos pero como no tengo experiencia con ethernet primero pregunto por si estoy diciendo una tonteria.

un saludo.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #1 en: 13 de Mayo de 2019, 16:57:02 »
Pero ahora tengo la necesidad de que se comuniquen mediante el ethernet, algo parecido a como actuaría un maestro esclavo. ¿Es posible comunicar las placas mediante los ENC28J60?

Si, con la necesidad de cargarle el stack TCP/IP al micro. Luego usas lo que deseas sobre ese stack (el protocolo que quieras)

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #2 en: 14 de Mayo de 2019, 03:25:27 »
Ok gracias, o sea que lo complicado sera implementar la pila TCP/IP. Pensaba que estaba integrada en el propio ENC28J60.

un saludo.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #3 en: 14 de Mayo de 2019, 06:34:05 »
Ok gracias, o sea que lo complicado sera implementar la pila TCP/IP. Pensaba que estaba integrada en el propio ENC28J60.

Exacto el ENC28J60 es solo el MAC/PHY, una ves implementado la pila TCP/UDP/IP ya solo necesitas tu capa de aplicación para saber COMO es que lo vas a enviar (por ejemplo MQTT/SNMP como hizo una persona hace poco)... O crear tu propia capa con su protocolo. Esto ya es decisión tuya.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #4 en: 15 de Mayo de 2019, 03:10:34 »
Buenas!

He encontrado el siguiente ejemplo en la siguiente página https://www.openimpulse.com/blog/products-page/product-category/enc28j60-ethernet-module/

El ejemplo que he utilizado es para STM32, y en la carpeta se encuentran los archivos, se encuentran los archivos ENC28J60. h y ENC28J60.c

¿Estos archivos servirían como ejemplo de pila?
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #5 en: 15 de Mayo de 2019, 07:04:43 »
Seguramente tenga una pila ahí.... no se con que micro vas a estar trabajando. Ojo que no todo es solamente el TCP/UDP/IP, luego por ejemplo para obtener el IP automaticamente necesitas DHCP que ahi no estan implementados (al menos no lo parece con los archivos)

Hay tambien algunos ejemplos de STM32 (o tal ves me confundo con TI) trabajan con el stack lwip, al menos recuerdo haber bajado algunos donde los mismos tenian un port segun el micro que utilices...
Es decir la parte del stack era el lwIP pero vos te quedabas con el archivo de port que necesitaras... si usabas el ENC, seleccionabas ese archivo, y se creaba un port para que se comunique por SPI. Si tenia el MAC o MAC/PHY interno, entonces seleccionabas otro port que en ves de enviarlas por SPI usaba el modulo interno del micro.

Por ejemplo:

https://github.com/matwey/lwip-enc28j60

Y tal ves necesites agregar alguna placa, no lo vi demasiado.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #6 en: 15 de Mayo de 2019, 08:56:21 »
ok ok gracias.

Estoy un poco perdido en este tema ya que nunca he utilizado una comunicación ethernet.

Voy a trabajar con un micro de Renesas y para ello lo comunico con el ENC de microchip con este esquemático:

 

* Sin título.png
(48.45 kB, 2012x1022 - visto 995 veces)


Lo que quiero es comunicar una placa con otra como si por ejemplo lo hiciera por uart.

Por lo que entiendo, adaptando el código este que he pasado al micro de renesas tendria la pila pero con lo ultimo que me has dicho me he perdido, ¿una explicación para tontos de cual es el principio de funcionamiento de este tipo de comunicación o lo que necesitas?
¿Por que necesito una IP automatica? no se la puedo asignar yo como haría con una direccion de bus cualquiera?

un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado AccioRw

  • PIC16
  • ***
  • Mensajes: 165
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #7 en: 15 de Mayo de 2019, 12:43:42 »
Imagino que no tendrás posibilidad de cambiar ese micro por otro, de todos modos aprovecho el tema yo también para preguntar  que estoy bastante perdido en todo esto porque tarde o temprano me tocará usarlo en e ltrabajo… así que mi pregunta sería si alguno conoce algún transceptor Ethernet pero que ya incluya la pila TCP/UDP/IP que descargue de toda la tarea al micro principal, como haría en caso del WiFi los ESP8266 o los ESP32.
Todos los que he visto de Microchip en el datasheet poniendo en la búsqueda TCP no encuentra nada así que entiendo que la mayoría de los de microchip no lo implementan.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #8 en: 15 de Mayo de 2019, 17:15:44 »
Citar
Por lo que entiendo, adaptando el código este que he pasado al micro de renesas tendria la pila pero con lo ultimo que me has dicho me he perdido, ¿una explicación para tontos de cual es el principio de funcionamiento de este tipo de comunicación o lo que necesitas?

Para comprender y muy basico, lamento el que este leyendo esto y tenga conocimientos, pero es una explicacion para que quede masomenos parado

Vos tenes varias capas, que respetan al menos o proximamente a las capas OSI, el MAC/PHY es lo que gobierna la parte "fisica" de la transmision, el PHY seria de forma burda el driver de salida y el MAC el controlador (que enviar, que recibir) del mismo. En si es aca donde cambia de una red a otra, ejemplo el Wi-Fi posee simplemente otro formato de MAC/PHY, el cual el MAC posee algunos que otros parametros de deteccion de error, etc

En fin, supongamos que vos necesitas enviar un dato. Hay 2 protocolos principales que son TCP y UDP, resumiendolos el TCP es con aviso de entrega y reenvio ante un fallo. Y el UDP es enviar y que tengas suerte.

Entonces vos envias el dato por UDP por ejemplo. La capa de UDP (Transport) le va a agregar informacion a tu dato, que va a ser util para la capa UDP del receptor.
Pasando esta capa, la capa IP (Internet) va a agregar mas datos, que son el IP de destino, origen, entre otras cosas.
Luego pasa a la MAC ( Link ), la cual va a preocuparse por la parte fisica del envio, aca tambien agrega informacion, como MAC destino, MAC inicio, CRC, etc
Y finalmente el PHY quien actua sobre el cable, antena, etc

Una imagen que lo resumen es :



Entonces es el MAC/PHY quien define por donde se envia (cable/aire/optico), todo lo demas son datos... ESOS datos es lo que envias por SPI, es decir mirando la imagen arriba, eso que ves como capa INTERNET es lo que enviarias vos al ENC o a tu modulo Ethernet de un micro.

Citar
¿Por que necesito una IP automatica? no se la puedo asignar yo como haría con una direccion de bus cualquiera?

La pregunta es ... donde lo pensas usar y que cantidad.. Si yo tuviera un sensor que se conecta a Ethernet, lo llevaria con cable a un SWITCH (y de aca a un servidor) o router. NO usaria un cable directo. Si buscas comunicarte con un cable directo avisame y reformulamos todo de vuelta ( mira al final )
El router de por si ya posee DHCP.. Y voy a ir con un ejemplo...

Tu computadora seguramente esta conectada por cable, sino pensalo asi.
El router es el servidor DHCP, es quien define el rango de IPs y entrega segun necesidad. Vos encendes la compu, se auto conecta al router y como no tiene IP, mediante DHCP le pide al router que le de uno, el router busca cual esta disponible y se lo da. Genial, no tengo que pensar en nada mas, ya tengo una IP. Quiero conectar otro equipo? No hay problema, le da otra IP libre.
¿Cual es la desventaja de esto?
Un equipo jamas tendria un mismo IP, ya que depende del orden de conexion y decision del router

¿Que pasaria si poseo IP fija? Puedo tener las siguientes ventajas/desventajas:
- Si tengo muchos equipos necesito darle un IP a cada uno ( reprogramarlos o con un switch en la placa).
- Si no tiene el mismo rango de IP/subnet del router no te vas a poder comunicar (mas complicado de solucionar con un switch en la placa)
- Lo bueno que tenes es que siempre esa placa va a tener ese IP, incluso en un router podes delimitar cual se den por DHCP asi dejar una franja de 100 direcciones por ejemplo para tus placas
- 2 placas con el mismo IP fijo produciendo problemas en la red.

Todo depende de que estas buscando.... Si por ejemplo es 1 placa nomas y configuras vos las conexiones por ethernet, entonces pones un IP fijo.

Citar
así que mi pregunta sería si alguno conoce algún transceptor Ethernet pero que ya incluya la pila TCP/UDP/IP que descargue de toda la tarea al micro principal, como haría en caso del WiFi los ESP8266 o los ESP32

No, no conozco y no creo que exista, puede que lo tenga en una ROM interna, pero no realizada en hardware. El problema es que ante un bug eso se vuelve imposible de cambiar. Por eso no creo que alguien lo haga. Los ESP8266 tenes una buena cantidad de firmware para el Wi-Fi, que seguramente esten los stacks ahi, explicado de otra forma, el IDE o la forma de programar hacen que no lo veas como un archivo aparte.
Ademas esto te permite cargar únicamente lo que vos necesites.

Lo que si hay son micros con MAC/PHY juntos, sin necesidad de buscar un PHY separado. Pero eso no te salva de los magneticos :P

Citar
Lo que quiero es comunicar una placa con otra como si por ejemplo lo hiciera por uart.
Si vos lo que queres hacer es comunicarte como si fuera un RS232 entonces no necesitas un stack TCP/IP

Si leiste lo anterior el MAC me servia para la comunicacion de equipo a punto a punto sin ninguna red y por cable esto no tiene sentido.

Entonces para un cable directo solo necesito la MAC/PHY que lo tengo en el ENC, PERO necesitas programar/inicializar el ENC

Y es acá donde se te "complicaria", deberias leer o buscar un codigo de incializacion del ENC28J60, esto es, seteo de buffers de rx y tx, es lo mas facil que se me ocurre.
Por suerte con ese codigo + el paso a paso para iniciar el MAC y el PHY que te da el datasheet (en caso de que quieras cambiar algun parametro del codigo de incianilizacion), habilitar el calculo de CRC automatico. Lo unico que deberias "llenar" en los buffer es:

MAC destino - 6 bytes  ( usar FF:FF:FF:FF:FF:FF que es el multicast, ya que tenes 1 solo no va a importar)
MAC inicio - 6 bytes - direccion a tu gusto
Largo de datos - 2 bytes - siempre que te mantengas a menos de 1500 esto va a representar el largo.
Payload o datos a enviar (cantidad de bytes dadas antes)


Y .... darle la orden de envio :3

Ni siquiera tenes que pensar en el padding.... Cuando recibas algo podes verificar la direccion de MAC de inicio ( si le pones todos por igual) asi determinar que siempre esten conectadas con tus placas, por si conectan el cable a un router. Asi omitis todo lo que no sea que venga de esa direccion MAC.


Omiti millones de detalles y muchas explicaciones son re pobres para ser realista, pero mejor asi y que sea simple de entender....
« Última modificación: 15 de Mayo de 2019, 17:27:49 por KILLERJC »

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #9 en: 16 de Mayo de 2019, 02:41:25 »
no va ser un cable directo, se utilizara el cable de la instalación del edificio, que supongo que tendrá por medio routers y de todo, voy a conectar unas 32 placas al final, pero claro para hacer las pruebas y eso primero simplemente una que envie y otra que reciba, hasta que no consiga eso poco más puedo hacer.

Ok muchas gracias, con esto que me has puesto ya puedo seguir indagando y avanzando, voy a estudiar los ejemplos que me dan algunos fabricantes que usan el ENC28J60 y buscar códigos funcionales para adaptarlos a mi micro.

Por lo que me has comentado mucho mejor que me den la IP en vez de la física.

a ver si lo he entendido bien, resumiendo mucho lo que has dicho, yo tengo ya la capa de aplicación que va ha ser mi protocolo propio, tengo que buscarme una pila tcp/ip o una UDP, pasar mis datos por esa pila y después directos ya al ENC26J60 que es el que se encarga de enchufarlo a la red mediante el PHY y MAC. No se si la capa de internet me ha quedado muy clara, de esa me tengo que preocupar o mi preocupación acaba después de la pila?

¿Supongo que habrá, pilas ya programadas para que tu las adaptes a tu micro, pero como se cual es una tcp/ip o una UDP? cual me recomiendas que busque?

un saludo y muchas gracias
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado AccioRw

  • PIC16
  • ***
  • Mensajes: 165
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #10 en: 16 de Mayo de 2019, 04:22:14 »
No, no conozco y no creo que exista, puede que lo tenga en una ROM interna, pero no realizada en hardware. El problema es que ante un bug eso se vuelve imposible de cambiar. Por eso no creo que alguien lo haga. Los ESP8266 tenes una buena cantidad de firmware para el Wi-Fi, que seguramente esten los stacks ahi, explicado de otra forma, el IDE o la forma de programar hacen que no lo veas como un archivo aparte.
Ademas esto te permite cargar únicamente lo que vos necesites.

Lo que si hay son micros con MAC/PHY juntos, sin necesidad de buscar un PHY separado. Pero eso no te salva de los magneticos :P



Muchas gracias, ya entiendo por qué me costaba tanto encontrarlo con ello ya hecho.
Intentaré ver algunos ejemplos básicos con el ENC28J60 que es de los mas comunes así veo bien como trabaja y en que se basa y apartir de ahí intentaré adaptarlo

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #11 en: 16 de Mayo de 2019, 06:59:52 »
Por lo que me has comentado mucho mejor que me den la IP en vez de la física.

a ver si lo he entendido bien, resumiendo mucho lo que has dicho, yo tengo ya la capa de aplicación que va ha ser mi protocolo propio, tengo que buscarme una pila tcp/ip o una UDP, pasar mis datos por esa pila y después directos ya al ENC26J60 que es el que se encarga de enchufarlo a la red mediante el PHY y MAC. No se si la capa de internet me ha quedado muy clara, de esa me tengo que preocupar o mi preocupación acaba después de la pila?

¿Supongo que habrá, pilas ya programadas para que tu las adaptes a tu micro, pero como se cual es una tcp/ip o una UDP? cual me recomiendas que busque?

En tu red vas a tener IP fijos y dinamicos, recorda las ventajas y desventajas del mismo... una IP fija nunca se mueve, siempre le vas a enviar a eso. Y nunca vas a tener problemas siempre y cuando este configurado correctamente quien entregue las IPs.Lo "feo" de lo fijo es que cada placa estaria programado diferente (si fuera el IP origen), vas a tener que identificarla, no se cual es el receptor de todas tus placas, comunicarse las 32 entre ellas parece una locura... Y para poder comunicarte vos necesitas SI o SI el IP destino.
Si vos tenes un receptor, vas a necesitar saber el IP del mismo, este si te convendría que sea fijo para ser mucho mas simple, la otra es enviarlo por internet, etc.
De todas formas, primero necesitarias crear un diagrama de la red que posee el edificio. Si esta diseñado para que los dispositivos no puedan conectarse entre ellos, ejemplo que sean los routers quienes administren el DHCP, va a ser un problema poco sencillo de resolver, va a requerir el cambio de configuracion de routers/etc.... Asi que primero saber que tenes, quienes son los administradores de DHCP y como estan conectados, o preguntar al encargado de la red si es posible conectar esos 32 equipos y si se pueden comunicar entre ellos, comentale lo maximo que podrias hacer es darles un IP fijo a cada uno, seguramente la otra persona te va a dar la solucion. Hablo sobre una persona que maneja los equipos debido a que estamos hablando de un edificio, donde seguramente tengan controlados switch y todo lo demas desde su casa y ni hablar de que te van a dar el password para que le cambies la configuracion.

Hablando a groso modo, casi todas deberian tener TCP y UDP (especialmente UDP que es mucho mas simple), por ahi lo que fallan algunos es que no poseen los demas protocolos, como ICMP (este te va a recordar del ping por ejemplo). Y los protocoles de aplicacion son: DHCP, MQTT, entre otros. Por ejemplo MQTT te serviria para enviar mensajes a un servidor datalogger,  etc. Depende de la aplicacion que busques, no es necesario crear todo un protocolo sino a veces buscar alguno que ya exista.

Citar
Intentaré ver algunos ejemplos básicos con el ENC28J60 que es de los mas comunes así veo bien como trabaja y en que se basa y apartir de ahí intentaré adaptarlo

Mira los ejemplos pero muchas veces a no ser que entres bien en el protocolo, sobre que informacion le agrega en cada campo ( seguro que lo maneje con estructuras) como calcula los CRC es mejor verlo por arriba. Y esto lo bueno que posee que este formado por capas.

Lo mas sencillo seria el envio de un paquete UDP, porque es preparar el dato, formar el PDU de esta capa, pasa a la capa de IP, forma el PDU de la misma (le agrega los datos necesarios),  enviar al ENC parte del PDU de la capa del MAC (que seria lo que debia enviar si solo lo hacia por cable directo) y listo.

Pensado asi como lo dije arriba es simple, si entras en detalles como ordenar la informacion que llega, frames, etc se pone mas complicado. Es mas ni siquiera buscar ejemplos con Wireshark podes verlo en tu PC, te separa los datos capa por capa.

https://www.wireshark.org/docs/wsug_html_chunked/wsug_graphics/ws-main.png

Por ejemplo esa captura, si ves en la parte de arriba son todos los paquetes capturados, Al seleccionar alguno. Abajo tenes cada capa detallada: DNS (capa de aplicacion) / UDP (transporte) / IP4 (Internet) /  MAC-Ethernet II ( link )
« Última modificación: 16 de Mayo de 2019, 07:10:16 por KILLERJC »

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #12 en: 16 de Mayo de 2019, 08:27:44 »
Imagino que no tendrás posibilidad de cambiar ese micro por otro, de todos modos aprovecho el tema yo también para preguntar  que estoy bastante perdido en todo esto porque tarde o temprano me tocará usarlo en e ltrabajo… así que mi pregunta sería si alguno conoce algún transceptor Ethernet pero que ya incluya la pila TCP/UDP/IP que descargue de toda la tarea al micro principal, como haría en caso del WiFi los ESP8266 o los ESP32.
Todos los que he visto de Microchip en el datasheet poniendo en la búsqueda TCP no encuentra nada así que entiendo que la mayoría de los de microchip no lo implementan.

Que tal AccioRW,

Yo tampoco tengo nada de experiencia con relación a lo de los protocolos ethernet. Pero existe un circuito integrado que ya incluye la pila TCP/UDP/IP que lo fabrica WIZNET, este es el W5100 y es muy conocido en el mundo de la electronica, de hecho existe un shield para arduino (Arduino Ethernet shield V1) que usa este integrado, y al parecer es relativamente fácil de usar.
Este integrado cuenta con bus directo e indirecto y una interface SPI (al igual que el ENC28J60). Parece que esto sería la respuesta a tu pregunta. Aquí te pongo el link del fabricante para que veas a detalle su datasheet. Y puedes buscar en internet librerías para arduino y quizas hasta para microcontroladores PIC.

https://www.wiznet.io/product-item/w5100/

Este es un pequeño tutorial que puede servir:

https://www.sparkfun.com/tutorials/409

elreypic.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #13 en: 16 de Mayo de 2019, 08:29:25 »
Ese si que es nuevo para mi... Yo busque por varios lados y no encontre jamas uno con el stack todo incluido.
Hay que agregarle la capa de aplicación nomas. Pero no todo es perfecto, ahi tuvieron un problema con ARP en redes virtuales. que requiere un una vueltita de tuerca, pero que al estar en hardware no se puede actualizar.

Pero para un micro de 8bits, es lo mas genial que hay, mucho mejor que en ENC, especialmente para aplicaciones simples.
« Última modificación: 16 de Mayo de 2019, 08:34:37 por KILLERJC »

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re:Comunicación entre dispositivos ENC28J60
« Respuesta #14 en: 16 de Mayo de 2019, 08:37:55 »
Ese si que es nuevo para mi... Yo busque por varios lados y no encontre jamas uno con el stack todo incluido.
Hay que agregarle la capa de aplicación nomas. Pero no todo es perfecto, ahi tuvieron un problema con ARP en redes virtuales. que requiere un una vueltita de tuerca, pero que al estar en hardware no se puede actualizar.

Pero para un micro de 8bits, es lo mas genial que hay, mucho mejor que en ENC, especialmente para aplicaciones simples.

Así es KILLERJC. A este IC solo hay que agregarle la capa de aplicación.
Los módulos o breakboards no son caros para nada y se pueden conseguir fácilmente. El IC se puede comprar en Digikey, Mouser, Element14 (antes NEWARK), etc.
De cualquier manera espero que esta info sirva de algo.

elreypic.


 

anything