Configuring mPCIe Cellular on SIMATIC IOT2050: APN Setup Guide

David Krause11 min read
Industrial NetworkingSiemensTutorial / How-to
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

Overview

The SIMATIC IOT2050 is a rugged industrial edge gateway in the SIMATIC family that exposes a single full-size mPCIe slot for cellular (UMTS/LTE) or Wi-Fi expansion cards. The slot accepts USB-based cellular modems from vendors such as Quectel, Telit, and Sierra Wireless, and the cards register on the internal USB bus as a CDC-ACM/CDC-NCM or QMI device rather than a legacy serial modem.

On Industrial OS V3.2.2, the active connection manager is NetworkManager, which handles the wwan0 interface, supervises the modem through ModemManager, and persists the Access Point Name (APN), authentication credentials, and PDP context in a connection profile. When the APN is missing or invalid, the modem reports the bearer as "disconnected" and NetworkManager cycles the radio without ever reaching the IP layer. This article documents the exact sequence to bring the cellular bearer up, verify the assigned IP, and recover from the common "GSM type disconnected" symptom reported when the modem is reachable but the APN profile is empty.

Hardware Prerequisites and Modem Compatibility

Confirm the following before commissioning the cellular link:

  • IOT2050 base unit (6ES7647-0BA00-0YA2 basic, or 6ES7647-0BA00-1YA2 advanced). The advanced variant provides a more powerful SoC and more RAM, but both share the same mPCIe pinout and the same /dev/ttyACM* enumeration for USB modems.
  • mPCIe UMTS/LTE card installed in the mPCIe socket on the underside of the device, secured with the single screw on the carrier.
  • Active SIM card from a supported carrier, inserted into the nano-SIM holder (Slot X1) on the top side of the enclosure.
  • SMA antenna connected to the MAIN U.FL/SMA pigtail; LTE bands require an external antenna for stable registration.

The mPCIe slot is keyed for USB 2.0 only. PCIE-only cards (e.g., Wi-Fi chipsets that expect a true PCIe link) will enumerate but not bring up the network interface. The supported cellular cards are listed in the SIMATIC IOT2050 Operating Instructions entry list, which is updated independently of the firmware.

Antenna placement: Keep at least 20 cm between the MAIN and AUX antenna pigtails. The plastic enclosure is RF-transparent above 700 MHz; mounting on a metal plate without an external antenna will reduce the receive level by 15-20 dB and prevent bearer establishment.

Software Prerequisites

Industrial OS V3.2.2 ships with the following components. Verify versions before changing anything:

Component Package Minimum Version (V3.2.2)
NetworkManager network-manager 1.42.x or newer
ModemManager modem-manager 1.20.x or newer
ModemManager-QMI plugin modemmanager-qmi 1.20.x
libqmi / libmbim libqmi-utils / libmbim-utils 1.30.x / 1.26.x
nmtui (TUI frontend) network-manager-tui 1.42.x
mmcli (CLI frontend) modemmanager 1.20.x

Validate with:

NetworkManager --version
ModemManager --version
systemctl status NetworkManager
systemctl status ModemManager

Both services must be in state active (running). If ModemManager is inactive, start and enable it:

sudo systemctl enable --now ModemManager
sudo systemctl restart NetworkManager

Identifying the Cellular Modem

After the card is seated and the device has booted, the modem must enumerate on the USB bus. Confirm with:

lsusb
ls /dev/ttyACM* 2>/dev/null
ls /dev/cdc-wdm* 2>/dev/null
mmcli -L

A healthy response looks like:

/org/freedesktop/ModemManager1/Modem/0 [QUALCOMM INCORPORATED] QUECTEL EC25

If mmcli -L returns "no modems found", the card is either not seated, not powered, or the SIM is missing. Inspect the kernel ring buffer:

sudo dmesg | grep -iE 'cdc|qcserial|qmi_wwan|option|sim|mbim'
sudo journalctl -u ModemManager -n 50 --no-pager

