sábado, 30 de novembro de 2013

Novidades sobre o ENC28J60!

Pessoal,

Estou a ponto de lançar a terceira aula do Curso Arduino Automation. Mas a cada aula faço estudos e revisões na biblioteca do ENC28J60. Até mesmo porque está ruim de utilizar e até de gravar a aula. A instabilidade do funcionamento da biblioteca Enc28CoreLib.h compromete todo o projeto!

Off-Topic: Consegui alguns avanços também na utilização do Ethernet Shield W5100 com a plataforma Supervisório. O problema é que o Shield Supervisório (link) não é compatível com o W5100, mas estou a ponto de conseguir contornar esse problema também.

Bom, mas o assunto continua o problemático ENC28J60! De tempos em tempos acompanho o trabalho de outros desenvolvedores, pelo mundo, que também contribuem com bibliotecas para essa plataforma.

Existem projetos como o do Turicas, chamado Ethernet_ENC28J60 (link) que foram abandonados e não são atualizados há mais de 2 anos, mas existem projetos como o EtherCard (link) que estão em pleno desenvolvimento! Além, lógico do meu próprio projeto chamado Enc28CoreLib (link), que também está em pleno desenvolvimento!

Foi então que achei uma ponta solta de um novelo e agora estou desenrolando ele. Vamos aos fatos.

  1. Sem querer, descobri que há quatro meses houve uma atualização grande e importante na biblioteca EtherCard
  2. Percebi que a plataforma estava bem madura
  3. Mas não, infelizmente eles ainda não resolveram o problema da segmentação de TCP
  4. Descobri também que eles ainda não sabem usar o DMA Copy do ENC28J60 (link), que já descobri ser uma mão na roda.
  5. Entretanto descobri onde fica a documentação (link)
  6. E também descobri onde fica a lista de BUGs conhecidos (link)
  7. Foi então que vasculhando as "issues", que são as "coisas" ou "acontecimentos" relatados pelos usuários, descobri a Issue #71 (link), que trata exatamente do ENC28J60 agindo como um Web Server e citando a limitação da segmentação TCP.
  8. Muito bem, existe um desenvolvedor apelido "fredycpu" que na Issue #68 (link) conseguiu em 15 de Julho de 2013 uma versão funcional do que ele chama de "Páginas Http Multi-Pacotes para/com Arduino" (original: Multi packets http pages with the arduino)
Concluindo, fredycpu finalmente implementou a funcionalidade de fragmentação TCP em cima da biblioteca EtherCard. Tudo o que eu precisava para finalmente consolidar a base da biblioteca EthernetSup (link).

Mas como nem tudo são rosas, existem problemas. Na verdade, estou em um empasse. O que acontece é que a EtherCard, como 99,99% das bibliotecas Ethernet para o ENC28J60, foi desenvolvido em cima do código do Guido Socher e Pascal Stang.

Já a minha biblioteca Enc28CoreLib é uma implementação do TCP/IP Stack da própria Microchip, desenvolvida originalmente por Howard Schlunder. Além disso, ainda adaptei o código para rodar em baixo da biblioteca Ethernet.h (original do Arduino), como podemos ver na segunda aula do Curso Arduino Automation (link).

Resumindo, tenho duas opções agora:
  1. Abandonar meu trabalho e ajustar a implementação da EtherCard com as modificações da Issue #68
  2. Fazer uma engenharia reversa na opção 1 e ajustar minha biblioteca.
A opção 1 acho que é a melhor, mas só tem um problema. Vamos perder a funcionalidade da biblioteca Enc28CoreLib de funcionar sob a Ethernet.h (original do Arduino).

E o problema com a opção 2 é que é mais demorado de implementar e o Curso Arduino Automation já está muito atrasado! 

Acredito que vou fazer uma implementação parcial para meu funcionamento e no lançamento da quarta aula, lanço uma versão nova oficial da Enc28CoreLib.

É isso aí pessoal, a batalha continua!

P.S.: Quase esqueci! Aprendi um termo novo hoje: "Zero-Copy" (wiki). Eu vi esse termo em uma discussão sobre uma memória DMA para o ENC28J60. O estranho é que o ENC28J60 tem isso através do DMA Copy. Como eles não viram isso?

Abraços,
Renato

2 comentários:

  1. OLÁ RENATO. NA MINHA ÓTICA, MESMO ATRAZANDO O CURSO, DEVIAS CONTINUAR E ADAPTAR SEU PROJETO INICIAL, POIS QUE É DE SEU ESFORÇO PRÓPRIO E A COMPLETA REALIZAÇÃO SE DARÁ AO TÉRMINO DO PROJETO INICIADO. NÃO O ABANDONE, É UM FILHOTYE SEU. MESMO QUE DEMORE MAIS.

    ResponderExcluir
  2. Concordo 100% com o Byte Scribe. Eu mesmo teria orgulho de usar uma biblioteca oficial sua.

    ResponderExcluir