Resolving IOT2050 4G Modem Activation Failure on Cellular

David Krause10 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

1. Problem Overview

On the Siemens SIMATIC IOT2050 industrial gateway, the bundled configuration tool iot2050setup reports a cellular activation failure on the cellular-4g connection even when the mPCIe modem is physically detected by the kernel:

could not activate connection: Activation failed:
IP configuration could not be reserved (no available address, timeout, etc.)

This symptom has been reproduced on the IOT2050 Advanced with a Telit HE910-D mPCIe card, and similar failures have been observed with Sierra Wireless MC7304 and Huawei ME909s-120p modules. The interface appears in the kernel ring buffer (and in iot2050setup device list), but NetworkManager cannot complete DHCP/IPCP negotiation over PPP or the modem manager cannot bring the wwan0/usb0 interface up. The most common cause is a stale or incomplete /etc/NetworkManager/system-connections/cellular-4g profile: missing APN, locked SIM (PIN not supplied), wrong interface name, or wrong modem type flag.

Field symptom pattern. If the modem is enumerated by lsusb and ip link shows a wwan0 or usb0 device, the failure is almost always at the NetworkManager/ModemManager glue layer, not the radio layer. Do not waste time re-seating the SIM until the user-space profile is verified.

2. Affected Hardware and Firmware

Component Verified / Reported Notes
Gateway SIMATIC IOT2050 (6ES7647-0BA00-0YA2), IOT2050 Advanced (6ES7647-0BA00-1YA2) mPCIe slot on baseboard
OS Image Example Image (Debian-based, with iot2050setup) Includes iot2050setup, NetworkManager, ModemManager
OS Image Industrial OS (Yocto-based) No iot2050setup; use nmtui + ModemManager
Modem A Telit HE910-D (mPCIe) Exposes /dev/ttyACM0 for AT commands
Modem B Sierra Wireless MC7304 Exposes /dev/ttyUSB0..2; only ttyUSB2 is the AT port
Modem C Huawei ME909s-120p Exposes wwan0 (MBIM/NCM), not usb0
Kernel 5.10+ (mainline / Siemens Yocto BSP) cdc_mbim, qmi_wwan, option drivers required

3. Root Cause Analysis

The "IP configuration could not be reserved" message is generated by ModemManager when the PPP/IPCP handshake completes but no IPv4 address is assigned within the default timeout (typically 30 s). The four root causes that match the reported IOT2050 behavior, in order of frequency:

  1. Missing or incorrect APN. NetworkManager places the call but the carrier rejects the PDP context activation because the APN string is empty or wrong for the operator.
  2. SIM PIN not supplied. The SIM is in PIN-protected state, so +CPIN: SIM PIN is returned on AT enquiry. ModemManager cannot proceed until the PIN is written to the profile.
  3. Wrong interface binding. The profile points to a MAC address or interface name that no longer matches (e.g., the Huawei ME909s-120p binds to wwan0, the Telit HE910-D to a cdc_ether/wwan slave, and the MC7304 to wwan0 via QMI). Stale profiles left over from prior modems silently fail.
  4. Wrong modem type. NetworkManager type= field set to gsm on a QMI/MBIM card, or vice versa. ModemManager then opens the wrong control channel.

4. Pre-flight Verification

Run these checks in order before editing any configuration. They isolate radio-layer problems from user-space problems.

  1. Confirm the modem is enumerated.
    lsusb | grep -i -E "telit|sierra|huawei|qualcomm"
    ip link show            # expect wwan0 or usb0
    dmesg | grep -i -E "ttyACM|ttyUSB|cdc_mbim|qmi_wwan" | tail -20
    If nothing matches, the mPCIe card is not seated or the antenna is shorted. Stop here.
  2. Confirm the AT channel is responsive. For the Telit HE910-D:
    picocom -b 115200 /dev/ttyACM0
    ATI
    AT+CPIN?
    AT+CFUN?
    AT+CSQ
    AT+CREG?
    AT+CGDCONT?
    Expected responses: +CPIN: READY, +CFUN: 1, +CSQ: 12,99 or higher, +CREG: 1,1 (registered, home network). Exit with Ctrl-A Ctrl-X.
  3. List NetworkManager devices.
    nmcli device status
    nmcli -t -f NAME,TYPE,STATE device
    The cellular device should be in disconnected or unmanaged state, not unavailable.
  4. Check ModemManager state.
    mmcli -L
    mmcli -m 0
    Look for state: enabled, signal quality > 0, and SIM: present, PIN required or no PIN required.