Look for cdc_ncm, qmi_wwan, or cdc_mbim binding to a wwan0 interface. The wwan0 interface is the raw IP transport that NetworkManager will attach the APN profile to.

Configuring the APN with nmtui

nmtui is the simplest path for engineers who prefer a guided text UI on the serial console or over SSH. It writes a connection profile to /etc/NetworkManager/system-connections/.

  1. Open the TUI:
    sudo nmtui
  2. Select "Edit a connection" and press Enter.
  3. Highlight the cellular connection (the device name typically matches the modem model, e.g., "QUECTEL EC25" or the MAC/IMEI). If no cellular profile is listed, choose "Add" and pick "Mobile broadband"; this triggers the wizard.
  4. Set the APN field to the value supplied by the carrier (see the APN reference below).
  5. Set Username and Password only if the carrier requires PAP/CHAP. For most LTE data-only SIMs, leave both fields blank and set Authentication to "None" or "Automatic".
  6. Set Number to *99# (default for LTE attach).
  7. Set PDP type to ipv4 unless the carrier explicitly provides IPv6.
  8. Confirm with "OK" and exit.
  9. Restart NetworkManager so the profile is re-read:
    sudo systemctl restart NetworkManager
  10. Bring the link up explicitly:
    sudo nmcli connection up "QUECTEL EC25" (substitute the connection name shown in step 3).

If the connection profile was created during a wizard run, the connection name will be something like "T-Mobile Prepaid 1" rather than the modem model. Use nmcli connection show to list all profiles and identify the one bound to wwan0.

Configuring the APN with nmcli (Scriptable Alternative)

For headless commissioning or IaC workflows, nmcli is faster and reproducible. The example below adds a profile named iot2050-cellular bound to the modem's IMEI and configures an APN of internet:

sudo nmcli connection add type gsm ifname cdc-wdm0 \
    con-name iot2050-cellular \
    apn internet \
    gsm.number "*99#" \
    gsm.pdp-type ipv4 \
    ipv4.method auto \
    connection.autoconnect yes \
    connection.autoconnect-retries 5 \
    connection.autoconnect-interval 30

sudo nmcli connection up iot2050-cellular

Replace cdc-wdm0 with the actual cdc-wdm device printed by:

mmcli -m 0 -K | grep -E 'device|port|driver'

For carriers that require PAP credentials:

sudo nmcli connection modify iot2050-cellular \
    gsm.username "apn-user" \
    gsm.password "apn-pass" \
    gsm.auth-type pap
sudo nmcli connection up iot2050-cellular

Common authentication tokens to set:

Carrier Family Auth Username Password
Vodafone (DE/EU) pap vodafone vodafone
T-Mobile / DT (DE) pap or chap tm tm
Telefonica O2 (DE) pap o2 o2
1&1 (DE) none
AT&T (US) none
Verizon (US, LTE) none
T-Mobile (US) none
Always confirm APN values against the operator's current published list. The credentials in the table above are commonly cited defaults but operators may have changed them. Treat them as a starting point for troubleshooting, not a contractual fact.

Verifying the Connection

After the bearer attaches, validate the entire stack from radio to IP:

# Modem-level state
mmcli -m 0 --signal-get
mmcli -m 0 --location-get

# Bearer / connection state
mmcli -m 0 -b 0 -K | grep -E 'state|address|dns|interface|connected'

# OS interface
ip -4 addr show wwan0
ip route show dev wwan0

# End-to-end
ping -I wwan0 -c 4 1.1.1.1
ping -I wwan0 -c 4 8.8.8.8
resolvectl status wwan0 | head -20

Expected mmcli -m 0 output fields:

Field Healthy Value Indicates
state connected PDP context active
signal quality 50% or higher Usable RF link
access tech LTE / HSPA Bearer type
ipv4 address Carrier-allocated /32 NAT'd public IP visible to internet
ipv4 dns Non-empty DNS server received from network
interface wwan0 / wwp0s20u4i5 Linux netdev

