When builders first discover LoRa, it is usually through an off-grid text messenger like Meshtastic, a LoRaWAN soil-moisture sensor, or an SX1262 breakout board wired to an ESP32. The marketing promises are enticing: “10-mile range, license-free, 1 Watt of power, and military-grade encryption.”

Then you hit the workbench. You flash two identical development boards, put them on the same frequency, and they cannot hear a single packet. You measure your link with an SDR, and your transmitter is keying up for more than a second per burst. You check the FCC rules, and the “1 Watt” permission everyone quotes turns out to have strict bandwidth and dwell-time strings attached.

LoRa is not a radio service, an open standard, or an all-in-one mesh protocol. It is a patented physical-layer modulation (OSI Layer 1) owned by Semtech. To design nodes that deliver real packets in the field while staying completely lawful, you have to separate the physics of the chirp from the software running on top of it.

01 · The Envelope vs. The Letter: Chirp Spread Spectrum Mechanics

Think of LoRa as the envelope, not the letter inside. LoRa defines how raw digital bits turn into radio frequency energy traveling through the air. It says nothing about node addresses, mesh routing hops, encryption keys, or sensor telemetry. All of that is the letter, written by an upper-layer protocol like LoRaWAN, MeshCore, Meshtastic, or Reticulum.

Traditional sub-1GHz radios like the CC1101 or SI4463 use Frequency Shift Keying (2-FSK) or On-Off Keying (OOK). They hold a steady carrier and toggle between two discrete frequencies. If noise, building walls, or tree canopies push the signal below the background thermal noise floor, the receiver gets corrupted garbage. Standard 2-FSK links collapse the moment Signal-to-Noise Ratio (SNR) drops below +4 dB+4\text{ dB}.

LoRa replaces static tones with Chirp Spread Spectrum (CSS):

  1. Instantaneous Frequency Sweeps: A LoRa symbol is a continuous linear frequency sweep (a “chirp”) across the configured channel bandwidth (BWBW). An up-chirp sweeps from fcBW/2f_c - BW/2 up to fc+BW/2f_c + BW/2, wrapping around to the bottom edge when it hits the top. A down-chirp sweeps in reverse and acts as a frame delimiter.
  2. Cyclic Time Shifts: The transmitter encodes data by shifting the starting frequency of the sweep. With a Spreading Factor of SFSF, one symbol period is divided into 2SF2^{SF} discrete time increments. Each symbol carries exactly SFSF raw bits.
  3. The De-Chirping FFT: At the receiver, incoming RF energy is multiplied by a locally generated conjugate chirp. This “de-chirping” collapses the wideband sweep into a single, sharp frequency bin in an FFT.
  4. Sub-Noise Demodulation: Because de-chirping concentrates the symbol’s dispersed energy into one bin while spreading random noise across all bins, LoRa achieves a processing gain of approximately:

Processing Gain10log10(2SF) dB\text{Processing Gain} \approx 10 \cdot \log_{10}(2^{SF})\text{ dB}

At SF7, processing gain is roughly 21.1 dB21.1\text{ dB}. At SF12, it climbs to 36.1 dB36.1\text{ dB}. This mathematical gain is why an SX1262 receiver can reliably demodulate packets all the way down to 20 dB-20\text{ dB} SNR — pulling signals cleanly out of the air when background thermal noise is ten times louder than the signal itself.

02 · The Three PHY Parameters: Spreading Factor, Bandwidth, and Airtime

Every LoRa link is governed by three physical settings configured in the transceiver’s SPI registers: Spreading Factor (SF), Bandwidth (BW), and Coding Rate (CR).

The core relationship governing symbol duration is:

Tsym=2SFBWT_{sym} = \frac{2^{SF}}{BW}

Every step up in Spreading Factor doubles symbol time and adds approximately 2.5 dB2.5\text{ dB} of link budget, at the cost of cutting data throughput in half.

Here is what that trade looks like at a standard 125 kHz125\text{ kHz} bandwidth with a 4/54/5 coding rate, based on Semtech SX1262 engineering specifications:

Spreading FactorSymbol Time (TsymT_{sym})Raw Bit RateProcessing GainDemod SNR LimitSensitivity (NF=6 dBNF = 6\text{ dB})
SF71.02 ms1.02\text{ ms}5,470 bps5,470\text{ bps}21.1 dB21.1\text{ dB}7.5 dB\approx -7.5\text{ dB}124.5 dBm\approx -124.5\text{ dBm}
SF82.05 ms2.05\text{ ms}3,125 bps3,125\text{ bps}24.1 dB24.1\text{ dB}10.0 dB\approx -10.0\text{ dB}127.0 dBm\approx -127.0\text{ dBm}
SF94.10 ms4.10\text{ ms}1,758 bps1,758\text{ bps}27.1 dB27.1\text{ dB}12.5 dB\approx -12.5\text{ dB}129.5 dBm\approx -129.5\text{ dBm}
SF108.19 ms8.19\text{ ms}977 bps977\text{ bps}30.1 dB30.1\text{ dB}15.0 dB\approx -15.0\text{ dB}132.0 dBm\approx -132.0\text{ dBm}
SF1116.38 ms16.38\text{ ms}537 bps537\text{ bps}33.1 dB33.1\text{ dB}17.5 dB\approx -17.5\text{ dB}134.5 dBm\approx -134.5\text{ dBm}
SF1232.77 ms32.77\text{ ms}293 bps293\text{ bps}36.1 dB36.1\text{ dB}20.0 dB\approx -20.0\text{ dB}137.0 dBm\approx -137.0\text{ dBm}

Doubling bandwidth from 125 kHz125\text{ kHz} to 250 kHz250\text{ kHz} halves the symbol time and doubles the data rate, but increases integrated thermal noise by 3 dB3\text{ dB}, degrading sensitivity by 3 dB3\text{ dB}.

The Airtime Reality Check

LoRa’s processing gain is not free. You pay for sensitivity in time on air. For a standard 20-byte payload with an 8-symbol preamble, explicit header, and CRC enabled:

ConfigurationTime on Air (ToA)Relative Channel Occupancy
SF7, 125 kHz57 ms\approx 57\text{ ms}1.0×1.0\times (Baseline)
SF9, 125 kHz185 ms\approx 185\text{ ms}3.2×3.2\times
SF10, 125 kHz371 ms\approx 371\text{ ms}6.5×6.5\times
SF11, 125 kHz741 ms\approx 741\text{ ms}13.0×13.0\times
SF12, 125 kHz1,319 ms\approx 1,319\text{ ms}23.1×23.1\times
SF7, 500 kHz14 ms\approx 14\text{ ms}0.25×0.25\times
SF12, 500 kHz330 ms\approx 330\text{ ms}5.8×5.8\times

Look closely at the SF12 row. A single 20-byte packet keeps your transmitter keyed up for over 1.3 seconds. In that time window, a channel running SF7 could have completed twenty-three separate transmissions.

Workbench Field Note

At symbol times of $16\text{ ms}$ or longer (SF11 and SF12 at $125\text{ kHz}$), temperature-induced crystal drift across a single symbol can break alignment. Always ensure the Low Data Rate Optimization (LDRO) bit is set in transceiver registers at both ends. Mismatched LDRO settings between transmitter and receiver cause silent packet loss.

03 · The Narrowband Trap: Why “1 Watt on 915 MHz” Is a Dangerous Myth

A common misconception in maker forums is that because the US 902–928 MHz band allows up to 1 Watt under FCC Part 15, you can crank any LoRa transmitter to +30 dBm+30\text{ dBm} on a single fixed frequency.

Under 47 CFR §15.247, the FCC provides two primary paths to transmit up to 1 Watt (30 dBm) conducted power. Neither path allows what most people assume:

Path A: Digital Modulation Systems (§15.247(a)(2))

To qualify for 1 Watt as a digital modulation system without frequency hopping, your transmitter must meet two strict technical conditions:

  1. Minimum 6 dB Bandwidth: The measured 6 dB bandwidth must be at least 500 kHz500\text{ kHz}.
  2. Power Spectral Density (PSD): Conducted power spectral density cannot exceed +8 dBm+8\text{ dBm} in any 3 kHz3\text{ kHz} band during continuous transmission.

The Narrowband Trap: A 125 kHz125\text{ kHz} or 250 kHz250\text{ kHz} LoRa signal physically cannot qualify for this path. A LoRa chirp is exactly as wide as its programmed bandwidth. A 125 kHz125\text{ kHz} chirp cannot reach 500 kHz500\text{ kHz}, no matter what spreading factor you select.