5. Solution A — Fix the NetworkManager Profile (Fastest Path)

When the modem is correctly enumerated but iot2050setup cannot complete activation, the highest-probability fix is to correct /etc/NetworkManager/system-connections/cellular-4g. The file is plain INI and is safe to edit by hand.

  1. Edit the profile:
    sudo nano /etc/NetworkManager/system-connections/cellular-4g
  2. Set the minimum required keys. Replace apn.example.com with the APN supplied by your carrier and leave pin= empty unless the SIM is locked:
    [connection]
    id=cellular-4g
    type=gsm
    autoconnect=true
    
    [gsm]
    apn=apn.example.com
    pin=
    number=*99#
    
    [ipv4]
    method=auto
    
    For Huawei ME909s-120p on wwan0, change type=gsm to type=gsm with the MBIM interface flag, or use type=wwan if you are on a QMI/MBIM stack. When in doubt, set type=gsm first; it is the broadest fallback.
  3. Reload and bring the connection up:
    sudo nmcli connection reload
    sudo nmcli connection up cellular-4g
  4. Verify IP assignment:
    ip addr show wwan0
    ip route
    ping -c3 8.8.8.8
    A ppp0 or wwan0 address in the 10.x or 100.64.x range and a default route via the cellular interface confirm success.
File ownership. NetworkManager ignores system-connections/ files owned by root:root with mode 0600. If you copied the file as a regular user, run sudo chown root:root /etc/NetworkManager/system-connections/cellular-4g && sudo chmod 0600 /etc/NetworkManager/system-connections/cellular-4g or it will be silently skipped.

6. Solution B — Manual PPP Dial-up with picocom and AT Commands

When NetworkManager is not available (Industrial OS, container, or headless commissioning) or when you need to validate the modem outside the NetworkManager stack, use a pppd chat script. This is the most reliable method for Sierra MC7304 and Telit HE910-D cards on legacy GSM stacks.

  1. Install prerequisites.
    sudo apt-get install ppp picocom   # Debian/Example Image
    sudo opkg install ppp picocom      # Yocto/Industrial OS
  2. Identify the AT port.
    ls -l /dev/ttyACM* /dev/ttyUSB* 2>/dev/null
    Telit HE910-D → /dev/ttyACM0
    Sierra MC7304 → /dev/ttyUSB2 (USB0 and USB1 are diagnostic / NMEA)
    Huawei ME909s-120p → typically /dev/ttyUSB0 for AT, wwan0 for data
  3. Open picocom and validate the modem responds.
    picocom -b 115200 /dev/ttyACM0
    ATI
    You should see the manufacturer/model banner. If you get no echo, set the local echo with Ctrl-A Ctrl-E and retry.
  4. Create the PPP peer file. Save as /etc/ppp/peers/cellular-4g:
    /dev/ttyACM0
    115200
    noauth
    connect '/usr/sbin/chat -v -f /etc/chatscripts/cellular-4g'
    defaultroute
    replacedefaultroute
    persist
    usepeerdns
    lock
    crtscts
    noipdefault
    novj
    novjccomp
    noccp
    ipcp-accept-local
    ipcp-accept-remote
    For the Sierra MC7304, replace /dev/ttyACM0 with /dev/ttyUSB2 and add modem on its own line.
  5. Create the chat script. Save as /etc/chatscripts/cellular-4g. Substitute your APN, and if your SIM is PIN-locked, add the line below the ABORT block:
    ABORT "BUSY"
    ABORT "ERROR"
    ABORT "NO DIALTONE"
    SAY "Initializing modem..."
    '' ATZ
    OK AT+CPIN="1234"
    OK AT+CFUN=1
    OK AT+CGDCONT=1,"IP","apn.example.com"
    OK ATD*99#
    CONNECT ''
    For an unlocked SIM, omit the AT+CPIN line entirely.
  6. Dial the connection.
    sudo pppd call cellular-4g
    pon cellular-4g
    plog                       # tail /var/log/syslog | grep pppd
    A successful handshake prints local IP address 10.x.x.x and remote IP address 10.x.x.x.

