Communication
Ethernet avec la puce ENC28J60
:
En 2004,
Microchip présente le
premier contrôleur Ethernet 10BASE-T
(10Mbits/s) référencé ENC28J60 se laissant facilement
piloter
via un bus SPI (Serial Programming
Interface) par un microcontrôleur
et ne comportant que 28 broches pour un boitier au format DIL.
Ce
contrôleur Ethernet dispose
d'un module MAC et PHY intégrés
et de 8ko de mémoire
tampon permettant de minimiser la complexité de la mise en oeuvre
et le coût. Les applications
visées sont : la VoIP, l'automation
industrielle, l'automation de bâtiment,
l'instrumentation, la sécurité
et la domotique.
Jusqu'à
lors, on ne trouvait sur le marché
que des contrôleurs Ethernet tels
que le RTL8019AS de Realtek. Ce circuit n'existait
qu'au format CMS (boitier PQFP) composé
d'une centaine de broches dont
le tiers étaient destinées
au bus de communication parallèle
(adresses et données). Bref,
sa mise en oeuvre était pour
le moins ardue que ce soit sur le plan
du routage du circuit imprimé
que pour la soudure du composant.
Ainsi,
grâce
à son faible nombre de broches
faciles à souder, le ENC28J60 permet une intégration
sensiblement facilité dans
votre réseau domestique
en lui couplant un microcontrôleur afin
de piloter les fonctionnalités Ethernet.
Disponible en boitier DIL (DIP), il reste la
solution la moins chère pour
la mise en oeuvre d'un projet connecté
au réseau Ethernet.
[
Datasheet du ENC28J60
]
Note
:
Deux frères au ENC28J60
existent affichant de meilleures performances, le ENC624J600 et le ENC424J600 en T-BASE100
(100Mbits/s) mais nécessitent un
microcontrôleur très performant afin
d'assurer les cadences élevées de transfert
sur le réseau. De plus ce circuit
n'existe qu'en boitier CMS ne
simplifiant guère leur mise oeuvre
pour l'amateur.
Présentation
de l'interface matérielle du ENC28J60 :
Principales
entrées et sorties :
Le
circuit ENC28J60 dispose comme
nous l'avons vu précédemment,
d'un bus de communication nommé
SPI. Ce bus est désormais
un standard industriel reconnu permettant
la transmission synchrone de données
séries entre un
maître et un ou plusieurs esclaves (pas
de limitation dans le nombre d'esclaves
en théorie). La communication
s'effectue
en Full Duplex et peut monter
jusqu'à 20MHz pour le ENC28J60 permettant
aux données de circuler simultanément
dans les deux sens contrairement au
bus I²C de Philips (Half Duplex) beaucoup plus
lent.
Représentation graphique en
boitier DIL du circuit ENC28J60 (d'autres types
de boitiers sont disponibles chez Microchip)
:
Représentation des
principales connexions électriques
du circuit ENC28J60 :
Le bus
SPI du ENC28J60 est composé de
4 liaisons principales
: SCK (entrée) : Clock.
Ligne d'horloge. SO ou MISO (sortie) : Master
Input - Slave Output. Ligne de données
séries en sortie. SI ou MOSI (entrée) :
Master Output - Slave Input. Ligne de
données séries en
entrée. CS (entrée) : Chip
Select. Ligne de sélection de
l'esclave.
Le ENC28J60
dispose également de 2 liaisons électriques
optionnelles associées au bus
SPI : INT (sortie) : Ligne d'interruption
pouvant être activée pour
détecter différents états
de l'interface réseau comme par
exemple, une condition de dépassement
de capacité de type overflow
du buffer de réception. WOL (sortie) : Ligne d'interruption
permettant d'implémenter la fonction
Wake-On-Lan. Notez que cette sortie
n'est pas officiellement décrite
par Microchip dans la datasheet initiale
du circuit mais on la retrouve sur d'autres
documents du constructeur.
Les
connexions différentielles TPout et TPin sont reliées
au réseau Ethernet
via un transformateur réseau d'isolement conçu
spécifiquement pour ce type d'application.
Toutefois, aujourd'hui bons nombres
de constructeurs intègrent directement
le transformateur au sein
même de l'embase RJ45 simplifiant ainsi
la mise en oeuvre du circuit.
Deux
leds permettent de connaitre le statut ainsi que l'état de la connexion
Ethernet sur le réseau.
Note
: Dans
les applications présentées
sur ce site à base de ENC28J60,
nous n'utiliserons pas les deux sorties INT et WOL.
Principaux
blocs fonctionnels intégrés
au ENC28J60 :
Le
ENC28J60 dispose de plusieurs blocs fonctionnels que
nous allons décrire succinctement
:
Une interface SPI permettant
la communication avec l'extérieur.
Une
série de registres permettant
de contrôler et de surveiller le fonctionnement
global du circuit.
Une
mémoire RAM de 8ko permettant la mémorisation momentanée
des octets reçus ou
à envoyer sur le réseau
Ethernet.
Un circuit aiguilleur pour
l'accès à la mémoire RAM.
Cet aiguilleur permet de sélectionner
un des trois éléments
: la logique de réception,
la logique d'émission
ou le contrôleur DMA (Direct
Memory Acces). Le DMA permet d'accéder
aux octets enregistrés en RAM
pour par exemple, en calculer la somme
de contrôle (checksum)...
Un module
MAC répondant aux
spécifications Ethernet IEEE 802.3 représentant
un sous niveau du Data Link nécessaire
au partage du canal de transmission.
Un module
PHY matérialisant
la logique du niveau physique, c'est à
dire du plus bas niveau prévu
dans le modèle ISO/OSI. Il se
charge de traduire les signaux électriques
provenant du câble réseau
en fonction de la codification utilisée,
c'est à dire le codage Manchester.
Pour
mémoire ce codage utilisé
depuis de très nombreuses années
est caractérisé pour chaque temps de bits d'une
transition du signal. Dès
lors, on peut retrouver très
facilement la fréquence d'horloge ayant
engendrée les paquets de bits
sérialisés transmis sur
le réseau.
Interconnexion
physique avec l'extérieur :
Régulateur
et oscillateur du ENC28J60 :
Le régulateur est utilisé
afin de stabiliser la tension en interne
à 2,5V qui est dispatchée
ensuite sur l'ensemble des modules du
circuit le tout à partir d'une
alimentation électrique externe
de 3,3V.
L'oscillateur est cadencé
par un quartz externe de 25MHz oscillant sur sa
fondamentale. Si ce n'est pas
le cas, il est impossible d'établir
un lien sur le réseau Ethernet.
Dans ce cas, il faudra légèrement
jouer sur les valeurs des deux
condensateurs céramiques de part
et d'autre du quartz, tout en mesurant
la fréquence de l'horloge sur
la broche 24 du circuit.
Oscillogramme
présent sur la broche 24 du ENC28J60 pour
une fréquence d'horloge de 25MHz.
Cliquez sur l'image ci-dessus pour l'agrandir
Sections
analogiques associées
au circuit ENC28J60 :
L'amplificateur
à sorties différentielles
TPout+/-
nécessite une résistance
de polarisation externe Rbias
qui détermine l'amplitude du signal de sortie.
Une valeur incorrecte peut empêcher l'ENC28J60 de communiquer
avec d'autres périphériques
sur le réseau. Les recommandations de Microchip indiquent que la broche 14 référencée
Rbias doit être reliée
à une résistance externe
à
1%. Toutefois la valeur
de cette résistance diffère selon
la révision du silicium du circuit
ENC28J60 que
vous aurez entre vos mains.
Ainsi,
afin
de ne pas transgresser les spécifications Ethernet IEEE 802.3,
Microchip recommande d'utiliser :
Pour les révisions B1 et B4 => Rbias = 2,74k à 1%.
Pour les révisions B5 et B7 => Rbias = 2,32k à 1%.
|
Rev
B1
|
Rev
B4
|
Rev
B5
|
Rev
B7
|
Valeurs
en binaire (Registre
EREVID)
|
%0000
0010
|
%0000
0100
|
%0000
0101
|
%0000
0110
|
Valeurs
en décimal (Registre
EREVID)
|
2
|
4
|
5
|
6
|
Datasheets
Errata
|
[
Rev B1
]
|
[
Rev B4
]
|
[
Rev B5
]
|
[
Rev B7
]
|
Valeur
de Rbias (1%)
|
2,74k
|
2,74k
|
2,32k
|
2,32k
|
Malheureusement
il n'existe aucun marquage sur le
corps du ENC28J60 vous permettant de
déterminer à vu d'oeil
la valeur de Rbias à employer. Le seul moyen
consiste à lire le numéro de révision stocké
dans le silicium au sein du registre EREVID.
Table
de contrôle d'une partie des registres
du ENC28J60
Dans
le cadre des applications présentes
sur le site internet, le logiciel
"Configuration du ENC28J60"
librement téléchargeable
à la page [
Configuration
ENC28J60 ]
vous
permet très simplement de connaitre
la valeur du numéro de révision du silicium
stocké dans le registre EREVID.
En pratique,
l'influence de la valeur de Rbias joue un rôle
déterminant sur la stabilité de la
connexion Ethernet établie sur
votre réseau local. En effet,
si vous utilisez
une valeur de Rbias inadaptée,
votre application sera néanmoins
reconnue par votre réseau
lors de sa mise sous tension,
mais en
revanche, elle risque de ne plus être détectée par
votre routeur au
bout d'un certain laps de temps (quelques
minutes à quelques heures selon
les cas). Ceci a été confirmé
par de multiples essais sur quatre exemplaires du
ENC28J60. D'où
l'intérêt de connaitre
le numéro de révision
afin de placer la valeur de la résistance Rbias recommandée
par Microchip.
De
plus sur le plan du circuit imprimé,
il faut apporter un soin tout
particulier au routage
en positionnant la résistance
Rbias le plus près possible de
la broche 14 du ENC28J60 afin de minimiser le bruit sur les
sorties TPout.
Le condensateur de filtrage de 10µF relié
à la broche 1 référencée
Vcap est lui aussi positionné le plus près possible du circuit intégré
lors
du routage du circuit imprimé
afin de minimiser également le
bruit.
Microchip recommande également d'utiliser quatre résistances de
50ohms à 1% aux bornes de Tpout
et Tpin reliées au transformateur réseau.
Dans la pratique nous utiliserons préférentiellement
quatre résistances de
49,9 ohms à 1% afin de ne pas déséquilibrer
l'adaptation d'impédance du transformateur
réseau.
En
gros plan les quatre résistances
de 49,9 ohms à 1%
Transformateur
réseau et embase
MAGJACK :
Les quatre lignes différentielles
Tpout+/- et Tpin+/- sont reliées
au module PHY du circuit, elles-mêmes
connectées au transformateur réseau.
Ces dernières doivent avoir une isolation
en mesure de protéger le dispositif
des décharges électrostatiques
(2kV ou supérieur) et posséder
des bouchons (appelés
aussi "terminators") adéquats
constitués par des résistances de précision.
Structure
interne d'un transformateur réseau.
Aspect
d'un transformateur réseau. Ici
le FB2022.
Dans
le cadre des projets présentés
sur ce site, nous avons fait appel à
une embase RJ45 isolée 10BASE-T intégrant directement le
transformateur
réseau
(embase appelée aussi MAGJACK).
Les caractéristiques
de cette embase RJ45 avec transformateur
sont compatibles avec les spécificités
du ENC28J60, distribuée
en France par [
Lextronic
]
sous
la référence "Embase RJ45 Isolée
BS-RB10072".
Aspect
de l'embase avec transformateur intégré.
Schéma
électrique interne équivalent
de l'embase avec transformateur.
Note
:
Un MAGJACK équipé des 2 leds intégrées n'a
pas été retenu dans les
applications présentées
sur le site internet de part
leur faible disponibilité chez
[
Lextronic
]. Toutefois, rien ne
vous empêche d'utiliser une telle
solution mais il vous faudra revoir
sensiblement le routage du circuit imprimé
des applications proposées sur
le site.
Enfin
sur le plan pratique,
il importe de monter un petit bobinage sur le point central du transformateur
relié à la paire Tpout (+ et -). Ce petit bobinage à
noyau de ferrite relié
à la tension d'alimentation en
3,3V doit pouvoir supporter
un courant minimum de 100mA, avec pour tâche de
réduire
les perturbations hautes fréquences
véhiculées par la liaison
Ethernet. Dans le cadre des
projets présentés sur
le site internet nous avons eu recours
à une self de choc de type VK200. Cette self disponible
chez la plupart des distributeurs a
donné d'excellents
résultats.
Interfaçage
d'un ENC28J60 alimenté
en 3,3V avec un microcontrôleur fonctionnant
sous 5V :
C'est
l'un des points les plus critiques du
ENC28J60 car ce dernier
ne peut fonctionner
qu'à partir d'une tension d'alimentation
de 3,3V. Ainsi, il convient
de prendre certaines précautions
sur l'interconnexion du circuit avec un microcontrôleur fonctionnant
sous 5V au risque de transformer
votre ENC28J60 en plaque de cuisson au
bout de quelques instants !
Microchip
décrit dans sa datasheet toutes les lignes d'entrée
de l'interface SPI comme "5V tolérant".
Ainsi, nous pouvons relier directement
ces broches au microcontrôleur alimenté sous 5V mais
il est néanmoins plus prudent
d'ajouter une résistance comprise
entre 100 et 300 ohms (pour R10, R11
et R7 du schéma ci-dessous) sur
chacune des entrées CS, SCK
et SI afin d'en limiter le courant. En
revanche, les sorties INT, WOL et SO
devront passer au travers d'un translateur de niveaux en
technologie TTL rapide (74HCT). Microchip propose
deux solutions utilisant soit un
74HCT08 (quad
AND gate)
ou bien un 74HCT125 (quad 3-state
buffer). Après plusieurs recherches
sur internet, une autre solution consiste
à utiliser un
74HCT245 (Octal bus tranceiver).
C'est finalement le 74HCT245 qui a été
retenu dans la mesure où nous
disposions dans nos tiroirs de cette
référence en grand nombre.
Bref,
ce choix est purement arbitraire et
vous pouvez employer l'un de ces trois
circuits pour effectuer la translation des niveaux 3,3V vers 5V.
Attention toutefois, ces trois références
ne disposent pas du même brochage.
Ci-dessous,
voici un exemple d'interfaçage
entre un microcontrôleur quelconque
alimenté sous +5V et un ENC28J60 alimenté
en +3,3V. Dans le cadre de
cet exemple, les trois broches INT, WOL et SO ont été
reliées au 74HCT245. Pour
l'ensemble des projets présentés
sur ce site, seule la broche SO est reliée au 74HCT245 car nous n'utilisons
pas les broches INT et WOL.
Cliquez sur l'image ci-dessus pour l'agrandir
Alimentation
en 3,3V du ENC28J60 :
Le
plus simple et le plus sûr est
d'alimenter l'ENC28J60 au moyen d'un
régulateur dédié
délivrant du 3,3V.
Dans le cadre des projets proposés
sur le site, le LM2937-3,3
en boitier
TO220
a donné d'excellents résultats.
LM2937-3,3V
disponible en autre chez [
Sélectronic
].
Si
vous désirez vous passer d'un
régulateur spécialisé,
vous pouvez également employer la structure classique
présentée ci-après.
Elle est composée d'une diode
zéner de 3,9V,
d'un transistor
Darlington
TIP122
(ou modèle équivalent).
Il faudra ajouter à ce
schéma des capacités de
découplage....
En
respectant ces quelques recommandations
précédentes, votre ENC28J60 doit à peine chauffer
(tiède) au bout de plusieurs minutes de fonctionnement.
Si vous constatez un échauffement
anormal, coupez immédiatement
l'alimentation et vérifiez vos tensions et
votre circuit imprimé.
Implémentation
logicielle
du ENC28J60 :
Le
ENC28J60 comporte une série de registres
et d'instructions décrites
dans la datasheet de Microchip et relativement
difficiles à appréhender. Afin
de faciliter la tâche, [
Microchip
]
propose une pile logicielle (Stack)
TCP/IP écrite en langage C fonctionnant
sur les microcontrôleurs de la
série PIC18, PIC24, dsPIC et les PIC32.
Nul
besoin aux développeurs de connaître
la complexité du
TCP/IP pour l'employer
car Microchip la subdivisée en
niveaux (ou couche) dont chacun permet
d'accéder à un ou plusieurs
autres niveaux de cette pile.
Aspect
de la pile logicielle TCP/IP élaborée
par Microchip
Totalement
libre de droits, les principaux protocoles implémentés
dans la pile Microchip sont :
TCP [ Wikipedia
] UDP [ Wikipedia
] IP [ Wikipedia
] ICMP [ Wikipedia
] DHCP [ Wikipedia
] ARP [ Wikipedia
] SMTP [ Wikipedia
] SNTP [ Wikipedia
] HTTP [ Wikipedia
] FTP [ Wikipedia
] TFTP [ Wikipedia
]
La famille des PIC16 ne peut pas supporter
la pile Microchip car un minimum de 12k de mémoire
programme est nécessaire pour
l'utiliser.
Protocoles
employés dans le cadre des applications
logicielles présentées sur le site :
Nous avons retenu le protocole UDP (User Datagram
Protocol) car il permet d'envoyer et de recevoir des données
très facilement, que ce soit
sur le plan du microcontrôleur gérant
le circuit ENC28J60, mais aussi sur
le plan logiciel sous Windows
ou Android avec des applications écrites
sous Borland Delphi 7 ou bien
sous Basic4Android.
Ces programmes sous Delphi 7
et Android librement téléchargeables
sont disponibles
pour chacune des applications Ethernet
avec le
code source commenté
permettant à tout un chacun de les adapter selon
vos besoins. Consultez
la
page [
Indy
sous Delphi 7 ]
pour télécharger la version
de Borland Delphi 7 Personnel
et d'installer le composant logiciel Indy. Consultez
la
page [
Applications
Android ]
pour connaitre les spécificités
du compilateur Basic4Android.
|