Furthermore, if you push 1 Watt (+30 dBm+30\text{ dBm}) through a 125 kHz125\text{ kHz} channel, your power is concentrated into a narrow slice. A flat-spectrum estimate yields approximately +13.8 dBm/3 kHz+13.8\text{ dBm} / 3\text{ kHz} — blowing past the +8 dBm+8\text{ dBm} PSD limit by nearly 6 dB6\text{ dB}. Only 500 kHz500\text{ kHz} LoRa configurations even approach this digital modulation path.

Path B: Frequency Hopping Spread Spectrum (§15.247(a)(1)(i))

If your bandwidth is under 250 kHz250\text{ kHz}, you can run up to 1 Watt only if the system implements genuine Frequency Hopping Spread Spectrum (FHSS):

  • The system must use at least 50 hopping frequencies.
  • The average time of occupancy on any frequency must not exceed 0.4 seconds within a 20-second period.

The Dwell Time Collision: Look back at our airtime table. An SF12 packet at 125 kHz125\text{ kHz} takes 1.32 seconds1.32\text{ seconds} to transmit. An SF11 packet takes 0.74 seconds0.74\text{ seconds}. Both packets violate the 0.4-second maximum dwell time on a single hop.

A sweeping chirp is modulation, not frequency hopping. Merely using chirp spread spectrum does not make your radio a frequency hopper. A compliant FHSS LoRa system (like complete LoRaWAN US915 implementations) must hop pseudorandomly across channels, limit individual packet airtimes below 400 ms, and ensure equal channel utilization.

The Alternative: Radiated Field Strength under §15.249

If your firmware operates on fixed narrowband channels (125 kHz125\text{ kHz} or 250 kHz250\text{ kHz}) without FHSS, it generally falls under 47 CFR §15.249.

Section 15.249 does not permit 1 Watt. It limits radiated field strength to 50 mV/m50\text{ mV/m} measured at 3 meters. In an idealized free-space calculation, 50 mV/m50\text{ mV/m} corresponds to approximately 0.75 mW0.75\text{ mW} (1.25 dBm-1.25\text{ dBm} EIRP).

The Compliance Takeaway

You cannot simply buy a 1-Watt amplifier, set your radio to SF12 on 915.0 MHz, and claim Part 15 compliance. Compliance is governed by the shape, bandwidth, and dwell time of your radiated waveform, not by the frequency band alone. Always check your module's official FCC grant and test reports using its FCC ID.

04 · The OSI Stack Separation & Why Identical SX1262s Can’t Hear Each Other

A recurring issue on the workbench is testing two nodes running different firmware and wondering why packets never arrive. Both boards have identical SX1262 transceivers, both are set to 915.0 MHz, and both use SF7 and 125 kHz. Yet the receiver’s packet counter never increments.

Here is why: network stacks live at completely different layers of the OSI model, and the radio hardware enforces low-level framing checks before passing any data to software:

OSI LayerFunctionWhat Defines ItExamples
Layer 1 (PHY)CSS modulation, chirps, SF, BW, CR, preamble, sync word, IQ polaritySemtech Proprietary SiliconSX1276, SX1262, SX1280, LR1121
Layer 2 (Data Link / MAC)Channel access, packet framing, addressing, CRC, dwell policiesProtocol MAC SpecificationLoRaWAN MAC, Meshtastic framing, MeshCore frames, Reticulum RNode
Layer 3–4 (Network / Transport)Topology, routing, multi-hop delivery, ACKs, retransmissionsNetwork Routing EngineLoRaWAN Gateways/ChirpStack, Meshtastic managed flood, Reticulum transport
Layer 7 (Application)User payload, messaging UI, sensor telemetry, application securityEnd-User ApplicationMeshtastic App, MeshCore Room Server, Sideband/LXMF, Home Assistant

When a LoRa transceiver listens on a channel, it evaluates four physical framing primitives in silicon before triggering the SPI packet-ready interrupt:

  1. The Sync Word Register: Following the preamble up-chirps, the transmitter emits two modulated sync symbols. The receiver’s hardware correlator discards any frame whose sync word does not match its configuration.
    • 0x12: The industry-standard “private” default used by many custom stacks and RNode.
    • 0x34: The LoRaWAN public network sync word.
    • 0x2B: The sync word used by Meshtastic firmware. A sync word mismatch produces complete silence at the host microcontroller.
  2. Preamble Length: A receiver needs a minimum number of un-modulated up-chirps to detect carrier energy, lock its phase, and align its symbol clock. If the transmitter uses an 8-symbol preamble while the receiver is cycling in a low-power duty-cycle mode that requires a 16-symbol preamble, detection fails intermittently.
  3. Explicit vs. Implicit Headers: In explicit header mode, the packet carries a short header detailing payload byte length, coding rate, and CRC presence. In implicit header mode, this header is omitted, and both radios must be hardcoded with identical byte lengths. An explicit transmitter talking to an implicit receiver will not agree on frame boundaries.
  4. IQ Polarity: LoRaWAN uses standard IQ polarity for uplink (node to gateway) and inverted IQ for downlink (gateway to node) to prevent nodes from demodulating other nodes’ transmissions. If IQ polarity is inverted, the receiver treats the signal as background noise.