If state shows connected but no IP is assigned, the APN was accepted by the SGSN/PGW but the PDP context is not yet active. Wait 30-60 s for the bearer to fully negotiate, especially on first attach after power-up.

AT Command and Bearer Diagnostics with mmcli

When nmtui and nmcli only show the user-facing state, drop down to AT-level diagnostics with mmcli:

# Send a raw AT command to the modem
sudo mmcli -m 0 --command="AT+CESQ"
sudo mmcli -m 0 --command="AT+COPS?"
sudo mmcli -m 0 --command="AT+CREG?"
sudo mmcli -m 0 --command="AT+CGDCONT?"

# Force a re-register on the network
sudo mmcli -m 0 --command="AT+CFUN=0"
sudo mmcli -m 0 --command="AT+CFUN=1"

Key AT responses to interpret:

AT Command Response Meaning
AT+COPS? +COPS: 0,0,"Vodafone.de",7 Registered on named PLMN, LTE
AT+COPS? +COPS: 0 Not registered
AT+CGDCONT? +CGDCONT: 1,"IP","internet","",0,0 APN defined for PDP context 1
AT+CGDCONT? (empty) No APN — bearer cannot attach
AT+CESQ +CESQ: 99,99,255,255,11,42 RSRP −88 dBm, RSRQ −12 dB

The "GSM type disconnected" error originates from NetworkManager when the modem has a valid SIM and is registered on the cell, but the PDP context never opens. The two root causes are:

  1. Empty APN: AT+CGDCONT? returns no entry.
  2. Wrong APN: PDP reject from the PGW with cause 27 (unknown APN) or 33 (requested service option not subscribed).

Both are cleared by writing the correct APN through nmcli and reissuing nmcli connection up.

Troubleshooting Matrix

Symptom Likely Cause Diagnostic Command Remediation
mmcli -L returns nothing Card not seated, no antenna, no power rail dmesg | grep -i usb Reseat mPCIe card, check antenna pigtails, verify +3.3 V rail
Modem found, state: failed SIM PIN locked or no SIM inserted mmcli -i 0 --pin=1234 (replace 1234 with the PIN if applicable) Disable PIN or insert active SIM
state: registered but no bearer APN empty mmcli -m 0 --command="AT+CGDCONT?" Set APN with nmcli as shown above
Bearer attaches, no IPv4 MTU mismatch, default 1500 too large for LTE ip link show wwan0 sudo ip link set wwan0 mtu 1428 or set ipv4.mtu 1428 in the connection profile
DNS resolves but ping fails Carrier blocks ICMP, or APN only allows whitelisted destinations curl ifconfig.me Use TCP-based test; check carrier APN type (default, mms, supl, dun)
Bearer drops every 5-10 min ModemManager timer mismatch, or LAU/TAU cycling journalctl -u NetworkManager -f Set connection.autoconnect-retries 0 and enable connection.keepalive
GSM type disconnected (Industrial OS V3.2.2) APN profile empty after wizard escape nmcli connection show Edit the profile with nmtui or nmcli and populate gsm.apn

APN Reference (Carriers Commonly Deployed With IOT2050)

Verify each entry against the carrier's current documentation before deployment. APNs change without notice, and private APNs for M2M SIMs are not listed here.

Region Carrier APN PDP Type Auth
Germany Vodafone (M2M) web.vodafone.de ipv4 pap
Germany Deutsche Telekom internet.t-d1.de ipv4 pap or chap
Germany Telefónica O2 internet ipv4 pap
Germany 1&1 Drillisch internet ipv4 none
EU (Roaming) Many EU carriers internet ipv4 none
US AT&T (M2M) m2m.com.attz ipv4 none
US Verizon (M2M) we01.vzwstatic ipv4 none
US T-Mobile iot.tmobile.com ipv4 none

Production Hardening and Persistence

