Skip to main content

SIM7600G-H 4G Modem User Guide

System: Radxa Rock 5T · Ubuntu 24.04 · Kernel 6.1.115-3-rockchip
Modem: SimCom SIM7600G-H in M.2 B-Key slot
Goal: Automatic LTE connection on every boot


Identify GPIO Pins

The SIM7600G-H is controlled via 4 GPIO pins of the RK3588.
The Linux GPIO number is calculated as: Bank × 32 + Group × 8 + Bit

SignalGPIO NameCalculationLinux No.Logic
4G_PWRENGPIO2_B12×32 + 1×8 + 173Active-HIGH
4G_WAKE_ON_HOSTGPIO2_B22×32 + 1×8 + 274Active-HIGH
4G_RESET#GPIO2_B32×32 + 1×8 + 375Active-LOW
4G_DISABLE#GPIO3_A63×32 + 0×8 + 6102Active-LOW
caution

RESET# and W_DISABLE# are Active-Low signals. A LOW level means reset active or RF disabled respectively. Setting these pins LOW will prevent the modem from starting.


Export GPIOs and Start Modem (Manual Test)

# Export GPIOs and set as output
for pin in 73 74 75 102; do
echo $pin | sudo tee /sys/class/gpio/export
echo out | sudo tee /sys/class/gpio/gpio${pin}/direction
done

# Set clean initial state
echo 0 | sudo tee /sys/class/gpio/gpio73/value # Power OFF
echo 1 | sudo tee /sys/class/gpio/gpio75/value # RESET# HIGH (inactive)
echo 1 | sudo tee /sys/class/gpio/gpio102/value # W_DISABLE# HIGH (RF enabled)
sleep 1

# Power on
echo 1 | sudo tee /sys/class/gpio/gpio73/value
sleep 2

# Send reset pulse
echo 0 | sudo tee /sys/class/gpio/gpio75/value
sleep 0.5
echo 1 | sudo tee /sys/class/gpio/gpio75/value
sleep 15

# Modem should now appear
lsusb | grep -i sim
# Expected: ID 1e0e:9001 SimTech, Incorporated

Verify Modem

mmcli -L
mmcli -m 0

Expected output shows:

  • model: SIMCOM_SIM7600G-H
  • state: locked (SIM PIN required)
  • ports: cdc-wdm0 (qmi), ttyUSB0..4, wwan0 (net)

Unlock SIM PIN and Disable PIN Lock

# Install minicom
sudo apt install minicom -y

# Connect to AT command port
sudo minicom -D /dev/ttyUSB2 -b 115200

In minicom, run the following AT commands:

AT+CPIN?           # → +CPIN: SIM PIN  (PIN required)
AT+CPIN="1234" # Enter your PIN
AT+CPIN? # → +CPIN: READY

# Disable PIN lock permanently (recommended for embedded use)
AT+CLCK="SC",0,"1234"

# Check network
AT+CSQ # Signal strength (>10 = good)
AT+CREG? # → 0,1 = registered
AT+COPS? # Show network operator

Solve APN Issue (Telekom Carrier Config)

The modem ships with carrier config: Commercial-DT. The Deutsche Telekom network enforces INTERNET.TELEKOM as the only allowed APN. MVNOs running on the Telekom network (e.g. Congstar, Aldi Talk) must also use this APN.

# Install libqmi
sudo apt install libqmi-utils -y

# Set interface to raw_ip mode
sudo ip link set wwan0 down
echo 'Y' | sudo tee /sys/class/net/wwan0/qmi/raw_ip
sudo ip link set wwan0 up

# Create qmi-network configuration
sudo nano /etc/qmi-network.conf
APN=INTERNET.TELEKOM
PROFILE=2
# Test connection
sudo qmi-network /dev/cdc-wdm0 start
# → "Network started successfully"

# Read IP from QMI
sudo qmicli -d /dev/cdc-wdm0 --wds-get-current-settings

Automatic Boot Script

Create the connection script:

sudo nano /usr/local/bin/sim7600-connect.sh
#!/bin/bash

# GPIO Init — Power on modem
for pin in 73 74 75 102; do
echo $pin > /sys/class/gpio/export 2>/dev/null
echo out > /sys/class/gpio/gpio${pin}/direction
done
echo 0 > /sys/class/gpio/gpio73/value # Power off
echo 1 > /sys/class/gpio/gpio75/value # RESET# inactive
echo 1 > /sys/class/gpio/gpio102/value # RF enabled
sleep 1
echo 1 > /sys/class/gpio/gpio73/value # Power on
sleep 2
echo 0 > /sys/class/gpio/gpio75/value # Reset pulse
sleep 0.5
echo 1 > /sys/class/gpio/gpio75/value

# Wait for USB modem to appear (max 30s)
echo "Waiting for modem..."
for i in $(seq 1 30); do
[ -c /dev/cdc-wdm0 ] && break
sleep 1
done

# Clean up old QMI state (prevents "PDH already exists" error)
rm -f /tmp/qmi-network-state-cdc-wdm0

# Prepare interface
ip link set wwan0 down
echo 'Y' > /sys/class/net/wwan0/qmi/raw_ip
ip link set wwan0 up

# Bring up connection
qmi-network /dev/cdc-wdm0 stop 2>/dev/null
sleep 1
qmi-network /dev/cdc-wdm0 start
sleep 3

# Get IP address from QMI and configure interface
IP=$(qmicli -d /dev/cdc-wdm0 --wds-get-current-settings 2>&1 \
| grep "IPv4 address" | awk '{print $NF}')
DNS1=$(qmicli -d /dev/cdc-wdm0 --wds-get-current-settings 2>&1 \
| grep "IPv4 primary DNS" | awk '{print $NF}')
DNS2=$(qmicli -d /dev/cdc-wdm0 --wds-get-current-settings 2>&1 \
| grep "IPv4 secondary DNS" | awk '{print $NF}')

if [ -n "$IP" ]; then
ip addr flush dev wwan0
ip addr add ${IP}/32 dev wwan0
# No gateway needed for raw_ip point-to-point
ip route add default dev wwan0 metric 700
resolvectl dns wwan0 $DNS1 $DNS2 2>/dev/null
echo "LTE active: $IP"
else
echo "ERROR: Failed to get IP address!"
exit 1
fi
sudo chmod +x /usr/local/bin/sim7600-connect.sh

Create Systemd Service

sudo nano /etc/systemd/system/sim7600-init.service
[Unit]
Description=SIM7600 Modem Init and Connect
After=sysinit.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/sim7600-connect.sh

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable sim7600-init.service

# Disable ModemManager (conflicts with direct QMI usage)
sudo systemctl disable ModemManager

Toggle LTE Manually

Create a script to turn LTE off when using WiFi:

sudo nano /usr/local/bin/lte-off.sh
#!/bin/bash
qmi-network /dev/cdc-wdm0 stop
rm -f /tmp/qmi-network-state-cdc-wdm0
ip addr flush dev wwan0
ip link set wwan0 down
echo 0 > /sys/class/gpio/gpio73/value
echo "LTE off."
sudo chmod +x /usr/local/bin/lte-off.sh

# Usage:
sudo lte-off.sh # Turn LTE off, use WiFi
sudo sim7600-connect.sh # Turn LTE back on

Test Connection

# After reboot or manual start:
ip addr show wwan0 # IPv4 address must be visible
ip route show # default via wwan0 must be present
ping -c 3 8.8.8.8 # Ping over LTE
curl -s ifconfig.me # Show public IP
nmcli radio wifi off # Disable WiFi — LTE only
ping -c 3 google.com # DNS test
nmcli radio wifi on # Re-enable WiFi

Troubleshooting

ProblemCauseSolution
Modem not visible in lsusbRESET# logic inverted (Active-Low!)Keep gpio75 = HIGH during normal operation
unknown-apn errorTelekom carrier config blocks custom APNsUse APN=INTERNET.TELEKOM
PDH already exists errorStale state file in /tmprm -f /tmp/qmi-network-state-cdc-wdm0
No IPv4 after connectDHCP does not work in raw_ip modeSet IP manually via qmicli --wds-get-current-settings
Service fails at bootModemManager blocks cdc-wdm0Disable ModemManager via systemctl

    You need to be logged into GitHub to post a comment. If you are already logged in, please ignore this message.

    Radxa-docs © 2026 by Radxa Computer (Shenzhen) Co.,Ltd. is licensed under CC BY 4.0