Shared silicon and a shared frequency mean nothing without matching framing primitives and protocol parsers.

05 · Antennas, EIRP, and the 6 dBi Rule in 902–928 MHz

When range falls short, the instinctive workbench reaction is to buy a higher-gain antenna or an inline amplifier. But radiated RF power is strictly capped by physics and federal regulations.

What matters in the air is Effective Isotropic Radiated Power (EIRP):

EIRP (dBm)=Ptx conducted(dBm)Lfeed loss(dB)+Gantenna(dBi)\text{EIRP (dBm)} = P_{\text{tx conducted}} (\text{dBm}) - L_{\text{feed loss}} (\text{dB}) + G_{\text{antenna}} (\text{dBi})

Under 47 CFR §15.247(b)(4), where a 1 Watt (+30 dBm) conducted limit applies, the rules assume a maximum directional antenna gain of 6 dBi:

30 dBm conducted+6 dBi antenna=36 dBm EIRP (4 Watts)30\text{ dBm conducted} + 6\text{ dBi antenna} = 36\text{ dBm EIRP (4 Watts)}

If you connect a high-gain directional antenna (such as a 9 dBi Yagi) in the 902–928 MHz band, you must reduce your conducted transmitter power by the exact amount the antenna gain exceeds 6 dBi:

Conducted Limit=30 dBm(9 dBi6 dBi)=27 dBm (500 mW)\text{Conducted Limit} = 30\text{ dBm} - (9\text{ dBi} - 6\text{ dBi}) = 27\text{ dBm (500 mW)}

Unlike the 2.4 GHz and 5.8 GHz bands, there is no fixed point-to-point antenna gain exception for 902–928 MHz under §15.247(c). The 4 Watt EIRP ceiling remains absolute.

Furthermore, under 47 CFR §15.204(c), an operator may only replace an authorized antenna with an antenna of the same type (e.g., dipole, collinear omni, patch) having equal or lower gain than the antenna tested with the module grant. An SMA connector is an RF interface, not a legal clearance to attach arbitrary antennas.

The Link Budget Trade

Before spending money on high-gain antennas or risking power violations, look at your spreading factor settings. Shifting from SF7 to SF12 improves receiver sensitivity from $-124.5\text{ dBm}$ to $-137.0\text{ dBm}$ — gaining $12.5\text{ dB}$ of link budget without increasing radiated power by a single microwatt. The trade is paid entirely in airtime.

06 · The Encryption Advantage & The Default-Key Illusion

One of the greatest engineering advantages of deploying on unlicensed Part 15 spectrum rather than Amateur Radio (Part 97) is payload encryption.

Under Amateur Radio rules (47 CFR §97.113(a)(4)), operators are strictly prohibited from transmitting “messages encoded for the purpose of obscuring their meaning.” Furthermore, §97.311 enforces this same ban on amateur spread-spectrum signals. In 2013, the FCC issued Order DA 13-1918, explicitly dismissing a petition to create an encryption exception for emergency preparedness and disaster training. If you transmit under Part 97 rules, every packet must be plaintext and periodically identified with your station callsign.

Under FCC Part 15 unlicensed spectrum, the rules regulate the physical waveform — occupied bandwidth, dwell time, power spectral density, and out-of-band harmonics. Part 15 contains no restriction on payload content.

You are legally permitted to transmit:

  • AES-128 and AES-256 encrypted telemetry from home sensors, power monitors, and gates.
  • End-to-end encrypted messaging between authorized users.
  • Commercial and business traffic without amateur station licensing or callsign broadcasts.

The Operational Trap: Encrypted \ne Private

While Part 15 legally protects your right to encrypt, popular community firmware often creates a false sense of privacy.

