-
Envio de pacotes Ethernet
- O autor queria criar uma série chamada "Networking from scratch" e iniciou um projeto para construir uma pilha TCP/IP em um microcontrolador.
- Este post de blog compartilha a história do envio bem-sucedido do primeiro pacote Ethernet, além das experiências com bugs e depuração ao longo do projeto.
-
Microcontrolador
- O microcontrolador usado é o STM32F401, baseado em ARM Cortex-M4 e operando em até 84MHz.
- Ele tem 96KiB de RAM, oferecendo capacidade suficiente para processar vários pacotes.
-
Ethernet
- Ethernet é um conceito que abrange várias tecnologias e padrões, incluindo hardware de nível físico, formatos de sinal, estratégias de tratamento de colisão no barramento e layout de quadros.
- Neste projeto, é usado o chip W5100 da Wiznet, que incorpora uma pilha TCP/IP em hardware.
-
Problema 1: gritar no vazio
- Foi escrito um driver para se comunicar com o chip W5100, mas a comunicação não funcionava porque os sinais SPI estavam conectados incorretamente.
- O header ICSP do shield Arduino conectava os sinais SPI de forma errada, causando o problema, e a placa foi retrabalhada para corrigi-lo.
-
Problema 2: a essência da comédia
- Mesmo depois de conectar corretamente os sinais SPI, o envio de pacotes Ethernet ainda não funcionava direito.
- Usando um analisador lógico para inspecionar os sinais digitais, foi resolvido um problema de temporização no sinal de seleção de chip, e a comunicação passou a funcionar com sucesso.
-
Problema 3: pacote desconhecido
- No Wireshark, apareciam pacotes incorretos em vez do pacote que havia sido enviado.
- Consultando a biblioteca do Arduino para analisar o problema, foi corrigido um bug que gravava dados em um endereço de memória errado, resolvendo a questão.
-
Moral da história
- Enviar um pacote Ethernet pode parecer uma conquista pequena, mas a experiência com bugs e depuração no projeto tem valor.
- Depuração e criação de ferramentas são partes importantes do processo de desenvolvimento, e entender o sistema por meio de exploração e experimentação é essencial.
- O projeto continua avançando enquanto lida com problemas e bugs em níveis mais altos de abstração.
1 comentários
Comentários do Hacker News
Escrever ferramentas e explorar a depuração sempre vale a pena. No entanto, muitas pessoas não entendem isso e, especialmente em processos de desenvolvimento como o JIRA, muitas vezes não veem o valor da exploração.
A capacidade de criar pequenas ferramentas é o núcleo do programador 10x, e isso costuma ser uma arte praticada nas sombras.
Este é o início de uma série sobre construir do zero a pilha de TCP/IP e de quadros Ethernet em um microcontrolador. Ele usa o chip W5100 para lidar com TCP/IP e oferece suporte a quadros Ethernet pré-construídos.
Há quem esteja mudando a carreira para engenharia de FPGA com foco em Ethernet, e entender as abstrações de rede tem sido extremamente valioso.
Há a opinião de que, em vez de usar um STM32F401 com um shield Ethernet W5100, seria melhor usar uma placa STM32F407 com uma placa Ethernet PHY barata.
A funcionalidade Ethernet geralmente vem incluída como um periférico embutido no microcontrolador.
Foi a primeira vez que viram a nova nomenclatura de MOSI/MISO como main out/subordinate in, e a alternativa COPI/CIPO não parece muito clara.
Para escrever uma pilha de rede no Linux, é possível usar
socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)).As placas STM32 Nucleo têm Ethernet de 100 Mbps embutida, e o software STM32Cube recebe avaliações mistas, mas fornece exemplos que funcionam.
Ethernet lida com quadros, enquanto pacote é um conceito de IP.
Pode-se considerar o ENC28J60, um 'Stand-Alone Ethernet Controller with SPI Interface', mas como ele não tem uma pilha TCP/IP em hardware, é necessária uma implementação em software.