El shield de Ethernet "oficial" de Arduino, está basado en el chip W5100 de WizNet que es un controlador de Ethernet.
Algunos puntos generales de funcionalidad:
- W5100 Tiene todo el stack IP y puede hacer TCP o UDP para hasta cuatro sockets simultáneos.
- El shield tiene seis LEDs para debugar la conexión.
- Se puede programar con la librería estándar de Ethernet que se encuentra en la web de Arduino.
- Tiene un pulsador para el reset. Este resetea el shield y también Arduino.
- Este shield tiene populado un conector para insertar una memoria microSD. Esta memoria puede servir para guardar ficheros que podremos visualizar a través del navegador, cuando configuremos el equipo como un sencillo servidor web. Hay un tutorial de Adafruit que explica cómo visualizar los ficheros que hay en la memoria SD: http://www.ladyada.net/learn/arduino/ethfiles.html
- El bus SPI se comparte entre el controlador de Ethernet y la memoria SD. Se dispone de dos señales de chip select, una para Ethernet (SS) y otra para la memoria microSD (SD_CS). Según dispongamos de estos chip selects, el SPI tendrá una u otra función.
- La señal de chip select de Ethernet, SS, tiene lógica negada, es decir a nivel 0 se activa el chip select del SPI. Así mismo el integrado W5100 tiene un pin de enable del SPI (SEN), que tiene lógica positiva, así que este enable se controla negando el chip select, es decir SEN = /SS. El propósito de esta conexión es deshabilitar el envio de mensajes a través del SPI por parte de W5100 en caso que se esté comunicando con la memoria microSD, para evitar conflicto en el bus SPI. Curiosamente, para hacer la negación del esta señal se utiliza un integrado 74LVC14D (seis inversores con trigger de schmitt) que se podrían haber sustituido, a mi entender, por un sencillo transistor.
- A pesar de estar alimentado W5100 a 3.3V, las señales del SPI vienen directamente de la placa Arduino, y por tanto son de 5V. Esto es así, porque W5100 permite hasta 5.5V de tensión de entrada en sus pines.
- El integrado STM812 es un circuito de reset que tiene como función activar el reset del W5100 (/RESET) cuando la tensión de alimentación baja por debajo de 1V. También hace la función de eliminar el bounce del pulsador de reset, y de prolongar la señal de reset al alimentar el equipo.
- Se dispone de una conexión típica desde un phyter de Ethernet al conector RJ45. Con los dos pares de señales diferenciales de comunicación, para transmisión y recepción, y la etapa de resistencias y condensadores de adaptación. Algunos conectores RJ45 disponen de dos LEDs de indicación. A pesar que el RJ45 proporcionado en el shield no dispone de esos LEDs, sí que hay dos señales de control, son la señal de presencia de link (LINKLED), que se queda fija cuando hay un link correcto y es pulsante durante el proceso de transmisión o recepción. La segunda señal de control de led es la de indicación de velocidad (SPD), esta señal se activa cuando el link es de 100Mbps. Ambas señales tienen lógica negativa.
- El conector RJ45 de Pulse, tiene el trafo de adaptación incorporado en su interior. La referencia de Pulse es, al menos en mi shield, J0012D21NL.
- Hay un puente de soldadura, que si se suelda, lleva la señal de interrupción de W5100 (/INT) a Arduino a través del pin PD2. Esta señal de interrupción se activa en caso que se requiera la atención del micro, es decir, en caso de conexión, desconexión, recepción de datos o timeout. Es una señal de lógica negada. Se desactiva la interrupción accediendo a registros internos (IR o Sn_IR). Esta señal de interrupción no está soportada por la librería estándar de programación (http://arduino.cc/en/Reference/Ethernet)
- La alimentacion del tanto el integrado de Ethernet como del a memoria microSD se hace a 3.3V. Ya que la tensión 3.3V propia de Arduino no puede proporcionar potencia suficiente (la razón la podeís encontrar en un post anterior), se tiene que convertir los 5V a 3.3V, en este caso, con un regulador lineal. Recordar que la corriente máxima que se dispone a 5V para el shield es 150mA (siendo conservadores). El regulador lineal utilizado en este shield es el MC33269ST-3.3 de ON Semiconductors. La tensión de entrada al regulador es de 5V, la de salida es de 3.3V, por tanto hay un dropout de 1.7V. La potencia máxima de disipación viene fijada por el plano de radiador que se le haya puesto al regulador. En este shield, se le ha limitado a 6mm en el peor caso (de hecho el plano se extiende con unas vías de una forma algo extraña). Con estas dimensiones, consultando el datasheet se ve que la máxima potencia de disipación es de 0.83W, que junto con el dropout, nos da una corriente de 480mA. Es suficiente para poder suministrar la potencia requerida, y está muy cerca de la máxima corriente que se puede suministrar cuando se alimenta por USB (500mA).
- En el shield, por defecto se proporciona un zócalo para insertar una memoria microSD. También sería posible, quitando ese zócalo, soldar otro para una memoria SD. La comunicación con ambas memorias es a través del bus SPI, tal como comenté anteriormente, con el chip select SD_CS. Para adaptar las señales del SPI que vienen del Arduino a 5V, a 3.3V, se utilizan divisores de tensión. En cuanto a la memoria SD, tiene dos señales adicionales de control que la microSD no tiene, son la señal de detección DETECT y la señal de protección contra escritura WP. Se puede fijar la protección contra escritura con un puente de soldadura.
- Existe un LED, L, que está conectado con la señal de clock del SPI, de forma que cuando hay comunicación a través el bus, es LED parpadea.
En futuros posts hablaré de la funcionalidad de este shield.
Hasta pronto.
Excelente post. Muchas gracias.
ResponderEliminar