Connection profiles written through nmtui and nmcli are persisted in /etc/NetworkManager/system-connections/<name>.nmconnection as plaintext. Apply the following before leaving the field:

  1. Restrict permissions:
    sudo chmod 600 /etc/NetworkManager/system-connections/*.nmconnection
  2. Enable autoconnect with bounded retries:
    sudo nmcli connection modify iot2050-cellular connection.autoconnect yes connection.autoconnect-retries 0
  3. Disable the connectivity-check feature if the carrier blocks the default probe URL, otherwise NetworkManager will flap the link:
    sudo nmcli connection modify iot2050-cellular connection.mdns no
    (Also add ipv4.dns-priority 50 to keep the cellular DNS below wired priority.)
  4. Set the MTU to 1428 to match the typical GTP-U overhead on LTE:
    sudo nmcli connection modify iot2050-cellular 802-3-ethernet.mtu 1428
    (Use the gsm section's MTU key for cellular profiles: gsm.mtu 1428 depending on driver.)
  5. Reboot and confirm the bearer comes up automatically:
    sudo reboot
    mmcli -m 0 -K | grep state

For unattended sites, log the bearer state to a syslog target so failures are recoverable from remote support. A simple watchdog is:

# /usr/local/bin/wwan-watchdog.sh
while true; do
  STATE=$(mmcli -m 0 -K 2>/dev/null | awk -F': ' '/^state/ {print $2}')
  if [ "$STATE" != "connected" ]; then
    nmcli connection up iot2050-cellular
  fi
  sleep 60
done

Schedule with cron or a systemd timer; do not run two watchdog loops in parallel or they will race and flap the bearer.

Firmware and Industrial OS Lifecycle Notes

Industrial OS V3.2.2 corresponds to the public release line documented in the SIMATIC IOT2050 Industrial OS Release Notes. Major behavior changes to be aware of when upgrading:

  • NetworkManager >= 1.42 added connection.gsm.auto-config, which overrides the manually-set APN if the modem reports one. Disable it with connection.gsm.auto-config no if you must force a private APN.
  • ModemManager 1.20+ moved the QMI plugin out of the main package on some distributions. If mmcli -L returns nothing for a QMI-only card (e.g., Quectel EG25-G), install modemmanager-qmi explicitly.
  • On Industrial OS V3.2.x, the nmcli output for cellular sections is in the gsm setting group, not gsm-settings as on older V2.x releases. Adjust any IaC scripts that grep for the older key name.

Always review the release notes before bumping the OS image on a fielded device. Cellular regression bugs are commonly tied to a single ModemManager point release.

Frequently Asked Questions

What does "GSM type disconnected" mean on the SIMATIC IOT2050?

It indicates the modem has finished cell registration but the PDP context could not be opened. The most common cause is an empty or wrong APN in the NetworkManager profile. Fix it by setting the APN with nmcli connection modify <name> gsm.apn <apn> and re-issuing nmcli connection up <name>.

Where is the IOT2050 cellular profile stored in Industrial OS V3.2.2?

NetworkManager persists the connection at /etc/NetworkManager/system-connections/<name>.nmconnection. The APN, username, password, and PDP type are all in the [gsm] section of that file. Lock the file down to chmod 600 on production systems because credentials are stored in cleartext.

How do I confirm the modem is detected before configuring the APN?

Run mmcli -L. A healthy line looks like /org/freedesktop/ModemManager1/Modem/0 [QUALCOMM INCORPORATED] QUECTEL EC25. If no modem is listed, check dmesg for USB enumeration and reseat the mPCIe card.

Can I use the IOT2050 mPCIe slot for a Wi-Fi card instead of LTE?

The mPCIe slot is keyed for USB 2.0 and will not supply a PCIe link to a true PCIe Wi-Fi card. A USB-WiFi adapter mPCIe card works, but for industrial Wi-Fi the recommended path is a USB-attached WLAN stick in the external USB port rather than the mPCIe socket.

What MTU should I use for an LTE link on the IOT2050?

Set the MTU to 1428 for the wwan0 interface. LTE encapsulation (GTP-U) consumes 20-72 bytes of overhead, and the standard 1500-byte MTU will fragment or drop large packets. Configure it in the connection profile with gsm.mtu 1428 and verify with ip link show wwan0.

Back to blog