Wiki

Technical reference for system integrators and engineers.

L-MESH

L-MESH (Leantegra Mesh) is a battery-operated 2.4 GHz TDMA mesh protocol with relay functions for RTLS, GNSS, Sensor Telemetry and Alarms.

L-MESH carries measurements and messages across a chain of devices that have no cabling and no network coverage — the case an underground tunnel presents. It runs on the Unified TDMA schedule, so its slots share one time base with UWB ranging rather than competing with it, and it provides the assistance functions that let the expensive radios stay asleep.

Band2.4 GHz
AccessTDMA — scheduled slots, no contention
PlatformnRF52 series, within the capabilities of the fitted radio
RelaysRTLS · GNSS · Sensor Telemetry · Alarms
Providespresence detection · assistance data distribution

Why scheduled rather than advertised

The decision that shapes everything else is that a receiver is told when to listen. An unscheduled protocol cannot say that, so the listener must scan — and scanning is what makes battery relays impossible:

ApproachReceiver cost
Advertising — listener scans 30 ms every 500 ms≈ 0.28 mA
Advertising — listener scans continuously≈ 4.6 mA
L-MESH — listener opens a known 1.3 ms window per relay round≈ 0.072 mA
Transmitting is cheap in any protocol. Hearing is what costs, and it costs in proportion to how long the receiver has to keep its radio on waiting. A schedule collapses that window to the width of the frame plus a guard.

Topology

A tunnel is effectively one-dimensional, which makes the hard parts of mesh easy. Routing is upstream or downstream — there is no discovery protocol and no routing table to converge. Nodes are placed along the drift, typically every 50 m, giving 60 to 100 nodes across 3–5 km.

SPATIAL REUSE — SLOT = HOP INDEX MOD 4 GATEWAY mains / PoE r0 r1 r2 r3 r0 r1 r2 r3 r0 50 m nodes four apart share a slot — a chain of any length needs four slots ordered along the direction of flow, so data advances one hop per relay slot 24 relay slots per superframe → 24 hops per superframe → 99 hops ≈ 2 s end to end
A node's transmission reaches two to three hops at this spacing, so a slot can be reused every fourth node without collision. Chain length does not enter the slot budget.

Spatial reuse

Relay slots are assigned by position in the chain, not by device:

relay slot  =  hop index  mod  reuse factor        (default 4)

Four relay slots therefore serve a chain of any length. A hundred-node chain does not need a hundred slots, which matters because the schedule is bounded — see capacity below.

Ordering

Ordering the reuse groups along the direction of flow means data advances one hop per relay slot rather than one hop per superframe. The reuse factor sets how many slot identities exist — four; the relay region sets how many slot positions the superframe carries, and that is what bounds progress:

hops advanced per superframe  =  relay slots in the superframe     (default 24)
ChainOrdered — 24 hops/superframeUnordered — 1 hop/superframe
59 hops (3 km)≈ 1.1 s≈ 30 s
99 hops (5 km)≈ 2.0 s≈ 50 s
The relay region cannot be made arbitrarily long: it competes for the same slot table as everything else in the superframe, which holds 29 usable positions. A chain longer than the relay region spans more than one superframe, and the superframe boundary — not the hop — becomes the dominant cost. See Delays and performance.

The guard band is the power budget

At the data rates these networks run — 0.5 Hz, often 0.1 Hz — transmitting is not what drains the battery. What drains it is opening a receive window wide enough to be certain of catching the sender, and that width is set by how far the local clock has drifted since the last sync.

ONE RELAY SLOT GUARD ± drift ramp FRAME GUARD ± drift Frame is fixed. Guard is not.
The frame is about 1 ms. Everything else in the slot is uncertainty about when it will arrive.

Drift compensation

On receiving a sync frame a node learns two things: where its clock is (phase error) and, by differencing against the previous sync, how fast it is running (rate error). Correcting only the first leaves a 500 ppm part behaving like a 500 ppm part. Correcting both makes it behave like roughly 50 ppm.

