SIMATIC IOT2040 Ethernet Troubleshooting Fix Ping Timeout on eth0

David Krause12 min read
Industrial NetworkingSiemensTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

SIMATIC IOT2040 Ethernet Troubleshooting: Fix Ping Timeout on eth0 (X1P1)

The SIMATIC IOT2040 is a 32-bit Intel Quark-based industrial gateway designed for edge data acquisition, MQTT bridging, and Modbus/OPC UA aggregation on the shop floor. Despite its rugged packaging, the first commissioning step almost always fails for the same reason: an unanswered ping to the default address 192.168.200.1. This article consolidates the field-verified procedure for restoring link on the X1P1 (eth0) port, isolating the cable versus shield root cause, and validating the IP stack on the Yocto Linux image shipped with the IOT2040.

Affected hardware: SIMATIC IOT2040 (6ES7647-0AA00-0YA2, MLFB). The same procedure applies to the IOT2020 trainer variant when used as a baseline for cross-validation. The shield mentioned in the resolution is the official Arduino-form-factor IOT2000 input/output shield (SIMATIC IOT2000 Input/Output Shield, 6ES7647-0KA01-0AA2), not the ethernet RJ45 jack itself.

1. Problem Description

Symptom report from the field:

  • Host PC static IP set to 192.168.200.99 / 255.255.255.0 on the wired Ethernet adapter.
  • Target device: SIMATIC IOT2040 at the Siemens factory-default address 192.168.200.1 on X1P1 (eth0).
  • ping 192.168.200.1 -t from Windows Command Prompt returns "Request timed out" or "Destination host unreachable" continuously.
  • Microsoft Defender Firewall (and any third-party endpoint protection) disabled, but link still fails.
  • Substitution with a known-good CAT5e/CAT6 patch cable yields identical behavior.
  • Both green (link/activity) and yellow (100 Mb/s) LEDs on the IOT2040 RJ45 are illuminated, indicating PHY-layer autonegotiation completed and a physical link is present.
  • The same PC, with the same static IP, can ping and SSH into a SIMATIC IOT-Trainer 2000 housing an IOT2020 — which proves the PC adapter and cable plant are functional.

This is a classic Layer-3 reachable-but-Layer-2-misconfigured symptom on the IOT2000 platform. The link LEDs are deceiving; they confirm the cable is good, not that the CPU has finished bringing up the IP stack.

2. Hardware Identification: IOT2040 Ports, LEDs, and Variants

Before chasing a software fix, identify the exact SKU. The IOT2040 and the IOT-Trainer 2000 look nearly identical but are not pin- or firmware-compatible in every respect.

Feature SIMATIC IOT2040 (6ES7647-0AA00-0YA2) IOT-Trainer 2000 (with IOT2020)
CPU Intel Quark X1020, 400 MHz Intel Quark X1020, 400 MHz
RAM / Flash 1 GB DDR3 / 8 GB onboard 1 GB DDR3 / 4–8 GB SD card
Ethernet ports 2x 10/100BASE-TX, RJ45: X1P1 (eth0), X1P2 (eth1) 2x 10/100BASE-TX, RJ45
Arduino shield header Yes (bottom side, 5 V / 3.3 V selectable) Yes
Default IP eth0 192.168.200.1 / 24 192.168.200.1 / 24
Default IP eth1 DHCP client DHCP client
Default credentials root / (no password on stock Yocto) root / (varies by image)
Link LED (green) Solid = link, blink = traffic Solid = link, blink = traffic
Speed LED (yellow) On = 100 Mb/s, off = 10 Mb/s On = 100 Mb/s, off = 10 Mb/s

The yellow LED is the only visual indicator of negotiated speed. If it remains off, the PHY has fallen back to 10 Mb/s — almost always a cable integrity or pin-out problem, not a configuration problem.

3. Default Network Configuration of the IOT2040

The IOT2040 ships with a Siemens-built Yocto Linux image (later replaced by the SIMATIC IOT2050 generation running the Example Image based on BalenaOS/Yocto Kirkstone). On the legacy IOT2040, the network configuration is provided by systemd-networkd and is contained in:

