2 pontos por GN⁺ 2024-11-12 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
GN⁺ 2024-11-12
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.