Ethernet 2/7

Ethernet

L'Ethernet è un protocollo di tipo CSMA/CD (Carrier Sense Multiple Access / Collision Detect) sviluppato nel 1973, al fine di avere trasmissioni su cavo affidabili in condizioni di traffico moderato.
Da esso deriva lo standard IEEE 802.3 del 1985 (ultima revisione nel 2002) che fa parte della grande famiglia di protocolli IEEE 802.
Questa famiglia definisce standard per numerose tipologie di rete (come Token Ring, Token Bus, WiFi, ecc.), perciò ha pensato di dividere il secondo livello OSI in due sottolivelli, il superiore dei quali, LLC (Logical Link Control), è comune a tutti gli standard, mentre la parte inferiore, il MAC (Medium Access Control), è legato al livello fisico.
Il sottolivello LLC offre diversi servizi solitamente affidati ai livelli superiori e comunque non previsti dal vecchio Ethernet; per questo motivo, l'architettura TCP/IP utilizza il vecchio framing (detto DIX) che non fa uso di LLC, mentre altri protocolli usano lo standard "ufficiale".
Indirizzi MAC ed IP
In una rete Ethernet, quando un pacchetto viene inviato, qualsiasi sistema collegato alla stessa rete lo riceve; è quindi necessario identificare in modo univoco il destinatario ed il mittente (per la risposta). Questo avviene grazie ad un indirizzo MAC di 6 byte, associato a livello mondiale ad ogni singolo NIC (Network Interfare Controller) ovvero ogni dispositivo (scheda di rete o altro) in grado di trasmettere e ricevere dati in una LAN (Local Area Network).

Come sappiamo, pero, un computer è identificato anche da un indirizzo IP, ma nelle reti locali un sistema può essere individuato soltanto attravero il suo indirizzo MAC e quindi esiste un protocollo di conversione tra questi due (protocollo ARP).
Un NIC, per inviare un pacchetto ad un nodo della stessa rete, individua l'indirizzo MAC del destinatario e quindi procede; se invece il pacchetto è destinato ad una rete al di fuori di questa (ad esempio Internet), verrà usato l'indirizzo MAC del gateway (ad esempio un router ADSL) che provvederà ad instradare i dati.
Mentre l'indirizzo IP può essere configurato secondo le esigenze, l'indirizzo MAC è scritto nel NIC in fase di produzione e solitamente non può essere modificato.
L'indirizzo MAC è diviso in due parti di tre byte ciascuna: la prima è assegnata dall'IEEE ad ogni societa che ne fa richiesta; la seconda viene usata per generare indirizzi diversi per ogni scheda prodotta dalla stessa società .
A scopo didattico possiamo utilizzare gli indirizzi assegnati alla Microchip (da 00:04:A3:00:00:00 a 00:04:A3:FF:FF:FF), ma per scopi commerciali, gli indirizzi vanno acquistati.
Il livello MAC (Datalink)
Vediamo ora com'è costituita una trama MAC, ovvero il pacchetto "confezionato" dal livello datalink nello standard IEEE 802.3.

  • Preamble: Formato da una sequenza di 1 e 0 per permettere al ricevitore di sincronizzarsi con il trasmettitore;
  • SFD: Start-of-Frame Delimiter, segnala al ricevitore che sta per iniziare la trama vera e propria.
  • Destination: Contiene l'indirizzo MAC del destinatario.
  • Source: Contiene l'indirizzo MAC del mittente.
  • Length/Type: Secondo lo standard 802.3 questo campo può assumere due significati diversi: se il valore è minore o uguale a 1500, indica la lunghezza del campo dati dove si suppone sia presente un pacchetto LLC che sarà processato dall'ononimo sottolivello, altrimenti indica il protocollo di terzo livello contenuto nel campo dati; in quest'ultimo caso la trama MAC è una trama DIX, quindi non segue un pacchetto LLC, ma i dati vengono passati direttamente al livello 3.
  • Data: qui sono contenuti i dati passati dal livello superiore; la lunghezza minima è di 46 byte, se questo limite non è rispettato, in fase di trasmissione il livello MAC aggiunge un campo di padding per riempire lo spazio rimanente.
  • FCS Frame Check Sequence, costituito da 4 byte per il controllo degli errori (CRC).