/etc/systemd/network/eth0.network
/etc/systemd/network/eth1.network

Default eth0.network content on the stock image:

[Match]
Name=eth0

[Network]
Address=192.168.200.1/24
ConfigureWithoutCarrier=yes
IPv4AcceptRA=no
LinkLocalAddressing=no

Default eth1.network:

[Match]
Name=eth1

[Network]
DHCP=yes
IPv6AcceptRA=no

If the SD card image is rebuilt, the 192.168.200.1 static address is hard-coded by the meta-iot2000 layer. Changing it requires either re-flashing or modifying the network file from the serial console (see Section 6).

4. Root Cause Analysis: Why the Ping Times Out

Three independent root causes are observed in the field, in order of frequency:

4.1 ARP/Interface Not Bound (Most Common on Prototype Hardware)

Early engineering samples and MindConnect IOT2040 variants do not always bring eth0 up by default. The Quark X1020 internal MAC is bound only after the iot2000setup first-boot script completes. If the user powers the device for the first time without an SD card present, the device boots from onboard flash but the network service is gated on the user acknowledging the EULA via the local serial console. Until that happens, 192.168.200.1 is not bound and the kernel drops the ICMP echo request silently.

Verification: connect via the X2 micro-USB serial console (115200 8N1) and check ip addr show eth0. The interface will be DOWN with NO-CARRIER in the output if the setup is incomplete.

4.2 Shield Required for Reliable PHY Bring-Up

The IOT2040 hardware reference design ties the PHY reset and reference clock lines through the Arduino shield edge connector on certain revisions. If no shield is mounted, the link LEDs illuminate (because the PHY has its own power rail), but the MAC-side GMII handshake is not released by the firmware, leaving the Linux eth0 interface in NO-CARRIER state. This is the exact symptom the source thread documents: the user confirmed that mounting the IOT2000 Input/Output Shield (6ES7647-0KA01-0AA2) restored the connection immediately.

Field rule: if the green and yellow LEDs are both lit, but ip link on the device shows state DOWN, assume the shield is required for that hardware revision. Order the 6ES7647-0KA01-0AA2 from Siemens (available in stock at major distributors) and re-test.

4.3 Cable Type: Straight-Through vs Crossover

The Intel Quark X1020 internal PHY does not implement Auto-MDIX on the IOT2040 reference design. Modern PC NICs do implement Auto-MDIX, but a straight-through patch cable connecting two MDI-only devices fails to establish the TX/RX pairs correctly even though the link LEDs may still light at 10 Mb/s. The resolution in the source thread used a crossover cable (TIA-568-A on one end, TIA-568-B on the other). On a managed switch or modern laptop, Auto-MDIX eliminates the requirement; on a direct PC-to-IOT2040 link, the crossover pinout is the deterministic fix.

PC NIC → IOT2040 Recommended Cable Outcome
PC with Auto-MDIX → IOT2040 Straight-through (TIA-568-B both ends) Works (Auto-MDIX on PC side)
PC without Auto-MDIX → IOT2040 Crossover (T-568-A / T-568-B) Works
PC → Managed switch → IOT2040 Two straight-through patch cables Always works (switch handles MDI/MDIX)

If a crossover cable is not available, plugging both devices into a 100 Mb/s switch is the lowest-risk verification step. The IOT2040 negotiates 10/100 only; do not force a GbE connection.

5. Diagnostic Procedure: Layered from Physical to Application

