O que é o protocolo leve da Internet (LwIP)?

O que é o protocolo leve da Internet (LwIP)?

Conectar microcontroladores embarcados à Internet é uma tarefa crucial em aplicações modernas. Os controladores incorporados, especialmente em dispositivos de consumo e wearables, agora exigem essencialmente ping online. Isto é mais importante à medida que os dispositivos estão ficando mais inteligentes. Conectar-se à Internet não é apenas crucial, mas também uma tarefa difícil. A pilha TCP/IP típica consome muitos recursos para ser implementada por bare metal. Os microcontroladores nunca podem implementar a pilha TCP/IP devido à pouca memória, RAM e poder computacional, portanto, eles exigem algo leve para emular a mesma funcionalidade.

O Light-Weight Internet Protocol (LwIP) é uma pequena implementação independente de um conjunto de protocolos TCP/IP para sistemas embarcados. Originalmente desenvolvido por Adam Dunkels no Instituto Sueco de Ciência da Computação (SICS), o LwIP é uma pilha TCP/IP gratuita e de código aberto agora mantida em Savannah. Vários fabricantes de sistemas embarcados de renome adotaram LwIP, como Texas Instruments, Altera Corporation, Xilinx, STMicroelectronics, Freescale e Analog Devices, para drivers de rede de seus dispositivos embarcados. O protocolo é usado até mesmo por Arduino Ethernet Shield e placas de desenvolvimento WiFi como ESP32 e ESP8266 para implementar funções de rede. Qualquer fabricante de hardware pode usar o protocolo com o sistema operacional ou driver de rede em sua plataforma como um protocolo aberto sob a licença BSD modificada. O protocolo também pode ser usado em aplicativos, desde que o sistema operacional subjacente suporte a porta LwIP. A fonte do LwIP está disponível como um repositório Git.

LwIP permite implementar uma pilha TCP/IP completa em sistemas embarcados enquanto consome recursos e memória mínimos do sistema. A pilha é até modificada para caber nas bibliotecas do Arduino. A pilha requer apenas 40kb de memória ROM/flash e consome apenas dezenas de kilobytes de RAM durante o tempo de execução. Até mesmo uma API personalizada está disponível para a pilha que não requer cópia de dados.

Do que o LwIP é capaz?
LwIP permite uma pilha TCP/IP completa em um espaço menor que 40 kb. Ele pode ser usado para implementar os seguintes protocolos de rede em um aplicativo incorporado.

Protocolo de Internet (IP): LwIP permite a manipulação de endereços IPv4 e IPv6 e o ​​encaminhamento de pacotes através de múltiplas interfaces de rede (netifs). Ele pode atribuir um endereço IP estático à interface de rede, obter um endereço IP do servidor DHCP ou escolher um endereço IP da sub-rede local. Pode até atribuir um endereço IP a uma interface de rede.

Protocolo de mensagens de controle da Internet (ICMP): LwIP permite manutenção e depuração de rede via protocolo ICMP. Os protocolos suportados incluem Echo Reply/ping, Destination Unreachable e Time Exceeded.

Descoberta de vizinho (ND): LwIP permite a descoberta de vizinhos e a configuração automática de endereços sem estado para IPv6 em conformidade com os padrões RFC 4861 (para descoberta de vizinhos) e RFC 4862 (para configuração automática de endereços).

Descoberta de ouvinte multicast para IPv6 (MLD): LwIP fornece descoberta de listener multicast para IPv6 em conformidade com o padrão RFC 2710. Porém, ele não oferece suporte a MLDv2.

Protocolo de datagrama de usuário (UDP): LwIP inclui extensões UDP-lite experimentais compatíveis com os padrões RFC 768 (UDP), bem como RFC 3828 (UDP leve).

Protocolo de controle de transmissão (TCP): LwIP permite protocolo TCP compatível com RFC 793 (Protocolo de Controle de Transmissão), RFC 1122 (Requisitos para Hosts de Internet), RFC 2001 (Algoritmos de Início Lento TCP, Prevenção de Congestionamento, Retransmissão Rápida e Recuperação Rápida), RFC 2581 (Controle de Congestionamento TCP) , Padrões RFC 3390 (Aumentando a janela inicial do TCP).

Protocolo de gerenciamento de grupo da Internet (IGMP): LwIP permite o gerenciamento de tráfego multicast compatível com IGMP versão 0, IGMP versão 1, IGMP versão 2 e IGMP versão 3.

Protocolo de resolução de endereço (ARP): LwIP permite traduzir o endereço de hardware em um endereço de camada de rede para Ethernet.

Protocolo ponto a ponto (PPP): LwIP permite protocolo ponto a ponto sobre Ethernet (PPPoE) e também sobre Serial (PPPoS).