7. Solution C — nmtui on Industrial OS

The Industrial OS image does not ship iot2050setup. Use the text-mode NetworkManager UI instead:

  1. Launch nmtui:
    sudo nmtui
  2. Select Edit a connectionAddCellular.
  3. Fill the device (typically wwan0 or cdc-wdm0), APN, and PIN fields. Username/password are usually blank for transparent APNs.
  4. Save, exit, then activate from the Activate a connection menu.
  5. Confirm with:
    nmcli connection show --active
    ip -4 addr show wwan0
Industrial OS caveat. ModemManager is not always enabled by default. If mmcli -L returns no modems, enable and start the service with systemctl enable --now ModemManager and verify the modem is bound to a cdc-wdm or /dev/ttyACM device before retrying.

8. Telit HE910-D Specific AT Command Reference

Use this reference when troubleshooting the Telit HE910-D outside of NetworkManager. All commands assume the modem is on /dev/ttyACM0 at 115200 8N1.

Command Purpose Expected Response
AT Alive check OK
ATI Module identification Telit HE910-D
AT+CPIN? SIM status +CPIN: READY (unlocked) or +CPIN: SIM PIN
AT+CPIN="1234" Submit PIN OK
AT+CFUN=1 Full functionality OK
AT+CSQ Signal quality (rssi,ber) +CSQ: 12,99 minimum for stable PDP
AT+CREG? Network registration +CREG: 1,1 (home) or +CREG: 1,5 (roaming)
AT+CGDCONT? Defined PDP contexts List of context IDs and APNs
AT+CGDCONT=1,"IP","apn.example.com" Define context 1 OK
AT+CGACT=1,1 Activate context 1 OK
AT+CGPADDR=1 Read assigned IP +CGPADDR: 1,"10.x.x.x"

9. Verification Procedure

After applying any of the solutions above, run the following sequence. All four checks must pass.

  1. Interface has IPv4 address.
    ip -4 addr show wwan0    # or ppp0
    ip route                # default route via wwan0/ppp0 must exist
  2. DNS is reachable and resolves.
    cat /etc/resolv.conf | grep -v "^#" | grep nameserver
    nslookup siemens.com 8.8.8.8
    If resolv.conf is empty, the PPP usepeerdns option is missing.
  3. Carrier-side reachability.
    ping -c3 -W2 8.8.8.8
    ping -c3 -W2 siemens.com
    Successful ICMP to 8.8.8.8 plus DNS resolution of an external hostname confirms both data plane and DNS path.
  4. iot2050setup status.
    sudo iot2050setup --show-connection cellular-4g
    The output should report state: activated and an IPv4 address.

10. Troubleshooting Matrix