Walk this list top-down. Stop at the first step that changes the symptom.

  1. Visual link check. Both LEDs on X1P1 lit solid green and yellow? If no, reseat the cable, try another RJ45, and confirm the PC NIC is enabled in Device Manager → Network Adapters. On Windows 10/11, a NIC that has entered Energy Efficient Ethernet power-save state can mimic a link failure; disable Power Management → Allow the computer to turn off this device to save power on the adapter.
  2. Switch in-line test. Insert a dumb 100 Mb/s switch between PC and IOT2040 with two known-good straight-through patch cables. If ping now works, the cable plant was at fault.
  3. Crossover cable test. Replace the straight-through with a crossover cable directly between PC and IOT2040. Bypass any docking station or USB-Ethernet adapter, which sometimes drop Auto-MDIX support.
  4. Shield test. Power down, mount the IOT2000 Input/Output Shield (6ES7647-0KA01-0AA2), power up, wait 90 s for systemd-networkd to converge, then ping.
  5. Serial console verification. Connect X2 (micro-USB) at 115200 8N1. Log in as root. Run:r>
    ip link show eth0
    ip addr show eth0
    systemctl status systemd-networkd
    dmesg | grep -i eth0
    Look for state UP and the 192.168.200.1/24 address. If state DOWN, bring it up manually:
    ip link set eth0 up
    systemctl restart systemd-networkd
  6. ARP cache. On the Windows PC, run arp -d * to flush stale entries, then ping again. Some Windows builds (10 22H2, 11 23H2) cache the IOT2040 MAC as incomplete when the first ping fails, and a stale entry can persist for 10 minutes even after the device is reachable.
  7. Alternate port: eth1 (X1P2). The stock image sets eth1 to DHCP. Connect X1P2 to a router running a DHCP server, then check the lease table for the IOT2040 MAC (printed on the bottom label). If eth1 obtains an address but eth0 does not, the failure is localized to the X1P1 PHY or its firmware handshake.

6. Reconfiguring the IP Address from the Serial Console

If the default 192.168.200.1 conflicts with an existing network, change it from the serial console before deploying:

mount -o remount,rw /
vi /etc/systemd/network/eth0.network

Replace the Address= line with the new CIDR, for example:

[Network]
Address=10.10.0.50/24
Gateway=10.10.0.1
DNS=10.10.0.1

Save and restart the network service:

systemctl restart systemd-networkd
ip addr show eth0

Reboot to verify the configuration persists across power cycles: reboot.

Read-only filesystem: the IOT2040 stock image mounts / read-only by default. The mount -o remount,rw / command in step 1 is mandatory. After editing, run sync before rebooting to avoid filesystem corruption on the SD card.

7. SD Card and Firmware Validation

Symptom variation: the IOT-Trainer's SD card works on the trainer, but the IOT2040's SD card does not work on the trainer, and vice versa. This indicates an image-hardware mismatch, not a hardware fault.

  • Image family. The IOT2020 trainer and the IOT2040 industrial variant use different device-tree blobs (iot2020.dtb vs iot2040.dtb). The bootloader selects the DTB based on the hardware ID stored in the Quark's EEPROM. Swapping SD cards across hardware does not necessarily boot because the kernel may panic on missing peripherals.
  • SD card size. The IOT2040 SD controller supports SDHC up to 32 GB. 16 GB SanDisk Industrial or Samsung Pro Endurance cards are field-proven. Consumer-grade cards above 64 GB (SDXC) are not supported on early firmware revisions and will fail to mount.
  • Filesystem integrity. Power loss during a write corrupts the ext4 journal. Reflash the image using balenaEtcher or Win32DiskImager and re-test.

Always order the SD card from Siemens (6ES7647-0AA11-0YA2 for the latest IOT2000 SD card with pre-flashed image) to guarantee compatibility.

8. Verification: Confirming End-to-End Connectivity

Once the ping returns, validate the full TCP/IP stack with the following sequence:

  1. ping 192.168.200.1 from the PC — should return < 1 ms with 0% loss.
  2. ssh [email protected] — accept the host key. The default is no password.
  3. On the IOT2040, run ifconfig eth0 (legacy net-tools is included in the example image) to confirm the bound address.
  4. Test the optional web-based setup wizard at http://192.168.200.1 (port 8080 on later images). A 200 OK response confirms the iot2000setup service is healthy.
  5. From the PC, run tracert 192.168.200.1 on Windows or traceroute 192.168.200.1 on Linux. The trace should resolve in a single hop, proving no rogue L3 device is intercepting traffic.

If SSH hangs at "Connecting…" but ping succeeds, the IOT2040 is on a different subnet — usually because the PC's mask was set to /16 (255.255.0.0) instead of /24 (255.255.255.0), and the kernel is choosing a different source address for the TCP SYN.

9. Common Failure Matrix