phase_err  =  t_actual − t_expected
rate_ppm   =  phase_err / interval_since_last_sync
ppm_est    =  filter(ppm_est, rate_ppm)

slot_time  −=  slot_time × ppm_est
guard_us    =  k × |ppm_est| × time_since_sync     ← adaptive, not fixed

Required receive window, including a 1 ms frame and radio ramp:

ClockResync 2 sResync 10 sResync 30 s
Uncompensated RC, 500 ppm3.1 ms11.2 ms31.1 ms
Calibrated RC, 250 ppm2.1 ms6.2 ms16.1 ms
Rate-compensated, ≈ 50 ppm1.3 ms2.1 ms4.1 ms
32.768 kHz crystal, 20 ppm1.2 ms1.5 ms2.4 ms
A node coasting 30 seconds on an uncompensated RC oscillator listens 26× longer than a crystal-equipped node for the same frame. Rate compensation recovers most of that in software, on hardware that has no low-frequency crystal fitted.

The guard tracks measured drift rather than a worst-case specification, so a node in a thermally stable tunnel converges to a narrow guard and stays there, while one near ventilation widens its own until it re-converges. Nothing is configured per site, and no unit pays for the worst unit in the fleet.

What the guard costs

A node opens one receive window per relay round — six per superframe, twelve per second — whether or not anything arrives for it. Guard width therefore multiplies straight into standing current, and the rows below are the drift table above priced at that cadence:

ClockResync 2 sResync 10 s
Uncompensated RC, 500 ppm0.171 mA0.618 mA
Calibrated RC, 250 ppm0.116 mA0.342 mA
Rate-compensated, ≈ 50 ppm0.072 mA0.116 mA
32.768 kHz crystal, 20 ppm0.066 mA0.083 mA

Against a 9600 mAh cell (Locator Lite XT) that is 1.8 years for an uncompensated part at a 10 s resync, against a figure bounded by cell ageing rather than consumption once rate compensation is holding. Compensation is worth 2.4× at a 2 s resync and brings a crystal-less part within 9% of one that has a crystal fitted.

This is the standing cost of belonging to the mesh — listening in every relay round with nothing to carry. What traffic adds on top is in Delays and performance, and it is the smaller number of the two.
These are idle figures — the cost of holding a place in the schedule with nothing to carry, which is set by clock quality alone. What relayed traffic adds on top is in Delays and performance.

Channel hopping

The channel is derived from the slot counter rather than fixed:

channel  =  hop_seq[ (slot_counter + node_offset)  mod  HOP_LEN ]

Two things follow. A chain that would fail on one congested channel keeps running on the rest — worth having anywhere near WiFi. And the same 16-channel hop set supplies the frequency diversity that L-DCB positioning depends on — L-DCB sequences that set within a single slot on its own counter rather than taking one channel per slot, so the two share the channel plan without sharing the derivation.

Traffic classes

Relay traffic is not uniform. A telemetry record can wait for the next scheduled slot; an alarm cannot.

ClassCarriesLatency
ExpeditedAlarms — gas, SOS, proximityInjected at the next round boundary rather than waiting for the relay period — transit across the chain is still the relay’s
ScheduledRTLS, GNSS, Sensor TelemetryRelay cadence — 0.5 Hz or 0.1 Hz
BulkBuffered history, diagnosticsBest effort, yields to both
A relay running at 0.1 Hz would hold an alarm for up to ten seconds plus hop latency. The expedited class exists because that is not an acceptable number for a safety function, and it is stated separately from the telemetry cadence for exactly that reason.

Assistance functions

Beyond carrying data, L-MESH lets the power-hungry subsystems stay asleep. Both functions exploit the same asymmetry — the 2.4 GHz radio costs a fraction of what UWB reception or GNSS acquisition costs, so it is used to decide whether those radios need to run at all. The schedule already says when each slot begins; what it cannot say is whether a given slot will carry anything.