Symptom Likely Cause First Action
Modem not in lsusb mPCIe not seated, antenna short, BIOS disables mPCIe Power off, reseat card, check dmidecode -t baseboard for mPCIe slot info
mmcli -L returns nothing ModemManager not running or no cdc_wdm/qmi_wwan driver match systemctl status ModemManager, check modprobe qmi_wwan
+CPIN: SIM PIN but PIN correct in profile Profile is loaded before SIM init Set autoconnect=false, run sudo mmcli -i 0 --pin=1234, then nmcli connection up cellular-4g
Connection activates then drops after 30 s LCP echo failure or ipcp-accept-remote missing Add persist, maxfail 0, holdoff 5 to peer file
activation: could not activate connection: ... timeout Wrong APN or roaming not allowed Verify APN against operator's published list, test with AT+CGDCONT + ATD*99# in picocom
PPP starts but no default route Missing replacedefaultroute Add replacedefaultroute to peer file, restart pppd
DNS resolves but HTTPS fails MTU mismatch (PPP default 1500 vs operator 1428) Add mtu 1428 mru 1428 to peer file
Profile exists but is ignored Wrong file ownership/mode sudo chown root:root /etc/NetworkManager/system-connections/cellular-4g && sudo chmod 0600
Industrial OS: no wwan0 after boot ModemManager disabled systemctl enable --now ModemManager

11. Field-Proven Caveats

  • Interface name drift. A reboot after a firmware update can rename wwan0 to wwan1 if a USB Ethernet adapter is also present. Re-check ip link after every kernel update.
  • SIM hot-swap. The HE910-D requires AT+CFUN=0, AT+CFUN=1 to re-read the SIM after a swap. The Example Image udev rules do this automatically; the Industrial OS does not.
  • Antenna diversity. The mPCIe connector carries MAIN and AUX. Connecting only MAIN yields +CSQ values 5-10 dB lower than with both connected. Use the pigtails supplied with the IOT2050 baseboard, not third-party equivalents.
  • Time on PDP context. Some carriers (notably Vodafone and Deutsche Telekom) drop idle PPP sessions after 30 minutes. Add lcp-echo-interval 60 lcp-echo-failure 3 to keep the link alive.
  • Firewall. The Example Image ships with nftables configured to allow only LAN outbound. iptables -A FORWARD -i wwan0 -j ACCEPT and the matching NAT rule are required for downstream devices to use the cellular uplink.

12. FAQ

Why does iot2050setup show the Telit HE910-D as recognized but still fail with 'IP configuration could not be reserved'?

Recognition means the kernel sees the mPCIe device, not that NetworkManager has a working profile. The 'IP configuration could not be reserved' error is raised by ModemManager when PPP/IPCP cannot assign an IPv4 address, usually because the APN is wrong, the PIN is missing, or the interface binding in /etc/NetworkManager/system-connections/cellular-4g no longer matches. Edit the profile and set the correct APN and PIN, then run nmcli connection up cellular-4g.

Which device file do I use to send AT commands to the Telit HE910-D on the IOT2050?

Use /dev/ttyACM0 at 115200 8N1, opened with picocom: picocom -b 115200 /dev/ttyACM0. The HE910-D exposes a CDC-ACM interface, not the ttyUSB family used by Sierra Wireless MC7304. Validate with ATI and AT+CPIN?.

How do I configure 4G on the Industrial OS image where iot2050setup is not available?

Run sudo nmtui, create a new Cellular connection, set the device (typically wwan0 or cdc-wdm0), enter the APN, leave username and password empty for transparent APNs, and save. Activate from the same menu. If mmcli -L reports no modems, enable ModemManager with systemctl enable --now ModemManager and reboot.

Can I share the 4G uplink with other LAN devices on the IOT2050?

Yes. Add masquerading on the cellular interface and forwarding from the LAN zone. The minimal nftables rule set is: nft add table ip nat; nft add chain ip nat postrouting '{ type nat hook postrouting priority srcnat; }'; nft add rule ip nat postrouting oifname "wwan0" counter masquerade plus an IPv4 forward accept on forward. On the Example Image this is enabled by toggling the "Share cellular with LAN" option in iot2050setup.

What is the minimum signal quality (AT+CSQ) required for a stable 4G PDP context on the HE910-D?

An AT+CSQ reading of 10 (-91 dBm) or higher is the practical minimum for a stable context activation. Below 7 (-99 dBm) the context activates intermittently and the connection will drop within minutes. For industrial deployments, target a steady reading of 14 (-83 dBm) or better, verified with AT+CSQ sampled at least five times over one minute.

Back to blog