Several widely used mesh platforms ship with publicly known default pre-shared keys (PSKs):

  • Meshtastic: The default LongFast primary channel uses a well-known, published AES-128 key (0x11, 0x11, 0x11...). Any device running the stock app within radio range automatically decrypts and reads every message and GPS beacon.
  • MeshCore: Public root channels and hashtag channels use pre-shared keys that are either publicly hardcoded or deterministically generated from the channel name string.
  • Packet Headers: In almost all mesh implementations, network-layer routing headers, node numbers, and hop counts are transmitted in the clear so intermediary relay nodes can route the packet without holding the decryption key.

If you are deploying a sensor network or team messaging link that handles sensitive telemetry, you must generate a unique, cryptographically random PSK and exchange it out-of-band. Legal permission to encrypt does not equal operational secrecy out of the box.

07 · Field Checklist & Common Misconceptions Corrected

Before ordering hardware or mounting an antenna on your roof, use this comparison to separate marketing claims from technical and regulatory realities:

Common Community ClaimPhysical & Regulatory RealityControlling Authority
“LoRa is an unlicensed radio service.”LoRa is a proprietary physical-layer modulation. Ordinary consumer operation in the US is authorized under FCC Part 15 unlicensed device rules.47 CFR §15.1, Semtech AN1200.22
“915 MHz allows 1 Watt on any channel.”1 Watt conducted requires either 500 kHz\ge 500\text{ kHz} 6 dB bandwidth with 8 dBm/3 kHz\le 8\text{ dBm}/3\text{ kHz} PSD, or 50\ge 50 channel FHSS with 0.4 s\le 0.4\text{ s} dwell. Fixed 125 kHz125\text{ kHz} channels cannot use this shortcut.47 CFR §15.247(a)
“LoRa is spread spectrum, so it’s a frequency hopper.”CSS sweeps frequency within its modulation bandwidth. Frequency hopping is an upper-layer channel-selection mechanism. A chirp is not a hop.47 CFR §15.247(g)
“SF12 is just ‘long range mode’ with no downside.”SF12 takes 23×23\times longer on air than SF7 (1.32 s1.32\text{ s} for 20 bytes). It can saturate channels, drain batteries, and exceed FHSS dwell limits.Semtech SX1262 Datasheet, §15.247(a)(1)
“Any antenna is legal if EIRP stays under 4 Watts.”Section 15.204 restricts replacement antennas to the same type and equal/lesser gain as documented in the module’s equipment authorization.47 CFR §15.204(c)
“Any two 915 MHz LoRa nodes can communicate.”Incompatible sync words (0x12 vs 0x34 vs 0x2B), preamble lengths, header modes, or framing protocols will block reception entirely.Semtech AN1200.13
“A ham license lets you run encrypted high-power LoRa.”Operating under Part 97 amateur rules strictly forbids messages encoded to obscure their meaning (§97.113(a)(4)), regardless of power.47 CFR §97.113, FCC DA 13-1918
“Default mesh channels provide confidential privacy.”Stock firmware channels use published or derivable keys. Anyone with an identical radio in range decodes that traffic.Project Security Docs

The Builder’s Pre-Flight Checklist

Before you finalize a LoRa node deployment, verify these six physical checkpoints on the bench:

  1. Verify the Module FCC ID: Search the FCC Equipment Authorization database for your transceiver module’s ID. Confirm the grant covers your operating frequencies, modulation types, and output power.
  2. Match Framing Primitives: Verify sync word registers (0x12, 0x34, 0x2B), preamble length, and explicit header modes between both transmitter and receiver firmware.
  3. Calculate Airtime & Channel Capacity: Use the symbol time formula (2SF/BW2^{SF} / BW) to calculate packet time on air. Keep payloads compact to prevent channel saturation and respect dwell limits.
  4. Tune the Antenna with a VNA: Measure your antenna on a NanoVNA at 915 MHz before installation. Ensure S11<15 dBS_{11} < -15\text{ dB} (SWR <1.43< 1.43) to protect the transceiver’s output stage and maximize radiated efficiency.
  5. Set Low Data Rate Optimization: Ensure LDRO is enabled whenever symbol duration exceeds 16 ms16\text{ ms} (SF11 and SF12 at 125 kHz125\text{ kHz}).
  6. Generate Custom Encryption Keys: If transmitting private telemetry or secure messages under Part 15, generate an independent, cryptographically random key rather than relying on default firmware channels.

LoRa is one of the most capable tools in modern RF engineering when you design with its physical boundaries in mind. Keep your spreading factors lean, verify your framing registers, stay within Part 15 spectral rules, and let the physics of chirp spread spectrum carry your telemetry through the noise.