Spreading factor, chips and symbols: why my 58-byte tracker frame never arrives from far away
Trailer trackers again (the battery ones from my other thread are fine now, thanks). These ones send GPS + a few sensor values, 58 bytes, every 10 minutes, unconfirmed, EU868, joined to our Hermetry LoRaWAN gateway on the depot roof.
In the yard, every frame arrives. Once a trailer is a few km out, I see nothing in the frames log at all, but a different cheap temperature sensor at a similar distance gets through fine. Its payload is 11 bytes.
I tried to read up and now I’m stuck on vocabulary: spreading factor, chips, symbols, chirps. What actually is a chip and a symbol, and why would the payload size matter for range?
following, I don’t understand chirps either
I thought SF12 is just a slower version of SF7, same thing, more time?
Roughly, yes Aisha, and that’s where Kevin’s problem comes from.
LoRa sends a chirp, a tone that sweeps across the 125 kHz channel. A symbol is one chirp; where in the sweep it starts encodes the data. The spreading factor says how many bits one symbol carries: SF7 carries 7 bits and has 2^7 = 128 chips (steps) per sweep, SF12 carries 12 bits with 4096 chips. Each step up roughly doubles the time on air, and the receiver gets more time to pull a weak signal out of the noise, so range goes up.
In LoRaWAN those are data rates. EU868: DR5 is SF7, DR0 is SF12. Far devices need DR0 to DR2, and at those rates the most application payload you can send is 51 bytes. DR3 allows 115, DR4 and DR5 222. Your 58-byte frame physically can’t go out at the slow rates, so as soon as the tracker drops to SF10 or below, the stack refuses or the frame is lost, and nothing reaches the frames log. Your 11-byte sensor fits at DR0.
Two fixes. Pack the payload under 51 bytes: lat/lng as scaled int32 instead of floats or text, battery as one byte. And for trackers, turn ADR off on their profile, the network server adjusts on the last 20 uplinks and a moving device changes faster than that; set the data rate in firmware by distance instead. Table on Regions and frequency plans.
Lat/lng as int32 × 1e6 is 8 bytes for both, plenty precise for a trailer.
Watch battery life at SF12 too, each frame is well over a second on air.
Repacked it to 23 bytes (Daniel’s int32 trick) and turned ADR off on the tracker profile. A trailer 9 km out came through on SF11 all afternoon. I also finally get what a chip is.
Good explanation Ciaran, saving this for the next new hire.
- Debes estar registrado para responder a este debate.
Únete a la conversación
Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