FunctionProvidesDetail
Presence detectiona device announces itself on 2.4 GHz; the positioning radio wakes only for slots belonging to devices known to be in rangeA-RTLS
Assistance datasatellite ephemeris and almanac broadcast downstream over slots the chain already usesA-GNSS
Both are downstream of the same design decision: because every radio reads one Unified TDMA schedule, a wake time worked out on the cheap radio is directly usable by the expensive one. No negotiation is needed to agree when to listen.

Capacity and limits

Because access is scheduled, capacity is a slot count rather than a collision probability. It is exact, and it is bounded.

TDMA superframeUsable slotsRelaySync + ingress
500 ms29245
250 ms29245

The split is the design decision that matters most, because the two halves buy different things. Relay slots buy latency — each one advances a record a further hop before the superframe ends. Ingress slots buy admitted devices. At 24 relay slots a chain crosses 24 hops per superframe and five slots remain for sync and ingress.

Ingress capacity is not five devices. Ingress slots are spatially reused exactly as relay slots are, so the same five positions serve every reuse zone along the chain independently — roughly 25 zones on a 100-node chain. It is the local density that is capped at five per zone, not the population.

Slot count is capped by the scheduler, not by airtime — at these TDMA superframe periods the ceiling binds well before the medium does. Deployments needing more concurrent devices either shorten the superframe or raise the cap.

Behaviour at the limit differs from a contention protocol in a way worth designing around. A contention network degrades gradually and silently as density rises; a scheduled one delivers everything it admits and refuses what it cannot. That makes admission control a required feature rather than an optional one.

The funnel

Every node's data crosses the last link before the gateway, so that node's load scales with the whole chain while the far end stays idle:

ChainPer nodeHead-node load
60 nodes1 record/s60 records/s
100 nodes1 record/s100 records/s
100 nodes5 records/s500 records/s

What that concentration costs the head node in current, and how it behaves as devices are added, is in Delays and performance.

Three responses, in order of preference: power the head node, since portals and substations generally have mains; place gateways along the chain, roughly every kilometre, which splits the funnel and shortens the longest path; and aggregate before relaying, since at these record sizes framing overhead is a large fraction of airtime.

Delays and performance

The question a deployment has to answer is how old a record is by the time it reaches the terminating node — the gateway end of the chain — and what carrying that traffic costs the nodes in between. Both follow from the schedule, so both are calculable rather than measured after the fact.

Where the time goes

A record advances one hop per relay slot, and the superframe carries 24 of them. A 99-hop chain therefore needs five superframes, and what dominates is not the hops but the four waits between them:

FAR-END RECORD, 99 HOPS — FIVE SUPERFRAMES ≈ 2.0 s SF 1 SF 2 SF 3 SF 4 SF 5 24 hops — 120 ms of which 380 ms is idle waiting airtime is only 99 × 5 ms = 495 ms of the 2.0 s — the other 1.5 s is waiting for the next superframe a chain that fits inside one relay region delivers in one superframe: 24 hops = 1.2 km = 0.12 s which is why segmenting with gateways changes the result by more than any protocol setting
The superframe boundary, not the hop, is what a long chain pays. Four of the five superframes are spent almost entirely idle.
Latency is a staircase, not a slope. Every 24 hops adds one whole superframe, so a 24-hop chain and a 1-hop chain both deliver inside 500 ms, while hop 25 costs another half second. Chain length is a commissioning parameter for that reason, and the step is worth designing segments around rather than discovering afterwards.

Every latency figure in this section is for a fixed chain of 100 nodes. Chain length is the variable that actually moves them — device count does not:

NodesChainHopsSuperframesArrival
251.2 km2410.12 s
492.4 km4820.62 s
502.45 km4931.00 s
603.0 km5931.05 s
1005.0 km9952.02 s

