> For the complete documentation index, see [llms.txt](https://amobile-solutions.gitbook.io/yocto-developer-guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://amobile-solutions.gitbook.io/yocto-developer-guide/test-and-use-the-interface/lte/lte-iot-800n-g420.md).

# LTE - IOT-800N-G420

## Overview

|                   |                                                 |
| ----------------- | ----------------------------------------------- |
| Module            | Telit LE910C4-WWX, optional                     |
| Form factor       | Mini PCIe socket                                |
| Interface         | **USB**, behind the internal hub                |
| Control           | QMI through `/dev/cdc-wdm0`                     |
| Manager           | ModemManager                                    |
| Network interface | `wwan0`, renamed by udev                        |
| SIM               | MUP-C7804-01 holder, card present is active low |

{% hint style="info" %}
The Mini PCIe socket carries USB only. The PCIe controller is disabled in the device tree, matching how the module is wired.
{% endhint %}

## Checking the module

```
lsusb | grep -i telit
```

```
Bus 004 Device 005: ID 1bc7:1031 Telit Wireless Solutions LE910C4-WWX
```

```
ls -l /dev/cdc-wdm0
ip link | grep -E "wwan|wwu"
```

Three serial ports also appear for AT commands and diagnostics:

```
for p in /dev/ttyUSB*; do
    echo "$p -> $(udevadm info -q property -n $p | grep ID_MODEL=)"
done
```

## ModemManager

```
mmcli -L
mmcli -m 0
```

The interesting lines:

```
state: registered
signal quality: 72%
operator name: ...
packet service state: attached
```

| State        | Meaning                                   |
| ------------ | ----------------------------------------- |
| `disabled`   | Module present but not enabled            |
| `searching`  | Enabled, looking for a network            |
| `registered` | Attached to a network, no data bearer yet |
| `connected`  | Data bearer up                            |

### SIM

```
mmcli -m 0 --sim-list
mmcli -i 0
```

## Bringing up the connection

```
lte-up.sh
```

The script does what ModemManager does not: ModemManager establishes the bearer with the network but does not configure the Linux interface, so `lte-up.sh` applies the IP address, route and DNS the bearer reports.

The APN comes from `/etc/amobile/lte.conf`:

```
APN=internet
METRIC=700
```

{% hint style="info" %}
Confirm the APN with the carrier. M2M and IoT SIMs frequently use something other than the consumer default.

The route metric is deliberately high so wired Ethernet stays preferred and LTE acts as a fallback.
{% endhint %}

The service runs at boot:

```
systemctl status lte-up
journalctl -u lte-up -n 30
```

## Testing the data path

```
IF=$(ls /sys/class/net | grep -E '^(wwan|wwu|wwp)' | head -1)
ping -I $IF -c3 8.8.8.8
curl --interface $IF -s ifconfig.me
```

The address returned should belong to the carrier.

## Taking it down

```
lte-down.sh
```

## Troubleshooting

### Signal quality is 0% and the state is detached

Almost always the antenna. The module registers only when it can hear a base station.

```
mmcli -m 0 --signal-get
```

Both the main and diversity antennas should be connected.

### The modem disappears after a SIM swap

{% hint style="warning" %}
The LE910C4-WWX has **no SIM detect pin**. Removing and reinserting the card leaves the module searching indefinitely, because it never learns that the SIM changed. No amount of waiting helps.
{% endhint %}

Recovery is a modem reset, which `lte-up.sh` performs after a registration timeout. Budget about 5 minutes for the whole sequence:

```
mmcli -m 0 --reset
```

### The modem index changes

After a reset the module re-enumerates on USB and ModemManager assigns a **new** index:

```
at boot        /org/freedesktop/ModemManager1/Modem/0
after a reset  /org/freedesktop/ModemManager1/Modem/2
```

Scripts must discover the index rather than hard-coding 0. `lte-up.sh` does this.

### No IPv4 configuration on the bearer

```
mmcli -m 0 --list-bearers
mmcli -b 0
```

Bearer 0 is often the default-attach bearer, which carries no IP configuration. If none of the bearers has an address, the `--simple-connect` APN probably matches the initial EPS bearer, so ModemManager reused it instead of creating a data bearer. Creating one explicitly works around it:

```
mmcli -m 0 --create-bearer="apn=<apn>"
mmcli -b <new> -c
```

### The interface comes up but no data flows

`raw_ip` on `qmi_wwan` can only be changed while the interface is **down**. If dhcpcd brings it up first, ModemManager cannot set it and the QMI data path never works.

```
cat /sys/class/net/$IF/qmi/raw_ip
```

It must read `Y`. `lte-up.sh` sets it explicitly rather than relying on ordering, and the shipped dhcpcd configuration keeps dhcpcd off the WWAN interface entirely — there is no DHCP server on a QMI RAW\_IP link, so dhcpcd would time out and assign a 169.254.x.x address.