Symptom Root Cause Fix
Both LEDs off No power, bad cable, dead PHY Check 24 V supply on X4; replace cable
Green on, yellow off (10 Mb/s only) Cable integrity / pinout Use crossover or insert switch
Both LEDs on, ping fails, no shield PHY reset line not released Mount 6ES7647-0KA01-0AA2 shield
Both LEDs on, ping fails, with shield First-boot EULA not accepted Accept via serial console, reboot
Ping works, SSH fails Wrong subnet mask on PC Set PC mask to 255.255.255.0
eth0 unreachable, eth1 works eth0.network file corrupt Re-flash SD card or repair from serial console
Intermittent timeout every ~5 min Windows NIC power management Disable EEE / power saving on the adapter
Yellow LED off, ping slow (~10 ms) 10 Mb/s fallback Check for damaged pairs on the patch cable

10. Escalation: When to Open a Siemens Support Ticket

Open a case with Siemens Industry Online Support (SIOS) at support.industry.siemens.com if all of the following are true:

  • Both LEDs are solid on X1P1 with a verified crossover cable.
  • The IOT2000 Input/Output Shield is mounted and seated correctly.
  • Serial console confirms state UP and the correct IP is bound.
  • Another PC on the same subnet still cannot ping the device.

Include the serial number from the right-hand side label, the firmware version (cat /etc/os-release on the device), and a dmesg log captured via the serial console. These three artifacts let the Siemens support engineer reproduce the failure within minutes.

11. Safety and Power Notes

The IOT2040 accepts 24 V DC ± 20% on the X4 pluggable terminal block. Reverse polarity is not protected on early revisions and will destroy the input fuse (F1, 1.5 A slow-blow, 5x20 mm). Always disconnect power before inserting or removing the Arduino shield or the SD card. Hot-plugging the shield is documented to occasionally latch the Quark X1020 in a state that requires a full 30-second power cycle to recover.

FAQ

Why does the SIMATIC IOT2040 not respond to ping at 192.168.200.1 even though the link LEDs are on?

The most common cause is an incomplete first-boot setup that leaves the eth0 interface in NO-CARRIER state. The fix is to mount the official IOT2000 Input/Output Shield (6ES7647-0KA01-0AA2) and accept the EULA via the X2 micro-USB serial console at 115200 8N1. Once the shield is seated, the PHY reset is released and systemd-networkd binds 192.168.200.1/24 to eth0 within 30–90 seconds.

Does the IOT2040 need a crossover cable to connect to a PC?

The Quark X1020 internal PHY on the IOT2040 reference design does not implement Auto-MDIX. A direct PC-to-IOT2040 link with a straight-through patch cable may negotiate 10 Mb/s and fail to pass traffic, depending on whether the PC NIC's Auto-MDIX compensates. The deterministic fix is a crossover cable (T-568-A on one end, T-568-B on the other) or insertion of a 100 Mb/s switch between the two devices.

What is the default IP address and subnet of the SIMATIC IOT2040?

The stock Siemens image configures eth0 (X1P1) as 192.168.200.1 with a /24 mask (255.255.255.0) via the file /etc/systemd/network/eth0.network. Eth1 (X1P2) is set to DHCP client. To change the static address, remount the root filesystem read-write from the serial console, edit eth0.network, and restart systemd-networkd.

Can I swap the SD card between a SIMATIC IOT2020 trainer and an IOT2040?

No, not without rebuilding the image. The two devices use different device-tree blobs (iot2020.dtb vs iot2040.dtb) and the bootloader selects the DTB based on a hardware ID stored in EEPROM. Swapping cards typically results in a kernel panic or non-functional peripherals. Always flash the correct image for the target hardware.

How do I tell if my IOT2040 is a prototype that needs a different procedure?

Check the label on the right-hand side of the housing. Engineering samples and MindConnect IOT variants are marked with a different MLFB and may not bring up eth0 by default. The IOT-Trainer 2000 (with IOT2020 inside) is functionally similar but uses a different default image; if the trainer works and the IOT2040 does not, the issue is hardware revision specific to the IOT2040, not the PC or cable plant.

Back to blog