Abstract
In this paper, we demonstrate Pyramid Solutions NetStaX EtherNet/IP Stack working with SEGGER embOS. A port of the EtherNet/IP Stack was developed for this operating system and a working demonstration was presented. The demonstration featured the microcontroller connecting to the local network, getting an IP address via DHCP, then establishing UCMM messages to query the Identity Object of multiple existing Adapter devices.
Design
The following design constraints were used:
- Operating system: Embedded OS (embOS)
- IP Stack: Light Weight IP (LwIP)
- Connectivity: NetStaX EtherNet/IP Scanner Stack
- Microcontroller: STM32H753ZIT6U
- Development Environment: STM32CubeIDE
- Hardware Target: NUCLEO-H753ZI Development Board
- Test Points:
- Target Adapter: EADK Demo running on Ubuntu Linux
- Traffic capture/logging: Wireshark

EtherNet/IP Scanner Stack Updates
Included in the EtherNet/IP Scanner Development Kit (ESDK) are example implementations for different common operating systems. Currently included in the ESDK are examples for both Linux and Windows, as well as a Template folder that outlines what interfaces must be filled in for a custom OS.
For this project, a new port was created for embOS using our existing Template as a starting point.
The primary additions for NetStaX to operate on embOS were to fill in the interfaces for system calls such as the following:
- Memory allocation/de-allocation
- Mutex creation/usage/destruction
- Semaphore creation/usage/destruction
- IP Mailbox object creation/usage/destruction
- Spawning threads

Memory Layout
The following sections describe the basic memory layout for this demonstration. The total memory used was approximately 700 KB.
This demonstration was not fully optimized for production, but also did not include security. The estimated final production code is 1 MB.
System Memory
- ROM
- 2 MB Flash available
- Approximately 300 KB used
- Used for Instructions and on-load values
- 2 MB Flash available
- Time Critical Memory Module (TCM)
- 128 KB Data TCM available
- Unused for this demonstration (saved for future expansion)
- 64 KB Instruction TCM available
- Unused for this demonstration (saved for future expansion)
- 128 KB Data TCM available
- RAM
- D1 Module: 512 KB available
- Approximately 128 KB used
- EmbOS & NetStaX call stacks and heap
- D2 Module: 288 KB available
- Fully allocated
- LwIP and ETH
- D3 Module: 64 KB available
- Unused for this demonstration (saved for future expansion)
- D1 Module: 512 KB available

LwIP Subsystem
- Rx Descriptors
- 96 bytes allocated of 256-byte addressable section
- Tx Descriptors
- 96 bytes allocated of 256-byte addressable section
- Rx Data Pool
- 12 Pools of 1536-byte data and 24-byte header each (18720 bytes total)
- LwIP Heap
- 131048 total bytes allocated (128 KB less 24-byte header)
Testing
The EADK Linux demonstration program was used to simulate 20 separate Adapter devices for which the Scanner running on the STM32 made connections to. For this test, the STM32 would send a Get_Attribute_Single request using UCMM to each Adapter’s Identity Object, then sleep for a random time between 10-30 seconds. This results in a pseudo-random set of traffic which was monitored for 2 days with Wireshark. No issues were observed during this test.
