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.
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:
- 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.
-
SIM PIN not supplied. The SIM is in PIN-protected state, so
+CPIN: SIM PINis returned on AT enquiry. ModemManager cannot proceed until the PIN is written to the profile. -
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 acdc_ether/wwanslave, and the MC7304 towwan0via QMI). Stale profiles left over from prior modems silently fail. -
Wrong modem type. NetworkManager
type=field set togsmon 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.
-
Confirm the modem is enumerated.
If nothing matches, the mPCIe card is not seated or the antenna is shorted. Stop here.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 -
Confirm the AT channel is responsive. For the Telit HE910-D:
Expected responses:picocom -b 115200 /dev/ttyACM0 ATI AT+CPIN? AT+CFUN? AT+CSQ AT+CREG? AT+CGDCONT?+CPIN: READY,+CFUN: 1,+CSQ: 12,99or higher,+CREG: 1,1(registered, home network). Exit withCtrl-A Ctrl-X. -
List NetworkManager devices.
The cellular device should be innmcli device status nmcli -t -f NAME,TYPE,STATE devicedisconnectedorunmanagedstate, notunavailable. -
Check ModemManager state.
Look formmcli -L mmcli -m 0state: enabled,signal quality> 0, andSIM: present, PIN requiredorno 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.
- Edit the profile:
sudo nano /etc/NetworkManager/system-connections/cellular-4g - Set the minimum required keys. Replace
apn.example.comwith the APN supplied by your carrier and leavepin=empty unless the SIM is locked:
For Huawei ME909s-120p on[connection] id=cellular-4g type=gsm autoconnect=true [gsm] apn=apn.example.com pin= number=*99# [ipv4] method=autowwan0, changetype=gsmtotype=gsmwith the MBIM interface flag, or usetype=wwanif you are on a QMI/MBIM stack. When in doubt, settype=gsmfirst; it is the broadest fallback. - Reload and bring the connection up:
sudo nmcli connection reload sudo nmcli connection up cellular-4g - Verify IP assignment:
Aip addr show wwan0 ip route ping -c3 8.8.8.8ppp0orwwan0address in the 10.x or 100.64.x range and a default route via the cellular interface confirm success.
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.
-
Install prerequisites.
sudo apt-get install ppp picocom # Debian/Example Image sudo opkg install ppp picocom # Yocto/Industrial OS -
Identify the AT port.
Telit HE910-D →ls -l /dev/ttyACM* /dev/ttyUSB* 2>/dev/null/dev/ttyACM0
Sierra MC7304 →/dev/ttyUSB2(USB0 and USB1 are diagnostic / NMEA)
Huawei ME909s-120p → typically/dev/ttyUSB0for AT,wwan0for data -
Open picocom and validate the modem responds.
You should see the manufacturer/model banner. If you get no echo, set the local echo withpicocom -b 115200 /dev/ttyACM0 ATICtrl-A Ctrl-Eand retry. -
Create the PPP peer file. Save as
/etc/ppp/peers/cellular-4g:
For the Sierra MC7304, replace/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/dev/ttyACM0with/dev/ttyUSB2and addmodemon its own line. -
Create the chat script. Save as
/etc/chatscripts/cellular-4g. Substitute your APN, and if your SIM is PIN-locked, add the line below theABORTblock:
For an unlocked SIM, omit theABORT "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 ''AT+CPINline entirely. -
Dial the connection.
A successful handshake printssudo pppd call cellular-4g pon cellular-4g plog # tail /var/log/syslog | grep pppdlocal IP address 10.x.x.xandremote 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:
- Launch nmtui:
sudo nmtui - Select Edit a connection → Add → Cellular.
- Fill the device (typically
wwan0orcdc-wdm0), APN, and PIN fields. Username/password are usually blank for transparent APNs. - Save, exit, then activate from the Activate a connection menu.
- Confirm with:
nmcli connection show --active ip -4 addr show wwan0
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.
-
Interface has IPv4 address.
ip -4 addr show wwan0 # or ppp0 ip route # default route via wwan0/ppp0 must exist -
DNS is reachable and resolves.
Ifcat /etc/resolv.conf | grep -v "^#" | grep nameserver nslookup siemens.com 8.8.8.8resolv.confis empty, the PPPusepeerdnsoption is missing. -
Carrier-side reachability.
Successful ICMP to 8.8.8.8 plus DNS resolution of an external hostname confirms both data plane and DNS path.ping -c3 -W2 8.8.8.8 ping -c3 -W2 siemens.com -
iot2050setup status.
The output should reportsudo iot2050setup --show-connection cellular-4gstate: activatedand 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
wwan0towwan1if a USB Ethernet adapter is also present. Re-checkip linkafter every kernel update. -
SIM hot-swap. The HE910-D requires
AT+CFUN=0,AT+CFUN=1to re-read the SIM after a swap. TheExample Imageudev rules do this automatically; theIndustrial OSdoes not. -
Antenna diversity. The mPCIe connector carries MAIN and AUX. Connecting only MAIN yields
+CSQvalues 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 3to keep the link alive. -
Firewall. The Example Image ships with
nftablesconfigured to allow only LAN outbound.iptables -A FORWARD -i wwan0 -j ACCEPTand 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.