El integrado ENC28J60 es un controlador Ethernet con interfaz para bus SPI. Está diseñado para ser usado con pequeños sistemas, normalmente basados en microcontroladores.
Su bus SPI puede funcionar hasta a 20 MHz y la conexión Ethernet tiene una velocidad máxima de 10 Mbit/s (10BASE-T) soportando los modos Dúplex (Full-Duplex) y Semi-dúplex (Half-Duplex) con detección y corrección automática de la polaridad. Aunque 10 Mbit/s puede parecer una velocidad baja comparada con la red GigaBit Ethernet que es la más frecuente en la actualidad, pero es más que suficiente para integrar en una red un pequeño dispositivo microcontrolado, por ejemplo, para realizar funciones como un objeto de IoT (Internet of Things, Internet de las cosas)
Funciona a 3,3 V aunque es tolerante a señales de 5 V, por lo que es muy fácil integrarlo con diferentes microcontroladores así como trabajar con él durante el prototipado o la fase de pruebas.
Incluye de manera interna un buffer configurable para recepción/transmisión, un FIFO circular para la recepción y acceso directo a memoria (DMA) para agilizar el movimiento de datos. Es capaz de hacer por hardware las sumas de verificación (checksum) y otras operaciones típicas de las comunicaciones Ethernet por lo que su integración a nivel de software en un proyecto es muy sencilla.
La configuración típica necesita, además de un oscilador de 25 MHz (un cristal con sus correspondientes condensadores) un conector y los transformadores Ethernet, que suelen encontrarse frecuentemente encapsulados junto con otros componentes como resistencias o los LED para informar de enlace y del estado recepción/transmisión en un bloque que contiene el conector RJ45.
Sólo se fabrica para montaje de superficie (SMT/SMD) en encapsulados de 28 pines SPDIP (un DIP con mayor densidad de pines), SSOP, SOIC y QFN por lo que para realizar pruebas o prototipos se suele trabajar con módulos como los de la imagen anterior, de los que, además, hay fácil disponibilidad de unidades sueltas, frente al propio integrado que suele estar en el mercado en lotes grandes.
Vcap | → | 01 | 28 | ← | Vdd | |
Vss | → | 02 | 27 | → | LEDA | |
CLKOUT | ← | 03 | 26 | → | LEDB | |
INT | ← | 04 | 25 | ← | Vddosc | |
NC | ← | 05 | 24 | → | OSC2 | |
SO | ← | 06 | 23 | ← | OSC1 | |
SI | → | 07 | 22 | ← | Vssosc | |
SCK | → | 08 | 21 | ← | Vsspll | |
CS | → | 09 | 20 | ← | Vddpll | |
RESET | → | 10 | 19 | ← | Vddrx | |
Vssrx | → | 11 | 18 | ← | Vsstx | |
TPIN- | → | 12 | 17 | → | TPOUT+ | |
TPIN+ | → | 13 | 16 | → | TPOUT- | |
RBIAS | → | 14 | 15 | ← | Vddtx | |
Además de (1) la alimentación, una vez montado el integrado quedarán expuestas (2) las conexiones Ethernet por el extremo del conector RJ45 y por la parte microcontrolada del montaje el bus SPI (MOSI/MISO/SCLK/CS) y (3) gestionado directamente por el microcontrolador o en otra parte de la electronica del montaje se puede conectar INT, que puede utilizarse como WOL (Wake-On-LAN) o activación remota por red (Remote Wake-up), RESET y una conexión a reloj externo CLKOUT.
Como ejemplo, para realizar estas conexiones entre un módulo con el integrado ENC28J60 y una placa Arduino habría que seguir los valores de la siguiente tabla en función del tipo de placa.
ENC28J60 | Arduino UNO | Arduino MEGA / DUE | Arduino Leonardo |
MISO (SO) | MISO (pin 12) | MISO (pin 50) | MISO (conector ICSP) |
MOSI (SI) | MOSI (pin 11) | MOSI (pin 51) | MOSI (conector ICSP) |
SCK | SCK (pin 13) | SCK (pin 52) | SCK (conector ICSP) |
RESET | RESET | RESET | RESET |
INT | INT0 (pin 2) | INT4 (pin 2) | INT0 (pin 2) |
SS (CS) | SS (pin 10)* | SS (pin 53)* | pin 10* |
Vdd (3,3 V) | 3V3 | 3V3 | 3V3 |
Vss (GND) | GND | GND | GND |
En general, las conexiones son las correspondientes a las que cabría esperar según lo dicho (y la lógica) pero hay algunas diferencias entre las placas. En el caso de Arduino Leonardo, salvo que se haya soldado manualmente el pin SS en la placa (es habitual añadir a mano los pines 22-CTS y 8-SS) se usa el pin 10, que no tiene esta asignación, por lo que será necesario considerarlo en el software de control. Por otra parte, no es imprescindible utilizar el pin «estándar» para seleccionar (activar) el dispositivo esclavo pero la mayoría de las librerías Ethernet para manejar el integrado esperan usar ese pin (y con esa finalidad) por lo que habrá que modificarlas en caso contrario y en algunos casos (algunas librerías) cuando se use la placa Leonardo.
Otra de las consideraciones que hay que atender corresponde también con la placa Leonardo y al uso del conector ICSP en lugar de los correspondientes (de los bloques laterales) en la placa Arduino UNO
Manuel
Hola, soy nuevo en este mundillo
Y en primer lugar quiero felicitarte por tener un blog con una muy buena explicación de todos los detalles.
Gracias por tener tan currado cada tema para hacerlo tan fácil al mundo.
Gracias
Víctor Ventura
Muchas gracias a ti por visitar polaridad.es 🙂