ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « : Marzo 09, 2010, 10:16:03 » Hola amigos! Voy a intentar traducir la hoja de datos del ENC28J60, el controlador Ethernet via SPI de Microchip y aportar lo que pueda sobre el funcionamiento de este chip. Va a llevar algunos dias, quizas tenga errores al principio (al menos hasta que tengamos un prototipo andando para hacer algunas pruebas) pero el trabajo va a valer la pena No va a ser una traduccion literal...¡Estás avisado! ¿Comenzamos? INDICE - Introducción Módulos internos y pines de E/S - El oscilador Oscilador Start-up Timer El pin CLKOUT y el registro ECOCON Conexionado externo, bobinas y otras yerbas Niveles tensión en los pines de E/S - Configuración de los LEDs Registros y memoria -Organización de la memoria interna - Los registros de control - ECON1 - ECON2 - El buffer Ethernet - Registros PHY - Escaneo de registros PHY - Registros PHSTAT1 y PHSTAT2 - Registros PHID1 y PHID2 - La interfaz SPI - Set de instrucciones SPI -Comando para leer registros de control - Comando para leer la memoria buffer - Comando para escribir registros de control Estado del trabajo: 42% realizado, ultima actualización el 31-03-2010 cmp-enc28j60.jpg (13.61 KB - descargado 138 veces.) Pantallazo.png (31.88 KB - descargado 1575 veces.) « Última modificación: Abril 08, 2010, 03:59:00 por Ariel » Ariel Global Moderator dsPIC Desconect ado Sexo: Mensajes: 5438 En línea Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #1 : Marzo 09, 2010, 01:19:48 » ENC28J60 de Microchip El ENC28J60 de Microchip es un circuito integrado de 28 pines capaz de hacer de interfase entre nuestros proyectos y una red Ethernet. Introducción El ENC28J60 es un controlador Ethernet dotado de un puerto SPI (Serial Peripheral Interface), especialmente diseñado para actuar como un puente entre una red Ethernet y un microcontrolador equipado con SPI. El ENC28J60 cumple con las especificaciones IEEE 802.3, e incorpora una serie de esquemas de filtrado de paquetes para limitar el numero de paquetes entrantes. También provee un módulo DMA interno para facilitar el flujo de datos y hardware especifico para el calculo de las sumas de control (IP checksums). La comunicación con el microcontrolador que hace las veces de host se realizan mediante el bus SPI a una velocidad de hasta 10Mb/s y dos pines especiales capaces de provocar interrupciones en el ENC28J60. Otros dos pines pueden utilizarse para manejar LEDs que indiquen la conexión y la actividad de la red. La figura siguiente muestra el diagrama en bloques del integrado: Figura1: Diagrama en bloques del EN28J60. El esquema de la figura 2 corresponde a una aplicación típica del ENC28J60: Figura 2: Circuito de aplicación típico. Además del integrado, puede verse que se utilizan dos transformadores de pulso y varios componentes pasivos indispensables para conectar el ENC28J60 a una red Ethernet de 10Mb/s. El EN28J60 tiene siete bloques funcionales importantes: 1) La interfaz SPI que se encarga de comunicarlo con el microcontrolador host 2) Los registros que se emplean para monitorear y controlar al ENC28J60 3) Un buffer RAN dual para los paquetes recibidos y enviados 4) Un “arbitro” que controla los accesos al buffer RAM mediante DMA 5) Un bus que interpreta los datos y comandos recibidos vía SPI 6) Un módulo MAC (Maduim Access Control) que cumple con IEEE 802,3 7) Una módulo PHY (Physical Layer) que codifica y decodifica los datos análogos presentes en el par trenzado. Además de ello, el dispositivo cuenta con otros bloques de soporte, como el oscilador, regulador de voltaje interno, adaptadores de nivel para proveer E/S de 5V y lógica de control. El chip viene en dos encapsulados diferentes: Figura 3: Pinout de cada encapsulado Veamos primero una lista de la función de cada pin (Figura 4) y luego explicaremos con más detalle cada uno de ellos: Figura 4: Descripción de la funcion de cada pin Pantallazo.png (54.21 KB - descargado 1799 veces.) Pantallazo-1.png (19.02 KB - descargado 1733 veces.) Pantallazo-3.png (45.56 KB - descargado 1723 veces.) Pantallazo-2.png (102.63 KB - descargado 1728 veces.) « Última modificación: Marzo 09, 2010, 01:28:12 por Ariel » Ariel Global Moderator dsPIC Desconect ado En línea Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #2 : Marzo 09, 2010, 04:47:09 » El oscilador: Para funcionar, el ENC28J60 necesita de un oscilador que le “marque el Sexo: Mensajes: 5438 ritmo”. El chip está diseñado para funcionar a 25MHz, y una de las formas de proporcionárselos es utilizando un cristal como se ve en la figura 5. Figura 5: Oscilador a cristal Se conecta el cristal entre los pines OSC1 y OSC2, y se ponen también ambos extremos a GND mediante C1 y C2. El valor de C1 y C2 no está en la hoja de datos, pero 15pf parecen funcionar bien en la mayoría de los proyectos. El resistor R1 solo es necesario con algunos tipos de cristales (“AT strip cut crystals") pero normalmente no es necesaria. La otra forma de utilizar el ENC28J60 es con una señal de clock externa (figura 2), con una amplitud de 3,3V y aplicada al pin OSC1. En este caso, puede dejarse el pin OSC2 “al aire” o conectarlo a GND a través de un resistor para minimizar el ruido. Figura 6: Oscilador externo Pantallazo-4.png (11.34 KB - descargado 1666 veces.) Pantallazo-5.png (6.97 KB - descargado 1641 veces.) En línea Ariel Global Moderator dsPIC Desconect ado Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #3 : Marzo 09, 2010, 04:49:39 » Oscilador Start-up Timer Este chip posee lo que Microchip denomina Oscillator Start-up Sexo: Mensajes: 5438 Timer (OST). Se trata de un mecanismo destinado a asegurar que el oscilador y el módulo PHY se hayan estabilizado antes de que el host intente utilizarlos. Para ello, el OST se encarga de esperar a que ocurran 7500 ciclos de reloj (300us) luego de ocurrido el Power-On Reset (“encendido” del chip) o un Wake-Up (“despertar”) posterior a un Power-Down (“dormir”). Durante este tiempo, todos los registros y buffers de memoria pueden ser consultados o escritos a través del bus SPI. Sin embargo, el software del host no debería intentar transmitir paquetes, habilitar la recepción de paquetes o acceder a los registros MAC, MII o PHY. Cuando el tiempo del OST haya finalizado, el bit CLKRDY del registro ESTAT se pondrá en 1. Nuestro programa debería consultar ese bit para tener la seguridad de que el ENC28J60 está listo para funcionar. « Última modificación: Marzo 09, 2010, 05:08:05 por Ariel » Ariel Global Moderator dsPIC Desconec tado Sexo: Mensajes: 5438 En línea Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #4 : Marzo 09, 2010, 05:42:34 » El pin CLKOUT y el registro ECOCON La existencia de este pin tiene como fin proveer al host (o a cualquier otro circuito externo) de una fuente de reloj. CLKOUT posee un prescaler interno capaz de dividir los 25MHz del reloj del ENC28J60 por 1, 2, 3, 4 u 8, seleccionable a través del registro ECOCON. Para crear una señal de reloj, el pin CLKOUT se mantiene en estado bajo hasta transcurrido el peridodo estipulado por el OST. Luego, comienza a enviar 0 y 1 con una frecuencia por defecto de 6,25 MHz (el clock del ENC28J60 / 4). Si el usuario modifica el valor del preescaler, este se mantiene aún cuando ocurra un RESET. Si por algún motivo el usuario necesita deshabilitar temporalmente el pin CLKOUT, puede hacerlo escribiendo 0 en el registro ECOCON, y el pin quedará en estado bajo. Hay que tener en cuenta que cuando se modifica el valor de ECOCON para cambiar el valor del preescaler, algunos pulsos de reloj pueden “perderse” en CLKOUT. Típicamente, al hacer ese cambio, el pin se mantiene en estado bajo entre 1 y 8 ciclos del OSC1. Eso puede verse en la figura siguiente: Figura 7: Salida de CLKOUT y el registro ECOCON Los bits del 7 al 3 no se encuentran implementados en este registro, y al leerlos devuelven “0”. Los otros tres permiten 8 combinaciones diferentes: COCON2:COCON0 111 = Reservado para test durante la fabricación. No usar. 110 = Reservado para test durante la fabricación. No usar. 101 = CLKOUT dividido 8 (3.125 MHz) 100 = CLKOUT dividido 4 (6.25 MHz) 011 = CLKOUT dividido 3 (8.333333 MHz) 010 = CLKOUT o dividido 2 (12.5 MHz) 001 = CLKOUT dividido 1 (25 MHz) 000 = CLKOUT deshabilitado, pin en estado bajo. Pantallazo-6.png (15.05 KB - descargado 1623 veces.) En línea Ariel Global Moderator dsPIC Desconect ado Sexo: Mensajes: 5438 Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #5 : Marzo 09, 2010, 06:07:41 » Conexionado externo, bobinas y otras yerbas Para funcionar y poder conectarse a la red Ethernet, el ENC28J60 necesita de algunos componentes externos, tal como puede verse en la figura 8. Los pines TPIN+ y TPIN- deben conectarse a un transformador 1:1 especial para redes 10BASE-T . Los pines TPOUT+ y TPOUT- necesitan de un transformador de pulso con relación 1:1 y punto medio. Este transformador debe ser capaz de proveer una aislación como mínimo de 2000V. Además, todos los pines mencionados necesitan de un resistor de 50 ohms con un 1% de tolerancia. Figura8: Conexionado externo. La circuitería analógica interna del ENC28J60 también requiere que conectemos un resistor de 2K con un 1% de tolerancia entre el pin RBIAS y GND. El chip es capaz de operar también con una tensión de alimentación de solo 2.5V, en cuto caso habrá que disponer un condensador de 10 uF entre el pin VCAP y GND. Todos los pines de alimentación (Vdd) deben ser conectados a la misma fuente de 3.3V, y todos los pines GND deben conectarse al mismo nodo. Cada par de pines Vdd/Vss debe tener su propio condensador cerámico de 0.1uF, tan cerca de los pines como sea posible. Hay que tener en cuenta que corrientes relativamente altas van a circular entre el integrado y el par trenzado, por lo que las pistas correspondientes deberían ser lo mas cortas y anchas posibles para minimizar su resistencia eléctrica. Pantallazo-7.png (38.76 KB - descargado 1640 veces.) En línea Ariel Re: ENC28J60, el controlador Ethernet via SPI de Microchip Global Moderator dsPIC Desconect ado Sexo: Mensajes: 5438 al desnudo « Respuesta #6 : Marzo 10, 2010, 04:13:20 » Niveles tensión en los pines de E/S El ENC28J60 es un chip diseñado para operar a 3.3V. Sin embargo, puede ser integrado con facilidad en circuitos que se alimentan con 5V. Los pines RESET, SPI CS, SCK y SI funcionan directamente con 5V. Por otro lado, si el host opera a 5V, puede que necesites implementar un “traductor” capaz de manejar las salidas CMOS de 3.3V del ENC28J60. Un simple y económico 74HCT08 (cuatro compuertas AND), un 74ACT125 (cuatro bufferes triestado) o cualquier otro chip CMOS de 5V con bufferes de entrada adaptados para niveles TTL puede ser usado como adaptador. El uso de bufferes triestado permite una fácil integración en sistemas que deben compartir el bus SPI con otros dispositivos. La figura 9 ilustra dos formas en que esto puede ser implementado. Figura 9 Pantallazo-1.png (23.79 KB - descargado 1602 veces.) « Última modificación: Marzo 10, 2010, 04:22:00 por Ariel » Ariel Global Moderator dsPIC En línea Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #7 : Marzo 10, 2010, 04:39:14 » Desconect ado Sexo: Mensajes: 5438 Configuración de los LEDs Los pines LEDA y LEDB permiten la conxión de sendos LEDs destinados a brindar información sobre el estado del chip. Una caracterstica especial de estos dos pines es que el ENC28J60 puede detectar la polaridad con la que se han conectado los LEDs (es decir, si debe entregar corriente para que brille, o drenarla) de forma automatica luego de que tiene lugar RESET. Figura 10: Polaridad de LEDB y efecto en PDPXMB En el caso de LEDB, tal como indica la figura 10, la forma de conectar el diodo LED fija el estado del bit PHCON1 en el registro PDPXMB. Si el LED se conecta de forma que la corriente fluya hacia LEDB, el bit se pone a 0 en cada RESET y el módulo PHY opera en modo half-duplex. Si la corriente fluye desde el pin, el bit se pone en 1 en cada RESET y el módulo PHY opera en modo full-duplex. Si no se conecta ningún LED, el bit PDPXMD permanece en estado indeterminado. El registro PHLCON se encarga de controlar el comportamiento de los LEDs y determinar que función cumplen. La tabla siguiente (Figura 11) resume todos los estados y opciones posibles: Figura 11: PHLCON Pantallazo-2.png (11.98 KB - descargado 1579 veces.) Pantallazo-4.png (13.39 KB - descargado 1547 veces.) Pantallazo-3.png (108.23 KB - descargado 1541 veces.) En línea Ariel Global Moderator dsPIC Desconect ado Sexo: Mensajes: 5438 Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #8 : Marzo 11, 2010, 11:20:11 » Organización de la memoria interna Toda la memoria disponible en el ENC28J60 es del tipo RAM estática. Se divide en tres bloques principales: 1)Registros de control 2)Buffer Ethernet 3)Registros del módulo PHY El primer bloque contiene los CRs (Control Registers) que se emplean para el controlar y obtener información sobre el estado del ENC28J60. Todos estos registros pueden ser accedidos (lectura y escritura) mediante la interfase SPI. El segundo bloque -el Buffer Ethernet- tiene un tamaño que puede ser ajustado por el usuario y tiene como función servir de memoria temporal para los datos que se envían (o reciben) a (o desde) la red. Esta zona de memoria también puede ser accedida mediante la interfase SPI a través de los comandos apropiados, que serán tratados más adelante en este documento. La zona correspondiente a los registros del módulo PHY no puede ser accedida vía SPI. El acceso sólo puede realizarse mediante la Media Independent Interface (MII) implementada en la MAC. La figura siguiente muestra el mapa de memoria del chip: Figura 12: Mapa de memoria del ENC28J60. Pantallazo.png (29.42 KB - descargado 1525 veces.) En línea Ariel Global Moderator dsPIC Desconect ado Sexo: Mensajes: 5438 Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #9 : Marzo 11, 2010, 04:29:02 » Los registros de control Los registros constituyen la interfase principal entre el host y la lógica interna del ENC28J60. Escribiendo los valores adecuados en los registros correctos puede controlarse la operación del chip, y la lectura de esta zona de la memoria proporciona al host valiosa información sobre el estado del ENC28J60. La memoria asignada a los Registros de Control está dividida en cuatro bancos. Dos bits en el registro ECON1 (BSEL1:BSEL2) permiten seleccionar el banco con el que se va a trabajar. Cada banco posee 32 bytes de longitud y puede ser direccionado mediante 5 bits. Las ultimas cinco posiciones de cada banco (1Bh a 1Fh) apuntan a un juego común de registros: EIE, EIR, ESTAT, ECON1 y ECON2. Estos son los registros más importantes a la hora de controlar o monitorizar la operación del ENC28J60. Al estar “repetidos” en todos los bancos, no es necesario efectuar un cambio de banco cada vez que se los quiere utilizar. Al igual que todos los demás registros del chip, serán analizadas uno por uno más adelante. Existen direcciones de registro que a pesar de ser válidas, no contienen ningún registro utilizable. Si se intenta escribir en ellas la operación se ignora, y si se los lee devuelven “0”. Los registros de las direcciones 1Ah en cada banco están reservadas y no deberia escribirse o leerse en ellos. Los registros disponibles pueden listarse en tres grupos: ETH, MAC y MII. Los registros cuyos nombres comienzan por “E” pertenecen al primer grupo, los que poseen nombres que comienzan con “MA” pertenecen al segundo y los que tienen nombres que empiezan con “MI” pertenecen al tercero. Este es el mapa de registros del ENC28J60 Figura 13: Mapa de registros del ENC28J60 Y a continuación, el detalle de los bits que los componen y la función que tienen asignada: Figura 14: Contenido de cada registro (primera parte) Figura 15: Contenido de cada registro (segunda parte) Pantallazo-1.png (90.79 KB - descargado 1486 veces.) Pantallazo-2.png (77.6 KB - descargado 1466 veces.) Pantallazo-3.png (78.25 KB - descargado 1466 veces.) En línea Ariel Re: ENC28J60, el controlador Ethernet via SPI de Microchip Global Moderator dsPIC Desconect ado Sexo: Mensajes: 5438 al desnudo « Respuesta #10 : Marzo 11, 2010, 06:10:53 » El registro ECON1 Este registro tiene como cometido controlar las principales funciones del ENC28J60. Habilita la transmisión de datos, selecciona los bancos de registros, controla los DMA, etc. Figura 16: Registro ECON1 NOTA: La función de cada uno de los bits será explicada con un ejemplo cuando tengamos montado el hardware para hacer pruebas. Pantallazo.png (80.93 KB - descargado 1459 veces.) En línea Ariel Global Moderator dsPIC Desconect ado Sexo: Mensajes: 5438 Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #11 : Marzo 12, 2010, 06:02:14 » El registro ECON2 Este registro tiene funciones similares a ECON1 Figura 17: Registro ECON2 NOTA: La función de cada uno de los bits será explicada con un ejemplo cuando tengamos montado el hardware para hacer pruebas. Pantallazo.png (69.88 KB - descargado 1412 veces.) En línea Ariel Global Moderator dsPIC Desconect ado Sexo: Mensajes: 5438 Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #12 : Marzo 12, 2010, 06:36:26 » El buffer Ethernet El buffer Ethernet contiene la memoria utilizada por el ENC28J60 para recibir y enviar datos. El tamaño total de esta memoria es de 8KB, y está separada en dos zonas: una para la transmisión, y otra para la recepción. El monto de memoria utilizado en cada una de estas areas puede ser completamente configurado por el usuario mediante la interfase SPI. La relacion entre ambos espacios de memoria puede verse en la figura siguiente: Figura 18: El buffer Ethernet El buffer de recepción Se trata de un buffer circular FIFO controlado por hardware. Los pares de registros ERXSTH:ERXSTL y ERXNDH:ERXNDL hacen las veces de punteros que definen el tamaño y la localización del buffer dentro de la memoria. El byte apuntado por ERXST y el byte apuntado por ERXND son sus extremos, y ambas posiciones están incluidas en el buffer. A medida que se reciben bytes desde la interfase Ethernet son escritos secuencialmente en el buffer. Cuando el buffer se completa y el hardware nota que ha escrito el ultimo byte recibido en la posición apuntada por ERXND, automáticamente escribe el siguiente dato en la posición apuntada por ERXST. Esto significa que en la practica el buffer nunca puede desbordarse. El host solamente puede definir el valor de estos punteros cuando la lógica de control se encuentra deshabilitada (ECON1.RXEN = 0). No hay problemas en utilizar toda la zona comprendida entre 0000h y 1FFFh como buffer de recepción. Los registros ERXWRPTH:ERXWRPTL determinan la posición dentro del buffer en que el hardware escribirá el próximo byte que reciba. Este puntero es de solo lectura, y se actualiza automáticamente cada vez que se recibe un paquete. Este puntero puede ser útil para determinar cuanto espacio libre queda en el FIFO. Durante la operación normal, los registros ERXRDPT contienen la posición en la que se están leyendo datos. Si el FIFO se llena, los nuevos datos no se escribirán encima de los viejos. Para poder continuar con la recepción, el host debe encargarse de hacer avanzar periódicamente este puntero. El buffer de transmisión Todo el espacio del buffer Ethernet que no se haya definido como buffer de recepción se comportará como buffer de transmisión. El host debe encargarse de manejar los paquetes que se van a enviar dentro de este espacio de memoria. Los punteros ETXST y ETXND son programados con la dirección -dentro del buffer de transmisión- en que se encuentra el paquete a ser enviado. El hardware no controla si el valor de estos punteros define una posición válida dentro del buffer de transmisión, por lo que hay que ser muy cuidadosos para no corromper la integridad de los datos contenidos en el buffer completo. Pantallazo-1.png (34.91 KB - descargado 1409 veces.) En línea Ariel Global Moderator dsPIC Desconect ado Sexo: Mensajes: 5438 Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #13 : Marzo 15, 2010, 05:47:03 » Registros PHY Los registros de este grupo proporcionan el mecanismo de supervisión y control del módulo PHY. Hay 9 en total, y todos tienen 16 bits de ancho. A diferencia de los registros ETH, MAC y MII, o incluso de los bufferes de memoria, estos registros no son accesibles directamente a traves de la interfase SPI. Puede accederse a ellos mediante un subgrupo de los registros MAC, que implementan la llamada Media Independent Interface for Management (MIIM o Interface de control independiente del dispositivo). A este subgrupo de registros se los denomina “registros MII”, y puedes verlos en las figuras 19 y 20, Figura 19 Figura 20 Leyendo los registros Cuando el host lee un registro PHY, obtiene 16 bits de datos. Estos son los pasos a seguir para leer uno de estos registros: - Escribir la dirección del registro PHY a leer en el registro MIREGADR - Poner en 1 el bit MICMC.MIIRD. Esto comienza la operación de lectura y pone en 1 el bit MISTAT.BUSY. - Esperar 10.24 us. Confirmar el estado de MISTAT.BUSY para tener la certeza del que el ciclo de lectura finalizó (este bit habrá vuelto a 0). Hasta que esto no ocurra, el host no podrá efectuar operaciones sobre MIISCAN o escribir el registro MIWRH. - Poner a 0 el bit MICMC.MIIRD - Leer el dato buscado desde los registros MIRDL y MIRDH. El orden en que se leen estos dos bytes no es importante. Escribiendo en los registros. Siempre que se escribe en uno de los registros PHY, se escriben 16 bits. Si lo que se quiere es modificar el valor de algún bit en particular, primero debe leerse el registro completo, cambiar ese bit sobre alguna variable, y luego escribir el registro completo. Estos son los pasos a seguir para escribir en uno de estos registros: - Escribir la dirección del registro PHY a escribir en el registro MIREGADR, - Escribir los 8 bits de la parte baja del dato a guardar en el registro MIWRL. - Escribir los 8 bits de la parte alta del dato a guardar en el registro MIWRH. Al escribir en este registro, la transacción de escritura - comienza automáticamente. El MISTAT.BUSY también se pone en 1. El ciclo de lectura demora 10.24us. Cuando finaliza, MISTAT.BUSY se pone automáticamente en 0. Hasta que esto no ocurra, el host no podrá efectuar operaciones sobre MIISCAN o escribir el registro MIWRH. Pantallazo.png (25.97 KB - descargado 1390 veces.) Pantallazo-1.png (39.28 KB - descargado 1374 veces.) En línea Ariel Global Moderator dsPIC Desconectado Sexo: Mensajes: 5438 Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #14 : Marzo 17, 2010, 06:32:40 » Escaneo de registros PHY El MAC puede ser configurado de forma que realice operaciones de lectura de de los registros PHY forma automática. Esto simplifica bastante el trabajo del host. Para realizar una operación de este tipo hay que seguir los pasos enumerados a continuación: - Escribir la dirección del registro PHY a leer en el registro MIREGADR. - Poner en 1 el bit MICMD.MIISCAN. Esto hace que comience la tarea de lectura automática y que el bit MISTAT.BUSY se ponga en 1. La primer operación se completa transcurridos 10.24us, y cada lectura siguiente estará disponible cada 10.24us adicionales. Esta tarea se ejecuta hasta que es cancelada por el host. Luego de poner en 1 el bit MICMD.MIISCAN, los registros MIRDL y MIRDH se actualizan automáticamente cada 10.24us. No hay forma de saber si los registros han sido o no actualizados, asi que hay que tener en cuenta que cuando accedemos a los registros MII mediante el bus SPI, puede oocurrir que estemos “leyendo” los datos del estado anterior. Cuando se estan efectuando las operaciones de escaneo de registros, el host no debe intentar escribir en MIWRH o comenzar una operación MIIRD. Las operaciones MIISCAN deben ser canceladas poniendo en 0 el bitMICMC.MIISCAN. Cuando el bit MISTAT.BUSY haya vuelto a 0, las operaciones de lectura normales pueden recomenzar. Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #15 : Marzo 20, 2010, 11:43:51 » Registros PHSTAT Los registros PHSTAT1 y PHSTAT2 son de solo lectura. Contienen información sobre el estado actual del modulo PHY. El primero de ellos (figura 21) contiene el bit LLSTAT, que brinda información para determinar el momento en que el link con el resto de la red falla. El registro PHSTAT1 también contiene un bit de estado “jabber”. La traducción de “jabber” es algo así como “hablar atropelladamente”, y en este contexto se refiere a la posibilidad que poseen algunos controladores de utilizar tamaños de paquetes diferentes a los especificados por la IEEE. Este bit en alto indica que se ha detectado esa condición desde la ultima vez que se leyó el registro. Figura 21: Registro PHSTAT1 El registro PHSTAT2 contiene información sobre el estado en que se encuentra el link entre el modulo PHY y la red, y si está o no transmitiendo o recibiendo datos. Figura 22: Registro PHSTAT2 Pantallazo.png (70.07 KB - descargado 489 veces.) Pantallazo-1.png (92.12 KB - descargado 487 veces.) En línea Ariel Global Moderator dsPIC Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #16 : Marzo 20, 2010, 01:53:54 » Desconec Registros PHID tado Sexo: Mensajes: 5438 Los registros PHID1 y PHID2 también son de solo lectura. Brindan información que ayuda a identificar el controlador Ethernet y pueden ser utiles a la hora de depurar una aplicación. Entre otros datos, proporcionan: - El número de parte del módulo PHY (PPN5:PPN0) - El nivel de revisión del módulo PHY (PREV3:PREV0) - El identificador PHY, como parte del OUI (Organizationally Unique Identifier) de Microchip (PID24:PID3) El numero de parte PHY y el número de revisión son parte del registro PHID2. Los dos bytes superiores del identificador PHY se encuentran en PHID1, y el resto en PHID2. La localización exacta de cada uno puede verse en la figura 23. Figura 23 (Hacer click aqui para descargar una versión más grande) La información sobre la revisión también se encuentra en EREVID. Este es un registro de control, de solo lectura, que contiene el identificador de 5 bits de la versión de ENC28J60 que se está usando. Pantallazo-2.png (62.04 KB - descargado 486 veces.) En línea Ariel Global Moderator dsPIC Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #17 : Marzo 25, 2010, 04:31:17 » Desconect ado La interfaz SPI Sexo: Mensajes: 5438 El ENC28J60 esta dotado de un puerto entandar SPI. La implementación adoptada solo permite utilizar el modo SPI 0,0. Además, el puerto SPI del ENC28J60 requiere que SCK este idle (inactivo, desocupado) en estado bajo; no puede seleccionarse la polaridad del reloj. A través del puerto SPI pueden enviarse comandos y datos al chip, los datos son aceptados en cada flanco de subida de la señal SCK. Los datos de salida están presentes en la linea SO, en cada flanco de bajada de SCK. El pin CS# debe mantenerse bajo durante estas operaciones, y volver a estado alto cuando finalizan. Figura 24: Diagramas de señales del puerto SPI Pantallazo.png (30.74 KB - descargado 456 veces.) « Última modificación: Marzo 25, 2010, 04:39:52 por Ariel » Ariel Global Moderator dsPIC Desconect En línea Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #18 : Marzo 25, 2010, 04:49:26 » ado Sexo: Mensajes: 5438 Set de instrucciones SPI La operación del ENC28J60 depende por completo de los comandos que recibe del host a través de la interfase SPI. Esos comandos son instrucciones, de uno o mas bytes, que pueden utilizarse para acceder a la memoria y a los bufferes Ethernet. Como mínimo, las instrucciones poseen un código de 3 bits seguido por un argumento de 5 bits que representa un registro o una constante. La tabla siguiente muestra los códigos de cada operación disponible: Figura 25: Set de instrucciones SPI Pantallazo-1.png (43.29 KB - descargado 447 veces.) En línea Ariel Global Moderator dsPIC Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #19 : Marzo 31, 2010, 05:16:39 » Desconect ado Comando para leer registros de control Sexo: Mensajes: 5438 El comandos para leer registros de control (RCR, por Read Control Register) permite al host leer los registros del grupo ETH, MAC y MII en cualquier orden. El contenido de los registros se obtiene mediante un registro especial de la interfase MII. Para más información, ver más arriba la sección “Registros PHY”. El comando RCR comienza poniendo en nivel bajo el pin CS#. Luego se envía el opcode correspondiente (3 bits) , seguido de la dirección del registro (5 bits) mediante los pines SCK y SI. Esta dirección identifica a uno de los 32 registros del banco seleccionado. Si corresponde a un registro del grupo ETH, el dato que contenga el registro seleccionado se enviará mediante SCK y SO, comenzando por el bit más significativo (MSb). Figura 26: Leyendo los registros de control. Si la dirección enviada corresponde a un registro de los grupos MAC o MII, se devolverá primero un byte "de relleno". La operación RCR termina cuando llevamos el pin CS# nuevamente a estado alto. Pantallazo.png (56.38 KB - descargado 427 veces.) En línea Ariel Global Moderator dsPIC Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #20 : Marzo 31, 2010, 05:19:38 » Desconect ado Comando para leer la memoria buffer Sexo: Mensajes: 5438 Este comando (RBM, por Read Buffer Memory) permite al host leer bytes desde los 8Kb de memoria utilizada como buffer de transmisión y recepción. Si se pone en 1 el bit AUTOINC en el registroECON2, el puntero ERDPT será incrementado automáticamente cada vez que se lea un byte. La dirección siguiente es casi siempre la dirección actual mas uno, por lo que esto de mucha utilidad. Sin embargo, cuando se lee el ultimo byte del buffer de recepción (es decir, cuando ERDPT = ERXND), el puntero ERDPT pasará al valor contenido en ERXST, apuntando al primer byte del buffer. Esta característica le permite al hots leer un flujo continuo de bytes sin necesidad de tener en cuenta el tamaño del buffer o la posición del puntero dentro del mismo. Si AUTOINC está en 1 cuando se lee la dirección 1FFFh y ERXND no apunta a esa dirección, el puntero de lectura es incrementado y vuelve a 0000h. El comando RBM comienza cuando se pone el pin CS# en bajo. Luego se envía el opcode RBM, de tres bits y la constante 1Ah de cinco bits a continuación, utilizando los pines SCK y SI (son 8 bits en total). Luego, el ENC28J60 envía el contenido del byte apuntado por ERDPT mediante los pines SCK y SO. Si el host continúa enviando ciclos de reloj mediante SCK sin modificar el estado de CS#, el contenido del byte apuntado por ERDPT será enviado nuevamente (siempre comenzando por el bit más significativo (Msb)), pero como el puntero se habrá incrementado automáticamente, en la practica se va haciendo una lectura secuencial de todo el buffer. El comando RBM finaliza cuando CS# es puesto en alto nuevamente. En línea Ariel Global Moderator dsPIC Re: ENC28J60, el controlador Ethernet via SPI de Microchip al desnudo « Respuesta #21 : Abril 08, 2010, 03:57:51 » Desconect ado Comando para escribir registros de control Sexo: Mensajes: 5438 El comando WCR (Write Control Register) permite al controlador escribir en los registros del grupo ETH, MAC y MII. El proceso de escritura puede efectuarse en cualquier orden y tienen lugar mediante un registro especial de la interfase MII. Para más información, ver más arriba la sección “Escribiendo registros PHY”. Un comando WCR comienza cuando se pone el pin CS# en estado bajo. El opcode del comando WCR se envía al ENC28J60 seguido de 5 bits que especifican cual de los 32 registros posibles dentro de este banco queremos escribir (A4 a A0). Luego que se ha enviado el comando y la dirección se envían los datos a escribir (comenzando por el MSb) . La operación finaliza cuando el host pone nuevamente el pin CS# en estado alto. Si CS# pasa a estado alto antes que los 8 bits del dato hayan sido enviados al ENC28J60, la operación completa queda abortada. Figura 27: Escribiendo los registros de control