The 49-to-50 node row is the staircase in practice: one extra node at the end of a drift costs 380 ms, because hop 49 starts a third superframe that hop 48 did not need. A commissioning decision can therefore cost more latency than any setting in this document.

These figures assume the relay region holds 24 slots — that L-MESH has the superframe close to itself. Where UWB ranging shares the same 29-slot table, relay gets fewer: at 14 relay slots the 99-hop chain becomes 3.5 s. The split is a deployment decision before it is a protocol one.

Arrival latency

Latency is flat across device count and reporting rate throughout the range below, and is set by chain length alone. That is the property scheduled access is bought for: a record occupies a slot that was already reserved, so adding devices does not lengthen anyone else’s path. What device count changes is how full each relay frame is, not when it departs.

DevicesRateRecords/sRelay frameFar-end arrivalMid-chain arrival
101 Hz101 of 16 records2.0 s1.0 s
100.5 Hz51 of 162.0 s1.0 s
100.1 Hz11 of 162.0 s1.0 s
501 Hz502 of 162.0 s1.0 s
500.5 Hz251 of 162.0 s1.0 s
500.1 Hz51 of 162.0 s1.0 s
1001 Hz1004 of 162.0 s1.0 s
1000.5 Hz502 of 162.0 s1.0 s
1000.1 Hz101 of 162.0 s1.0 s

The two arrival columns are transit time — from a record entering the mesh to it reaching the terminating node. What that does and does not cover:

Starts atthe record entering its ingress slot — for a sensor sampled inside its own slot this is the moment of measurement
Ends atthe terminating node at the gateway end of the chain
Coversingress slot, every relay hop — 99 at the far end, 50 mid-chain — and the superframe boundary crossed after every 24 hops
Is the meana record entering just after its relay slot has passed waits one more superframe; the worst case at 99 hops is 2.5 s
Excludesgateway processing and the onward MQTT publish; a retransmission after a lost frame adds one round, 20 ms

A relay frame is about 1 ms and holds roughly 16 records at Sensor TLV sizes. At 100 devices reporting every second the head node is carrying two records per frame — an eighth of one frame’s capacity, against 24 frame opportunities per TDMA superframe. Airtime is not the constraint anywhere in this table. The reporting rate sets how often a value is refreshed, not how long it takes to arrive.

The two directions do not cost the same. Slots are ordered along the direction of flow — toward the gateway — so a record travelling upstream advances one hop per slot, while one travelling downstream finds the next node’s slot has already passed and must wait for the following round:

ChainUpstream — one hop per slotDownstream — one hop per round
19 hops (1 km segment)0.10 s≈ 2.0 s
99 hops (5 km)2.06 s≈ 10 s
199 hops (10 km)4.50 s≈ 20 s
Downstream traffic is configuration, assistance data and messages — rare, and tolerant of seconds. The asymmetry is a deliberate consequence of ordering the schedule for the direction that carries almost all the traffic. Where outbound latency matters, alternating the slot ordering between superframes makes the two symmetric at the cost of halving upstream throughput.
TrafficAdded before relay
Sensor TLV — sampled inside the device’s own slotnone
RTLS position — ranging slot ordered before ingressnone
RTLS position — ranging slot ordered after ingress+ one superframe (500 ms)
Alarm — Expedited classnext round boundary, ≤ 20 ms
Slot ordering inside the TDMA superframe is worth half a second on every RTLS record and costs nothing to get right. Placing the ranging slot ahead of the ingress slot lets a position leave in the superframe it was measured in; the reverse order holds it until the next one.

Power under load

A relay region of 24 slots is six rounds of four. A node listens once per round — 1.3 ms with rate compensation held at a 2 s resync — which is 0.072 mA of listening whether or not anything arrives, and transmits a 1 ms frame only when it has something to forward. Listening, not traffic, is most of the bill:

