Escolhendo um Shield Ethernet para o Arduino

Se você prestar atenção, perceberá  que os shields para a conexão do Arduino a redes Ethernet se dividem em dois grupos, com faixa de preços diferentes: um baseado no chip W5100 e outro no chip ENC28J60. Para entender a grande diferença entre eles é preciso conhecer um pouco sobre redes locais.



As Camadas da Rede 


Quando se estuda redes, uma das primeiras coisas que se aprende é o modelo OSI, que organiza as funções de uma rede em camadas. A divisão em camadas é importante para poder domar a complexidade das redes e facilitar a substituição de partes sem afetar o todo.

Muitas implementações reais não seguem à risca o modelo OSI, mas também dividem as funções em camadas. Vou falar aqui nas redes Ethernet usando o protocolo TCP/IP, que é o caso mais comum atualmente. O TCP/IP está organizado em 4 camadas:


Quando uma mensagem é passada de uma camada para a inferior são anexadas informações adicionais (tipicamente cabeçalhos). Quando a mensagem faz o caminho inverso, estas informações são retiradas. Desta forma temos uma "conversa virtual" de cada camada na origem com a respetiva camada no destino.

A Camada Enlace (Link)

A camada Enlace engloba o hardware (a interface de rede) e o software que a controla (driver). Esta camada é normalmente dividia em duas partes: PHY e MAC. A subcamada PHY é o nível físico: a geração e interpretação dos sinais elétricos que correspondem aos bits e a sua conversão em bytes. MAC é o controle do acesso do meio (Media Control Access). Nas redes locais temos múltiplos dispositivos conversando através de um único meio, que precisa ser compartilhado; o MAC é o mecanismo que faz isto. No caso da Ethernet, temos um endereço de hardware (o endereço MAC) que é usado para determinar as origens e destinos dentro de um trecho da rede física e um procedimento para evitar que dois dispositivos tentem transmitir simultaneamente (e detectar e se recuperar caso ocorra esta colisão). A Ethernet trabalha com pacotes com até 1500 bytes de dados. 

A Camada Rede (Network)

A camada de rede (IP) cria um endereçamento lógico (o endereço IP) e trata do roteamento de pacotes entre subredes. Do ponto de vista de comunicação, o protocolo IP é bastante pobre, é um mecanismo não confiável e que não armazena estado. Ele não verifica se um pacote enviado chegou ao outro lado nem garante que os pacotes chegarão ao destino na mesma ordem em que foram enviados. A única garantia é que os pacotes passados para a camada de cima estão íntegros (pelo menos quanto ao checksum utilizado). O IP suporta pacotes de até 65535 bytes, eles serão fragmentados conforme o limite da camada de enlace.

A Camada de Transporte

No TCP/IP a camada de transporte possui dois protocolos: UDP e TCP. O protocolo UDP é mais simples, com as mensagens (datagramas) sendo independentes e não existindo garantia de entrega. Cada datagrama corresponde a um pacote IP, exceto pela eventual necessidade de fragmentação. O que o UDP acrescenta ao IP é o conceito de portas, que é usado para rotear as mensagens para a aplicação adequada.

O protocolo TCP cria uma conexão confiável entre duas aplicações (identificadas também por portas), garantindo que bytes enviados em uma ponta chegarão ao outro lado e na mesma ordem (ou então sinalizará que a conexão foi interrompida). A aplicação não trabalha mais com pacotes, mas sim com um stream de bytes. Para isto, o TCP precisa manter informações sobre as conexões ativas e utilizar buffers internos para retransmitir, agrupar e re-ordenar pacotes.

O ENC28J60

Este CI (documentação aqui) implementa a camada Enlace. Ele possui um buffer de 8Kbytes, que é compartilhado pela transmissão e recepção. Ele é capaz de tratar o endereçamento MAC e faz automaticamente a detecção de colisão e a retransmissão do pacote neste caso.

O W5100

O W5100 (documentação aqui) possui, além da camada Link, as camadas de rede e transporte. Ele implementa internamente os protocolos IP e TCP (além dos protocolos acessórios ARP, ICMP e IGMP), suportando até quatro conexões TCP simultâneas. O buffer de transmissão e recepção é de 16 KBytes. Existem outras limitações, como o não suporte à fragmentação de pacotes IP.

Qual Shield Escolher?

Na minha opinião, salvo situações especiais, o melhor é gastar um pouco mais e usar o W5100.

Ao usar o Shield ENC28J60 o stack TCP/IP irá rodar no Arduino. Mesmo adotando algumas restrições, o protocolo TCP/IP é pesado, principalmente em termos de memória.Um Arduino UNO tem apenas 2K de Ram, o Mega sobe isto para 8K. As bibliotecas que eu vi não me inspiraram muita confiança, implementando um conjunto bem restrito dos protocolos e uma API desajeitada para a aplicação.

Com o W5100, o código no Arduino pode se concentrar na aplicação. A documentação sugere que a implementação dos protocolos é bem mais completa (mas como é código fechado não dá para conferir a qualidade). Outra vantagem é que o tratamento da comunicação corre em paralelo ao da aplicação. Uma vantagem que não deve fazer muita diferença nas aplicações típicas é que o W5100 suporta comunicação a 10 e 100 Mbps (o ENC28J60 somente a 10). Por último, as bibliotecas e exemplos do shield com W5100 fazem parte do pacote oficial do Arduino, o que pode economizar vários minutos de buscas e comparações na internet.

O ENC28J60 pode ser interessante se você quiser experimentar com o protocolo TCP/IP ou se aventurar com outros protocolos além dele (existem muitos outros protocolos que podem ser usados sobre Ethernet, a maioria deles assunto de arqueologistas).
Artigo interessante retirado do Blog de Daniel Quadros http://dqsoft.blogspot.com.br/2012/11/escolhendo-um-shield-ethernet...
Para quem não conhece, visite o blog que tem sempre informações interessantes. 

Exibições: 867

Responder esta

Respostas a este tópico

Mto bom !!!

Parabéns Daniel Quadros e Luis Bulek.

E vou adotar essa: "assunto de arqueologistas"

Gostei dessa também.

Esse artigo bate com a minha experiência com Atmega na era pré-Arduino: W5100 para TCP/IP, ENC para UDP.

O segundo você acha kits e shields a preço de banana (Atenção, 90% dos Ethernet Shields Xingling usam o ENC, por mais que se digam "clones" do original), além de encontrar no Brasil no formato DIP. Mas pra TCP/IP a carga fica toda em cima do processador e não adianta, vai travar.

Os parabéns todos pro Daniel, eu só copiei dele para compartilhar aqui.

Otimo artigo postado Luis ( nem só de ajuda para TCC tem-se no forum ).

Já utilizei os dois shields, e realmente o shield com W5100 é bem superior, além de possuir soquete para leitura de cartões SD.

Sds,

ola, liguei cabo de rede no shield w5100...no meu pc tenho wi-fi....como configurar o arduino eo shield w5100...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço