Skip to main content

Cellular Modem on Tachyon

The Particle Tachyon leverages the Qualcomm QCM6490 chipset, which includes an integrated 5G sub-6GHz modem. This ensures high-speed, reliable, and globally compatible cellular connectivity.

Overview​

The 5G modem inside the QCM6490 provides multi-region support, allowing the Tachyon device to connect to both LTE and 5G networks. This modem supports sub-6GHz frequencies but does not include mmWave.

Key Features of the QCM6490 Cellular Modem​

  • 5G NR (sub-6GHz) → Provides high-speed, low-latency connectivity.
  • 4G LTE fallback → Ensures robust connectivity in non-5G areas.
  • Multi-region support → Two variants exist for North America (NA) and Rest of World (RoW).
  • eSIM Support → Devices come preloaded with an activated, high-scale data plan.
  • Automatic Carrier Switching → Device selects the best network available dynamically.
  • Integrated GNSS (GPS) → Provides location-based services.

Regional Variants​

There are two different variants of the Particle Tachyon device:

  1. North America (NA) Build → Optimized for US, Canada, and Mexico.
  2. Rest of World (RoW) Build → Optimized for Europe, Asia, and other global markets.

💡 Why Different Variants? The QCM6490 modem has different RF front-end requirements for various regions, similar to how modern 5G smartphones operate. For example, iPhones also ship with different RF configurations depending on their sales region.


Antenna Configuration​

The Tachyon board features a built-in 5G sub-6GHz antenna, which is directly connected to the modem. Currently, 0external antenna support is not available, though an adapter exists internally (but has not been publicly released).

Desktop Setup

💡 Antenna Optimization We use various combinatorial technologies to mux multiple antennas together, ensuring the best possible performance while reducing the antenna size.


SIM & eSIM Connectivity​

The Tachyon device comes preloaded with an eSIM, which is:

  • Activated out of the box → No manual activation required.
  • Automatically connects → Selects the best available carrier.
  • Configured with a high-scale data plan.

For more details, visit the Tachyon Data Plan Page.


Modem Management Commands​

Troubleshooting the Modem​

If experiencing connectivity issues, ensure the RILD service is running:

systemctl status particle-tachyon-rild
systemctl restart particle-tachyon-rild

Power cycle the modem:

particle-tachyon-ril-ctl disconnect
particle-tachyon-ril-ctl power off
particle-tachyon-ril-ctl power on
particle-tachyon-ril-ctl connect

Checking Modem State​

particle-tachyon-ril-ctl state

Examples:

// Not registered yet
particle-tachyon-ril-ctl state
Enabled

// Registered and with a data connection down
particle-tachyon-ril-ctl state
Registered

// Registered and with a data connection up
particle-tachyon-ril-ctl state
Connected

strings returned for state​

MM_MODEM_STATE_FAILED:        "Failed"
MM_MODEM_STATE_UNKNOWN: "Unknown"
MM_MODEM_STATE_INITIALIZING: "Initializing"
MM_MODEM_STATE_LOCKED: "Locked"
MM_MODEM_STATE_DISABLED: "Disabled"
MM_MODEM_STATE_DISABLING: "Disabling"
MM_MODEM_STATE_ENABLING: "Enabling"
MM_MODEM_STATE_ENABLED: "Enabled"
MM_MODEM_STATE_SEARCHING: "Searching"
MM_MODEM_STATE_REGISTERED: "Registered"
MM_MODEM_STATE_DISCONNECTING: "Disconnecting"
MM_MODEM_STATE_CONNECTING: "Connecting"
MM_MODEM_STATE_CONNECTED: "Connected"
MM_MODEM_STATE_SIM_DISABLED: "SIM Disabled"
default: "Unknown State"

Monitor modem state changes with --follow, Ctrl+C to cancel​

particle-tachyon-ril-ctl state --follow

Example output:

Listening for State changes...
Registered
Connecting
Connected
Disabling
Disabled
Enabling
Enabled
Registered
Enabled
Registered
Connecting
Connected

Checking Modem Status​

To check if the modem is detected and working:

particle-tachyon-ril-ctl status

Example Output:

state: 12
signal-quality: 42, true
access-technologies: 13
m3gpp-registration-state: 5
m3gpp-operator-code: 310410
m3gpp-operator-name: AT&T FloLive
cdma-cdma1x-registration-state: 4
cdma-evdo-registration-state: 4
cdma-sid: 0
cdma-nid: 0

state​

MM_MODEM_STATE_FAILED        = 0  // The modem is unusable
MM_MODEM_STATE_UNKNOWN = 1 // State unknown or not reportable
MM_MODEM_STATE_INITIALIZING = 2 // The modem is currently being initialized
MM_MODEM_STATE_LOCKED = 3 // The modem needs to be unlocked
MM_MODEM_STATE_DISABLED = 4 // The modem is not enabled and is powered down
MM_MODEM_STATE_DISABLING = 5 // The modem is currently transitioning to the MM_MODEM_STATE_DISABLED state
MM_MODEM_STATE_ENABLING = 6 // The modem is currently transitioning to the MM_MODEM_STATE_ENABLED state
MM_MODEM_STATE_ENABLED = 7 // The modem is enabled and powered on but not registered with a network provider and not available for data connections
MM_MODEM_STATE_SEARCHING = 8 // The modem is searching for a network provider to register with
MM_MODEM_STATE_REGISTERED = 9 // The modem is registered with a network provider, and data connections and messaging may be available for use
MM_MODEM_STATE_DISCONNECTING = 10 // The modem is disconnecting and deactivating the last active packet data bearer
MM_MODEM_STATE_CONNECTING = 11 // The modem is activating and connecting the first packet data bearer
MM_MODEM_STATE_CONNECTED = 12 // One or more packet data bearers is active and connected
MM_MODEM_STATE_SIM_DISABLED = 13 // The modem does not have a SIM profile enabled, will be disconnected

signal-quality​

<signal_value_percentage> ,<recently_updated_boolean>

  • signal_value_percentage = 0 - 100 (%) Note: 255 if invalid
  • recently_updated_boolean = true if updated within the last 10 seconds, false if longer than 10s

access-technologies​

UTRAN                        = 2   // 3G UMTS
UTRAN W/HSDPA = 4 // 3G UMTS with High-Speed Downlink Packet Access (HSDPA)
UTRAN W/HSUPA = 5 // 3G UMTS with High-Speed Uplink Packet Access (HSUPA)
UTRAN W/HSDPA and HSUPA = 6 // 3G UMTS with both HSDPA and HSUPA (HSPA)
E-UTRAN = 7 // 4G LTE
E-UTRAN connected to a 5GCN = 10 // 4G LTE connected to a 5G Core Network (5GC)
NR connected to 5GCN = 11 // 5G NR (New Radio) connected to a 5G Core Network (5GC)
NG-RAN = 12 // Next-Generation RAN (includes both LTE and NR under 5GC)
E-UTRAN-NR dual connectivity = 13 // 5G NR and 4G LTE working together (EN-DC)

m3gpp-registration-state​

MM_MODEM_REGISTRATION_STATE_IDLE      = 0
MM_MODEM_REGISTRATION_STATE_HOME = 1
MM_MODEM_REGISTRATION_STATE_SEARCHING = 2
MM_MODEM_REGISTRATION_STATE_DENIED = 3
MM_MODEM_REGISTRATION_STATE_UNKNOWN = 4
MM_MODEM_REGISTRATION_STATE_ROAMING = 5

m3gpp-operator-code​

Network Operator PLMN <mccmnc>

m3gpp-operator-code: 310410

m3gpp-operator-name​

Network Operator Name <name>

m3gpp-operator-name: AT&T FloLive

cdma-cdma1x-registration-state​

  • N/A - permanently set to MM_MODEM_REGISTRATION_STATE_UNKNOWN (4)

cdma-evdo-registration-state​

  • N/A - permanently set to MM_MODEM_REGISTRATION_STATE_UNKNOWN (4)

cdma-sid​

  • N/A - permanently set to 0

cdma-nid​

  • N/A - permanently set to 0

Query Modem Vitals​

particle-tachyon-ril-ctl vitals

signal_strength: -79
rsrp: -112
rsrq: -13
rssnr: -1
mcc: 310
mnc: 410
mccmnc: 310410
mobile_carrier: AT&T FloLive
act: 13
data_connection: 2
status: 0
retry: -1
call_id: 0
type: IP
ifname: rmnet_data0
addresses: 100.88.77.66/30
dnses: 8.8.4.4 8.8.8.8
gateways: 100.88.77.1
mtu: 1360
registration_state: 5
lac: 12345
cid: 8675309
rat: 14
registration_denied_reason: 255
max_calls: 20
tac: 12345
pci: 43
eci: 8675309
csgid: 0
tadv: 0
cgi_valid: 1
last_status_update_ms: 3054

Vitals key: value description​

  • int signal_strength RSSI in dBm
  • int rsrp RSRP in dBm
  • int rsrq RSRQ in dB
  • int rssnr RSSNR in dB
  • char mcc[7+1] 3-digit Mobile Country Code, 0..999. "unknown" if no current registration.
  • char mnc[7+1] 2 or 3-digit Mobile Network Code, 0..999. "unknown" if no current registration.
  • char mccmnc[14+1] PLMN, MCC and MNC combined into one string of 5 or 6 digits. "unknown" if no current registration.
  • char mobile_carrier[32+1] Network operator name string.
  • int act See access-technologies above.
  • int data_connection 0=inactive, 1=active/physical link down, 2=active/physical link up
  • int status Data call fail cause, 0 = no error
  • int retry Data call suggested retry back-off timer value, < 0 means no value suggested
  • int call_id Context ID, uniquely identifies the data call
  • char type[12] One of the PDP_type values in TS 27.007 section 10.1.1. Should likely always be "IP"
  • char ifname[32] The network interface name
  • char addresses[32] A space-delimited list of addresses with optional "/" prefix length, e.g., "192.0.1.3" or "192.0.1.11/16".
  • char dnses[64] A space-delimited list of DNS server addresses, e.g., "192.0.1.3" or "192.0.1.11". May be empty.
  • char gateways[64] A space-delimited list of default gateway addresses, e.g., "192.0.1.3" or "192.0.1.11
  • int mtu MTU received from network
  • int registration_state See m3gpp-registration-state above.
  • int lac 16-bit Location Area Code, 0..65535, 0 if unknown.
  • uint32_t cid 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455, 0 if unknown.
  • int rat 14 = LTE (4G), 20 = NR5G (5G). You may notice it idle on LTE and switch to NR5G when send/recv. data.
  • int registration_denied_reason Enumerated reason why registration was denied, 0 - 111. 255 if no error. See 3GPP TS 24.008, 10.5.3.6.
  • int max_calls The maximum number of simultaneous data calls that can be established. Should always be 20.
  • int tac 16-bit tracking area code, 0 if unknown.
  • int pci physical cell id 0..503, 0 if unknown.
  • int eci 28-bit E-UTRAN cell identifier, 0 if unknown.
  • int csgid 27-bit closed subscriber group identity, 0 if unknown.
  • int tadv 6-bit timing advance value, 0 if unknown.
  • int cgi_valid Indicates if cellular global identity data is 1=valid, 0=invalid. Valid is when cid,lac,act != 0 && act != 255 && mccmnc != "unknown" && rsrp <= -44
  • uint64_t last_status_update_ms Milliseconds elapsed since status was updated, typically under 5000.