DevicesRateFrames/superframeHead nodeHead-node service life
101 Hz10.081 mAcell-limited
100.5 Hz10.081 mAcell-limited
100.1 Hz< 10.077 mAcell-limited
501 Hz20.091 mAcell-limited
500.5 Hz10.081 mAcell-limited
500.1 Hz10.081 mAcell-limited
1001 Hz40.110 mA≈ 10 years
1000.5 Hz20.091 mAcell-limited
1000.1 Hz10.081 mAcell-limited

Relay contribution only, against a 9600 mAh cell (Locator Lite XT); sensing, positioning and MCU wake add to it. Cell-limited means the computed figure passes 20 years, at which point calendar ageing decides service life rather than consumption.

The whole column spans 0.077 to 0.110 mA — a 43% range across a tenfold change in offered load, because 0.072 mA of it is listening that happens regardless. Traffic is close to free; holding a place in the schedule is not. That also means the levers worth pulling on power are the ones that shorten the listening, not the ones that reduce records: a wider resync interval or a narrower guard moves this table far more than halving the device count does.

The head node is still the node to mains-power, but on this arithmetic the reason is reliability rather than current: it is the single point every record crosses, and at 0.11 mA the relay function alone would outlast the cell. The funnel matters for what it concentrates, not for what it consumes.

Shortening the path

Because the delay is superframe crossings rather than airtime, the levers that look obvious are not the ones that work. Narrowing the slot does nothing at all — it shortens the 495 ms of airtime inside a 2.0 s total that is otherwise idle waiting:

ChangeHopsFar-end arrivalCost
Baseline — 5 km, 50 m spacing, 24 relay slots992.0 s
Slot 5 ms to 3 ms992.0 sno effect — the wait is superframes, not airtime
Superframe 500 ms to 250 ms991.0 shalves the step; doubles sync cost
Spacing 50 m to 100 m491.0 srequires the link budget to carry it
Gateway every 1 km190.10 sfits one superframe — four more gateways to power
Raise the slot table to 100 entries990.50 schanges the shared scheduler, not just L-MESH

Segmenting is the only lever that crosses the threshold rather than nibbling at it. A segment of 24 hops or fewer — 1.2 km at 50 m spacing — completes inside one superframe, which turns 2.0 s into 0.10 s and divides the funnel by the number of segments at the same time. Everything else on that list trades something real for a factor of two.

These figures assume the schedule is being held — that sync is not being missed. A node that loses sync widens its guard, and the receive window is what the power figures are made of. A retransmission after a lost frame adds one round rather than one superframe, provided the retry slot sits inside the same sweep.

Configuration

Settings a deployment tunes. Sync cadence and relay rate are independent on purpose — resync is cheap and frequent so that guards stay narrow, while payload is rare and rate-configurable.

SettingDefaultEffect
Relay rate0.5 Hzpayload cadence
Sync cadence2 sbounds drift, and so sets guard width
Reuse factor4raise where radio range exceeds three hops
Slot duration5 msfloor set by sync accuracy
Hop indexassignedposition in the chain
Channel hop set161 disables hopping
Guard modeadaptivefixed for bring-up and diagnostics
Presence gatingonoff where devices are continuously present

Platform

This release targets the nRF52 series, operating within the capabilities of the radio fitted to each product. Devices without a 32.768 kHz crystal run the internal RC oscillator, which is what makes rate compensation load-bearing rather than an optimisation.

Interacts with
Unified TDMAthe schedule L-MESH slots occupy
A-RTLSpresence gating for UWB TWR, UWB TDoA and L-DCB
Sensor TLVthe record format relayed
A-GNSSassistance data distribution
MQTTwhat the gateway publishes onward
Every current and timing figure on this page is derived from device datasheet characteristics and the schedule arithmetic above — nRF52 receive at 4.6 mA, transmit at 4.8 mA at 0 dBm. They describe the design, and want confirming by measurement on a bench unit running the shipped schedule before they are used to size a deployment.