Il controller ENC28J60
Il Microchip ENC28J60 è un controller Ethernet 10Base-T (10Mbps su doppino), aderente allo standard IEEE 802.3.
E' costituito da un modulo PHY (livello fisico), un modulo MAC (sottolivello MAC), una memoria RAM di 8kbyte per immagazzinare i pacchetti sia in ricezione che in trasmissione, una serie di registri di configurazione ed un modulo per la comunicazione seriale SPI.
Il chip ha solo 28pin e richiede pochi componenti esterni, perciò può essere facilmente inserito in qualunque progetto.
Revisioni ed Errata
L'ENC28J60, come ogni chip della Microchip, ha un numero di revisione (REVID), quindi ogni chip con un certo REVID può avere alcune differenze rispetto ad un chip con un altro numero.
Per conoscere la versione del chip in possesso ci sono solo due modi: il primo è leggere un registro interno tramite interfaccia SPI; il secondo è chiedere all'assistenza di Microchip, che può rintracciare il REVID tramite il seriale a sette cifre scritto sopra il chip.
La revisione più recente è la B5, e fin'ora è¨ possibile creare software ed hardware in modo tale da non preoccuparsi del numero di revisione; l'unica cosa che cambia a livello hardware è una resistenza, che vedremo tra poco.
Oltre al datasheet del controller, un documento molto importante è l'Errata (relativa ad ogni revisione): in questa sono presenti alcuni problemi del chip e relative soluzioni, nonché le differenze tra una revisione ed un'altra.
L'hardware
Questo è lo schema del circuito da me realizzato per scrivere questo articolo.
L'ENC28J60 è alimentato da una tensione di 3.3V (max 180mA), quindi esistono diverse configurazioni possibili:

  • Per alimentare tutto il circuito (PIC compreso) a 3.3V, può essere utilizzato un PIC18F25J10 o simile, che è in grado di lavorare a 40Mhz anche a questa tensione; altri PIC, invece, funzionano solo a frequenze minori.
  • Alimentando il PIC a 5V, sono necessari degli adattatori di livello (semplici porte logiche CMOS, tipo 74HC08), per le uscite dell'ENC che vanno al PIC (SO, CLKOUT, INT, WOL); gli ingressi del controller (CS, SCK, SI, RESET) sono invece tolleranti ai 5V.
  • I PIC, solitamente, hanno come valore di soglia per distinguere un valore logico 1 in ingresso di 2V, perciò questi traslatori di livello non sembrerebbero indispensabili, come descritto nel datasheet dell'ENC28J60, quindi nel mio schema non sono presenti.

Il controller è progettato per lavorare a 25Mhz, perciò è necessario un quarzo di questa frequenza tra i piedini OSC1 e OSC2, più due condensatori ceramici connessi a massa. Il valore di questi condensatori non è specificato nel datasheet, ma presumo sia attorno ai 15pF.
Può anche essere utilizzato un clock esterno, conesso al pic OSC1, ma deve comunque essere molto preciso (+/- 50ppm).
Un componente importante è RBIAS, il cui valore cambia secondo la revisione del chip: per le revisioni B1-B4 è di 2.7Kohm 1%, mentre per la B5 è di 2.32K 1%; il suo valore è importante per rispettare le specifiche IEEE, perciò è meglio essere sicuri della revisione che si ha in possesso (vedremo poi come fare).
Il datasheet menziona una "ferrite bead", ma non ne specifica il valore: nel mio schema l'ho sostituita con un'induttanza da 1mH.
Ultimi componenti di rilievo sono il connettore RJ45 e relativi filtri (Magnetics): esistono connettori con filtri integrati, oppure connettore e filtri a parte.
Nel mio caso ho usato un connettore ERNI con filtri integrati (attenzione allo schema, la pedinatura potrebbe essere diversa da un altro tipo di connettore).
In ogni caso è indispensabile seguire con attenzione lo schema presente nel datasheet, che riporto di seguito (i trasformatori 1:1 sono i Filtri):

I Magnetics sono delle scatolette nere che si possono recuperare (insieme al connettore) dalle schede di rete.
Note sull'hardware:
- Il pin INT (interrupt) non è utilizzato dal software, perciò se non si intende sfruttare le interruzioni può non essere collegato.
- l'ENC28J60 ha tra le sue caratteristiche l'auto-polarity, ovvero i pin TPIN+ e TPIN-, anche se invertiti, funzionano lo stesso; questo in realtà non è vero (il problema è descritto nell'Errata), quindi è consigliabile un controllo accurato di questi piedini in fase di progettazione/montaggio del circuito.
- Il datasheet consiglia di inserire condensatori ceramici da 0.1uF, per ogni coppia di piedini Vcc-Vss.
Organizzazione della Memoria
La memoria del chip è divisa in due parti: il buffer rx/tx ed i registri di controllo. Ad entrambi si accede tramite l'interfaccia SPI.
Il buffer è una dual port RAM, configurabile in modo da poterla dividere, a piacimento, tra memoria di ricezione e di trasmissione.
La struttura dei registri di controllo riprende quella già presente nei PIC: essa è costituita da una serie di registri a 8bit, divisi in banchi, attraverso i quali è possibile configurare il dispositivo.
Questi si dividono in registri ETH, MAC, MII e PHY; i primi tre si trovano nei banchi di registri, mentre ai registri PHY si accede attraverso i registri MII.

Vedremo la funzione dei vari registri man mano che ne faremo uso.
Leggi anche:
Ethernet
Ethernet 3/7
Ethernet 4/7

Scarica subito una copia gratis
Tags:

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend