When builders first experiment with sub-1GHz radio, they often confuse LoRa with LoRaWAN. They pick up a pair of Heltec or LilyGO boards, install an off-grid messaging app, and assume that is LoRaWAN. It is not.
LoRa is the physical layer modulation—the chirp spread spectrum waveform created by Semtech silicon like the SX1262 or SX1276. LoRaWAN is the media access control (MAC) and network layer specification maintained by the LoRa Alliance. It transforms raw chirps into an organized, star-of-stars sensor telemetry infrastructure connecting thousands of battery-powered end nodes through multi-channel gateways to a centralized network server.
If you are building remote tank monitors, environmental sensors, or asset trackers, LoRaWAN offers remarkable power efficiency and network capacity. But deploying a reliable node under US FCC regulations requires understanding how US915 sub-bands work, what Class A timing windows demand of your firmware, and why packet acknowledgments do not mean what most developers think.
01 · The Star-of-Stars Topology: Gateways, Servers, and Endpoints
Unlike mesh architectures where every node repeats traffic for its neighbors, LoRaWAN is built around a centralized star-of-stars topology.
- End Devices (Nodes): Remote sensors or actuators. They spend 99.9% of their life in deep sleep, waking periodically to transmit small telemetry packets (uplinks).
- Gateways (Concentrators): Transparent multi-channel packet forwarders equipped with multi-SF baseband chips (like Semtech SX1302 or SX1303). A single gateway listens simultaneously on eight or sixteen channels across multiple spreading factors. Gateways do not inspect payloads, maintain routing tables, or track sessions; they encapsulate received RF packets into IP datagrams and push them to the network server over Ethernet, Wi-Fi, or cellular backhaul.
- Network Server (LNS): The central brain (such as ChirpStack or The Things Stack). It handles de-duplication when an uplink is heard by five different gateways, manages adaptive data rate (ADR) algorithms, schedules downlink frames, and routes payloads to the application server.
- Application Server & Join Server: The Join Server securely authenticates nodes and derives session keys, while the Application Server decrypts the sensor payload (AES-128) and exposes it via MQTT, HTTP webhooks, or database sinks.
Because gateways simply push raw RF packets upstream, an end node never “pairs” with a single gateway. Any gateway within radio range that captures the chirp forwards it. The network server eliminates the duplicates automatically.
02 · US915 Band Plan: 64 Uplinks, 8 Downlinks, and Sub-Band 2
In the United States, LoRaWAN operates across the 902–928 MHz ISM band defined by the LoRa Alliance Regional Parameters (RP002). The US915 plan specifies 72 total uplink channels and 8 downlink channels:
| Direction | Channel Count | Bandwidth | Spreading Factors | Frequency Range | Channel Spacing |
|---|---|---|---|---|---|
| Uplink (Narrow) | 64 channels | 125 kHz | SF7 to SF10 | 902.3 – 914.9 MHz | 200 kHz steps |
| Uplink (Wide) | 8 channels | 500 kHz | SF8 | 903.0 – 914.2 MHz | 1.6 MHz steps |
| Downlink | 8 channels | 500 kHz | SF7 to SF12 | 923.3 – 927.5 MHz | 600 kHz steps |
The 8-Channel Gateway Constraint and Sub-Band 2
Standard commercial gateways (like the Dragino LPS8, RAKwireless WisGate, or Mikrotik wAP LR9) contain an 8-channel concentrator chip. They cannot listen to all 64 125-kHz uplink channels simultaneously.
Instead, the US band is divided into eight sub-bands (Sub-bands 1 through 8), each containing eight 125-kHz channels and one 500-kHz channel. In the North American public community (including The Things Network and Helium), Sub-Band 2 (FSB 2) is the universal standard:
- 125 kHz Channels (08–15): 903.9 MHz, 904.1 MHz, 904.3 MHz, 904.5 MHz, 904.7 MHz, 904.9 MHz, 905.1 MHz, 905.3 MHz.
- 500 kHz Uplink Channel (65): 904.6 MHz.
- 500 kHz Downlink Channels (00–07): 923.3 MHz to 927.5 MHz.
If you flash stock LoRaWAN firmware without enabling a channel mask, your node will attempt to hop across all 64 channels. If your local gateway only listens on Sub-Band 2, seven out of every eight uplinks will be transmitted into dead air. Always configure your node stack’s channel mask for Sub-Band 2 before running field tests.
03 · Device Operating Classes: A, B, and C
LoRaWAN defines three distinct device classes balancing downlink latency against battery consumption:
| Class | Uplink | Downlink Listening Windows | Typical Current Draw | Best For |
|---|---|---|---|---|
| Class A | Anytime (ALOHA) | Two short receive slots (RX1 and RX2) opened only after an uplink | sleep / TX | Battery-operated sensors, soil probes, leak detectors |
| Class B | Anytime | Periodic synchronized receive slots (“ping slots”) aligned to network gateway beacons | average | Smart utility meters, scheduled valves |
| Class C | Anytime | Continuous listening whenever the radio is not actively transmitting | continuous | Mains-powered relays, smart streetlights, base stations |
Class A is the foundation of LoRaWAN battery longevity. The radio sleeps continuously. When an event occurs or a timer expires, the node transmits its uplink. Exactly 1.0 second later (default RECEIVE_DELAY1), it opens the RX1 window on the corresponding downlink channel. If no preamble is detected, it sleeps for another second and opens RX2 on a fixed frequency (923.3 MHz at SF12 in US915 default). If no packet arrives in RX2, the radio returns to deep sleep.
You cannot send an asynchronous downlink to a Class A device. If a valve needs to close, that command sits in the network server queue until the node decides to send its next routine heartbeat.
04 · Activation: OTAA Nonce Traps vs. ABP Security Flaws
To join a LoRaWAN network, an end node must establish cryptographic session keys: NwkSKey (for frame integrity) and AppSKey (for payload encryption). Two methods exist:
Over-the-Air Activation (OTAA) — The Recommended Standard
The node ships with three identifiers: DevEUI (global 64-bit ID), JoinEUI / AppEUI, and a private 128-bit root AppKey.
- The node transmits an unencrypted
Join-Requestcontaining itsDevEUI,JoinEUI, and a unique random 16-bitDevNonce, signed with a Message Integrity Code (MIC). - The Join Server validates the credentials and responds with an encrypted
Join-Accept. - Both sides derive dynamic
NwkSKeyandAppSKeysession keys.
The OTAA DevNonce Trap: Under LoRaWAN 1.0.4 and 1.1 specifications, the DevNonce is a strictly incrementing counter that must be stored in non-volatile memory (EEPROM / flash). If your node firmware resets to zero on power cycle, the network server will reject every subsequent Join-Request as a replay attack. Turning up transmission power will not help when the server is intentionally dropping repeated nonces.
Activation by Personalization (ABP) — The Dangerous Shortcut
Under ABP, DevAddr, NwkSKey, and AppSKey are hardcoded into node firmware at compile time. The node skips the join handshake and begins transmitting immediately.
The ABP Frame Counter Trap: LoRaWAN nodes track an ascending 32-bit frame counter (FCntUp). The network server drops any packet with an FCntUp equal to or lower than the last received counter to prevent packet replay. If an ABP node loses power and its frame counter resets to 0, the network server will silently drop every single packet until the counter catches up to where it was before the reboot. Unless you store frame counters in flash on every single transmission (which wears out flash endurance), avoid ABP in production.
05 · FCC Part 15 Regulatory Realities
LoRaWAN deployments in the United States operate under FCC Title 47 CFR Part 15 regulations, primarily governed by 47 CFR §15.247 across the 902–928 MHz band.
The 1-Watt Myth vs. Bandwidth Rules
There is no blanket permission allowing any LoRaWAN device to blast 1 Watt (+30 dBm). Compliance depends on the operational mode:
- Wideband Digital Modulation (§15.247(a)(2)):
- Requires a measured 6 dB bandwidth of at least 500 kHz.
- Power Spectral Density (PSD) cannot exceed +8 dBm in any 3 kHz band.
- Consequence: Only 500 kHz LoRa uplinks and downlinks qualify under this rule. A 125 kHz LoRa chirp physically cannot use this path.
- Frequency Hopping Spread Spectrum (§15.247(a)(1)(i)):
- For 20 dB channel bandwidths under 250 kHz (standard 125 kHz LoRa), the system must use at least 50 hopping channels.
- Average dwell time per channel cannot exceed 0.4 seconds within any 20-second window.
- Maximum conducted power is 1.0 Watt (30 dBm) with 50+ channels.
- Consequence: Because Sub-Band 2 standard nodes hop across only 8 channels, they cannot use the 50-channel 1-Watt rule. They operate either under hybrid rules (§15.247(f)) or with reduced conducted power limits.
- Antenna Gain Limitations (§15.247(b)(4)):
- If directional antenna gain exceeds 6 dBi, conducted transmitter power must be reduced dB-for-dB below +30 dBm.
- Using a high-gain 9 dBi fiberglass collinear antenna requires lowering conducted power to +27 dBm to keep total effective isotropic radiated power (EIRP) within the legal +36 dBm limit.
Encryption and Part 97 Boundaries
Part 15 unlicensed operation explicitly permits strong payload encryption. LoRaWAN uses industry-standard AES-128 encryption across both MAC commands and user payloads.
However, if an amateur radio operator attempts to gateway or repeat LoRaWAN packets under FCC Part 97 amateur rules, 47 CFR §97.113(a)(4) strictly prohibits transmissions with encoded messages intended to obscure their meaning. LoRaWAN’s encrypted payloads cannot be lawfully bridged into Part 97 amateur spectrum without stripping the encryption or operating strictly within Part 15 limits.
06 · Field Checklist: What Kills LoRaWAN Deployments
| Trap | Symptom | Fix |
|---|---|---|
| Channel Mask Mismatch | Node joins once in a blue moon, drops 87% of packets | Restrict node channel mask to Sub-Band 2 (channels 8–15 + 65). |
| DevNonce Flash Erasure | Node joins successfully once, never rejoins after battery swap | Save DevNonce to EEPROM/NVS so it strictly increments across boots. |
| Confirmed Uplink Storm | Gateway stops hearing nodes; severe downlink congestion | Do not use Confirmed Uplinks for routine telemetry. Use unconfirmed uplinks. |
| Duty Cycle & RX Timing Jitter | Node misses RX1 downlinks on microcontroller sleep wakeup | Calibrate microsecond timer drift on low-power crystal oscillators. |
| Mismatched Downlink Power | Node hears gateway, but gateway cannot hear node | Gateway transmits at +27 dBm while node is at +14 dBm. Balance your link budget. |
The Confirmed Uplink Trap: Developers often enable Confirmed Uplinks because they want guaranteed delivery. In LoRaWAN, a confirmation requires the gateway to transmit a downlink. Because gateways operate half-duplex and are subject to regional airtime limits, frequent downlinks silence the gateway from receiving uplinks from other nodes. Reserve confirmed frames strictly for emergency threshold alarms.