본문 바로가기

[STM32F746G-DISCO] lwIP 살펴보기

by rudals.kim 2024. 7. 19. 댓글 개
반응형
STM32CubeIDE에서 Ethernet을 사용할 경우 LwIP(Lightweight IP) 라이브러리가 사용됩니다.


LwIP(Lightweight IP)는 임베디드 시스템에서 널리 사용되는 오픈 소스 TCP/IP 스택으로 스웨덴 컴퓨터 과학 연구소 (Swedish Institute of Computer Science)의 Adam Dunkels에 의해 처음 개발되었으며 현재는 전 세계 개발자 네트워크에 의해 개발 및 유지 관리되고 있습니다.

LwIP의 태생 자체가 적은 리소스를 사용하면서 Full Scale TCP/IP 스택을 사용하기 위한 목적으로 개발되어 주로 임베디드 시스템과 같이 리소스가 제한적인 환경에서 주로 사용되며 대략적으로 10KB의 램과 40KB의 롬이 사용될 수 있는 환경이면 사용 가능합니다.

LwIP에 대한 자세한 내용은 아래 홈페이지를 참고하시기 바랍니다.

 

lwIP - A Lightweight TCP/IP stack - Summary [Savannah]

lwIP - A Lightweight TCP/IP stack - Summary Group identification Id: 3159 System Name: lwip Name: lwIP - A Lightweight TCP/IP stack Group Type: non-GNU software and documentation This group is not part of the GNU Project. lwIP is a small independent implem

savannah.nongnu.org


지원되는 Protocol은 아래와 같습니다.

• IPv4 and IPv6 (Internet Protocol v4 and v6)
• ICMP (Internet Control Message Protocol) for network maintenance and debugging
• IGMP (Internet Group Management Protocol) for multicast traffic management
• UDP (User Datagram Protocol)
• TCP (Transmission Control Protocol)
• DNS (Domain Name Server)
• SNMP (Simple Network Management Protocol)
• DHCP (Dynamic Host Configuration Protocol)
• PPP (Point to Point Protocol)
• ARP (Address Resolution Protocol)

LwIP는 아래 3가지 API를 제공합니다.

  • RAW API
  • Netconn API
  • Socket API

각 API 별 특징과 제공 함수는 아래와 같습니다.

 

 RAW API 

- Native LwIP로 event callback 형식으로 동작되며 최고의 성능을 제공하지만 사용하기가 조금 복잡합니다.

 

 Netconn API 

- High-level sequential API로 RTOS환경(MultiThread 환경)이 고려된 API입니다.


 Socket API 

- Windows, Linux 등에서 사용되는 socket 형식의 API입니다.

LwIP에서는 pbuf라는 구조체를 사용하여 Linked List 형식으로 패킷 버퍼를 관리합니다.
next 필드에 다음 버퍼 포인터를 가지고 있으며 패킷 데이터를 가리키는 payload와 데이터 length 등의 필드를 가지고 있습니다.

LwIP에는 사용되는 pbuf는 아래 3가지중의 하나의 형식으로 메모리를 할당받아서 사용됩니다.

PBUF_POOL (미리 할당되어져 있는 메모리풀에서 메모리를 얻어오며 패킷 수신 시 사용됩니다.)
PBUF_RAM (동적으로 메모리를 할당받아 사용되며 패킷 송신시 사용됩니다.)
PBUF_ROM (패킷내용이 변경되지 않는 constant data일 경우 사용될 수 있습니다.)

 

 pbuf API 

- LwIP의 pbuf에서 사용되는 API 함수들로 pbuf.c에서 사용됩니다.

 

반응형

댓글