O LwIP pode configurar cliente DHCP, cliente DNS e cliente SNMP em uma plataforma. Além disso, permite configurar um controlador como um servidor HTTP/HTTPS, cliente SMTP/SMTPS, cliente MQTT, cliente SNTP, servidor de nomes NetBIOS, servidor TFTP ou respondedor mDNS. Inicialmente, o LwIP foi projetado para rodar em ambientes de thread único; suporte multi-threading foi adicionado a ele eventualmente. As funcionalidades de seus diversos módulos, incluindo api.h, sockets.h, sys.h, netbuf.h, pppapi.h, netifapi.h e netdb.h podem ser executadas com segurança em threads separados. Isso significa que você pode executar vários protocolos, incluindo IPv4/IPv6, PPP etc. simultaneamente no controlador incorporado. As interfaces de rede (IoT e rede) suportadas pelo LwIP incluem WiFi (ponte IEEE 802.1D), LPWAN ((6LoWPAN), Bluetooth (6LoWPAN sobre BLE), interfaces PPP, interfaces SLIP e Zigbee (ZEP).

Aplicações de LwIP
A pilha LwIP ajuda a implementar redes incorporadas. Uma aplicação comum do LwIP é a implementação de redes WiFi incorporadas em bare metal (microcontroladores). Placas de desenvolvimento WiFi populares como ESP8266 e ESP32 utilizam pilha LwIP para funcionalidades de rede sem fio. As plataformas de microcontroladores como o Arduino usam a pilha para comunicação via Ethernet.

Muitos desenvolvedores acham mais fácil implementar funções de rede em Linux embarcado ou RTOS. Porém, mesmo micro-RTOs podem ser um exagero para aplicativos WiFi incorporados. Com um pouco de programação de rede na pilha LwIP, aplicações TCP/IP completas podem ser desenvolvidas em plataformas de microcontroladores. Esses aplicativos podem executar protocolos da camada de aplicativo como HTTP, TCP e UDP em um cliente pequeno, como um microcontrolador.

Por exemplo, veja como o ESP8266/ESP32 pode ser configurado como um cliente/servidor TCP capaz de carregar ou hospedar uma página HTML.

Para vários casos de uso de IoT, a execução de protocolos da camada de aplicação em um microcontrolador pode ser uma situação vantajosa para todos, em comparação com a dependência de protocolos como MQTT ou CoAP, que são apenas capazes de enviar mensagens latentes pela Internet. A pilha LwIP permite configurar um microcontrolador como cliente HTTP, servidor HTTP, cliente MQTT, MDNS, cliente SMTP, SNTP, respondedor NetBIOS, servidor Iperf, agente SNMP e servidor TFTP. Se um aplicativo de rede incorporado não exigir escalonamento ou lidar com problemas de segurança de rede ou restrições de tempo, a pilha LwIP poderá ser a melhor opção. Ainda assim, um desenvolvedor deve cuidar das expectativas do aplicativo incorporado pretendido e escolher sabiamente se a pilha LwIP é suficiente ou se a pilha de rede subjacente ao Linux/BSD é adequada. A maioria dos desenvolvedores de redes embarcadas considera a pilha LwIP confortável de usar, pois já estão familiarizados com o conjunto TCP/IP e 802.11 PHY.

O LwIP tem muito a oferecer no espaço de redes embarcadas que os principais fabricantes embarcados adotaram para seus drivers Ethernet e WiFi. LwIP é uma pilha de rede em sistemas operacionais como ReactOS e Genode. Em alguns sistemas operacionais baseados em Linux/Unix, a pilha é utilizada para implementar servidores de rede.

Para plataformas embarcadas populares como Arduino e ESP8266/ESP32, o LwIP está disponível através da API de soquetes BSD. Assim, os entusiastas da eletrônica podem integrar recursos LwIP em um aplicativo embarcado acessando o módulo API, como o módulo soquete. Muitos sistemas operacionais de tempo real (RTOS) dependem da pilha LwIP para implementar funções de rede.

Os designers incorporados podem encontrar drivers de dispositivos baseados em LwIP já disponíveis para diversas plataformas. Caso contrário, eles estão livres para utilizar a pilha LwIP dentro de um sistema operacional ou driver de rede para implementar uma rede incorporada em uma plataforma específica. Se uma plataforma executa um sistema operacional contendo uma pilha LwIP, os desenvolvedores podem utilizar diretamente a pilha no código do aplicativo.

Implementação da pilha LwIP
A pilha LwIP está disponível por meio de três tipos de interfaces de programação de aplicativos – APIs brutas, APIs de estilo sequencial e APIs de soquete estilo BSD. As APIs brutas são APIs de baixo nível não seguras para threads que podem ser usadas para integrar LwIP no sistema operacional ou no nível do kernel. Essas APIs permitem que você faça retornos de chamada otimizados para desempenho máximo com espaço mínimo. As APIs de estilo sequencial fornecem funções de bloqueio que podem ser chamadas em threads TCP/IP. APIs de soquete estilo BSD fornecem funções thread-safe que são chamadas em threads não-TCP/IP. As APIs sem cópia não sobrecarregam a plataforma subjacente (controlador).

Para plataformas de microcontroladores como Arduino e ESP, você pode encontrar a pilha LwIP já implementada em algumas bibliotecas. As bibliotecas específicas da plataforma podem implementar a pilha intrinsecamente ou como um driver LwIP explícito. Alguns firmwares incorporados, como o MicroPython, também usam e suportam a pilha LwIP.

LwIP com Arduino
A biblioteca Ethernet para a plataforma Arduino é baseada na pilha LwIP. A biblioteca pode funcionar com Arduino Ethernet Shield, Arduino Ethernet Shield 2, Leonardo Ethernet e placas de rede baseadas em W5100/W5200/W5500. Para usar explicitamente a pilha LwIP no Arduino para funções de rede, uma fonte LwIP modificada de acordo com as bibliotecas do Arduino também está disponível. Uma biblioteca Ethernet STM32 para Arduino também é baseada na pilha LwIP e segue a API Ethernet do Arduino. Ele pode ser usado para programar aplicações Ethernet em placas baseadas em STM32. Algumas outras bibliotecas Arduino baseadas na pilha LwIP incluem o seguinte.

lwIP: uma porta da biblioteca LWIP para Arduino.
ESP8266-ping: usado para enviar e receber mensagens de ping no ESP8266.
QNEthernet: biblioteca Ethernet baseada em lwIP para Teensy 4.1.
AsyncWebServer_Ethernet: Biblioteca de servidor HTTP e WebSocket assíncrono para ESP8266.
InqPortal: usado para servidor IoT completo em ESP8266.
RTT-Ethernet: usado para conectar placas STM32 com Ethernet.

LwIP com ESP8266 e ESP32
A pilha LwIP está disponível para ESP-IDF como API de soquete BSD. A API pode ser usada para configurar ESP8266/ESP32 como cliente TCP, servidor TCP, cliente UDP, servidor UDP, multicast UDP e cliente HTTP ESP. Algumas bibliotecas Arduino também estão disponíveis para ESP8266 (mencionadas acima), que são baseadas na pilha LwIP. Essas bibliotecas podem configurar o ESP8266 para Ethernet ou como um servidor IoT.

Drivers de dispositivo LwIP
Os desenvolvedores profissionais de sistemas embarcados já podem encontrar drivers de dispositivos LwIP para diversas plataformas. Os drivers estão disponíveis para CS8900A, MCF5223X, STM32F107xx, STM32F217, Altera NIOS II TSE, TI Stellaris LM3S, ARM Cortex-M3 FM3 MB9BD10S/T, MB9B610S/T, MB9B210S/T, TI RM48xx/RM46xx/TMS570xxx/RM57xx/TMS570LCxx , Analog Devices Microcontroladores Blackfin 526/527/536/537, TI C674x, ARM Cortex-M(3), STM32F4x7 e PIC32MX795H512L. Um driver genérico de camada de link LwIP também está disponível para chips Ethernet. Se uma plataforma exigir a integração da pilha LwIP no kernel Linux/BSD ou em um driver de rede, os desenvolvedores poderão consultar o manual para desenvolvedores da plataforma LwIP. Para integrar a pilha LwIP em um aplicativo, o manual para desenvolvedores de aplicativos LwIP é o guia disponível.

LwIP em sistemas operacionais em tempo real
Muitos sistemas operacionais de tempo real como FreeRTOS, RTLinux, QP, mbed, eCos e eCos Pro incluem uma porta LwIP junto com uma pilha de rede derivada de BSD. Um monitor de inicialização Micromonitor/uMon também usa uma pilha LwIP como complementar.

Conteúdo Relacionado

Como solucionar problemas comuns do ESP32-CAM
ESP32-CAM é um módulo de câmera compacto que combina...
Qual o papel dos sensores automotivos nos veículos modernos?
Uma rede de sensores é incorporada em todos os...
Como escolher um controlador de e-bike
O controlador do motor é um dos componentes mais...
Um guia para padrões USB de 1.0 a USB4
A evolução dos padrões USB foi fundamental para moldar...
Schurter aprimora série de seletores de tensão com revestimento prateado
A SCHURTER anuncia um aprimoramento para sua conhecida série...
A interface serial PCI fornece conectividade confiável em ambientes extremos
A Sealevel Systems anuncia o lançamento da Interface Serial...
STMicroelectronics expande portfólio de conversão de energia com diodos Trench Schottky de 100 V
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
O que são Sistemas Globais de Navegação por Satélite (GNSS) e como são usados?
Determinar uma localização precisa é necessário em várias indústrias...
O conversor GaN de 50 W da STMicroelectronics permite projetos de energia de alta eficiência
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
Samsung e Red Hat farão parceria em software de memória de próxima geração
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
Primeiro MPU single-core com interface de câmera MIPI CSI-2 e áudio
O mercado embarcado tem uma necessidade de soluções de...
A influência de diferentes enrolamentos de armadura CC no desempenho
O impacto dos enrolamentos da armadura CC no desempenho...
Decodificação de fluência no motor de indução para melhor desempenho
Você provavelmente já se deparou com o termo 'arrastar'...
Compreendendo os isoladores de suporte em sistemas elétricos
Você provavelmente tem um Isolador de suporte Se você...
Explore Stay Insulator – segurança, instalação e manutenção
Você provavelmente já viu permanecer um isolante sente-se em...
Mais segurança e eficiência com o isolador de manilha
Você provavelmente já viu Isoladores de manilha entronizados em...
Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.