Hi all,
I have a 3-node DigiMesh network where the forward direction routes through an intermediate correctly, but the reverse direction will not — the sink keeps attempting a direct (single-hop) delivery to an out-of-range leaf and fails with Delivery Status 0x01, instead of routing the reply through the relay that demonstrably works in the other direction.
Hardware
- 3 × XBee-PRO 900HP (S3B),
ATVR = 0x8075. - API mode (
AP=1), driven by an MCU over UART.
Nodes
- Sink — fixed; all traffic targets it; connected to a host PC.
- Leaf — a roaming handheld; sends a short unicast to the sink, expects a
short unicast reply. Important: to conserve a 2×AAA supply, the leaf’s MCU
powers the XBee completely off between transactions and cold-boots it
(hardware reset + re-init) at the start of each scan. So the leaf’s radio is
only present in the mesh for the few seconds around a tag scan, and rejoins
fresh every time. It does not use XBee sleep modes (SM=0); the MCU gates
power via the reset/regulator lines, notSM/SP/ST. - Relay — fixed, higher-power module between leaf and sink.
All three are configured identically for DigiMesh and verified in XCTU:
SM=0, CE=0, TO=0xC0, NH=7, BH=0, MR=7, identical ID/CH/HP.
What works
- Leaf → sink (forward) routes through the relay. Confirmed: with the leaf out of the sink’s direct range, forward delivery works; unplug the relay and forward stops; restore the relay (leaf unmoved) and forward resumes. So the relay is genuinely bridging multi-hop in this direction.
- All individual links are good. From the relay (on an XCTU dev board), a Remote AT (0x17) to the leaf’s 64-bit address returns Delivery Status
0x00; XCTU network discovery shows the leaf at ~ −87 dBm. The relay reaches both the sink and the leaf.
What fails
- Sink → leaf (reply) fails 100% when the leaf is out of the sink’s direct range (but in the relay’s range). Delivery Status =
0x01(MAC ACK failure), returned ~300 ms after the request.
The 0x01 is the puzzle: if the sink were routing the reply via the relay, the next hop would be the relay (which ACKs fine — forward proves it), so we’d never see a MAC-ACK failure. 0x01 means the sink is attempting a direct transmit to the leaf (next hop = the out-of-range leaf, no ACK) and not routing through the relay — and not recovering via route repair despite MR=7.
It looks like the sink has cached the leaf as a direct neighbor (presumably from occasionally hearing the leaf’s relayed forward packets at a marginal level) and keeps retrying direct delivery rather than using the known-good multi-hop path.
What we’ve tried
- Swept the per-packet Transmit Options byte (
0x40works for forward;0x00/0x80/0xC0broke all delivery — so we’re on0x40). TO=0xC0confirmed on all three; network-reset / power-cycled all three.- Aggregator: issued
ATAGfrom the sink (returnsOK) — no effect on the reverse path. - Verified every node’s
SM/CE/TO/NH/ID/CH/HP,MR=7, and all links.
Questions
- In a correctly-configured DigiMesh network, why would the sink attempt a direct unicast to a leaf (failing
0x01MAC-ACK) instead of routing the reply through a relay that is actively bridging the forward direction? What makes a node choose direct delivery and not fall back to route discovery/repair for an out-of-range destination? - How do I force the sink to route the reply through the relay — e.g. clear/expire a stale direct neighbor entry, force a route discovery (
DN/explicit route) before the reply, or a Transmit Options /CE/MR/NOsetting that changes this? - Does DigiMesh treat a node that frequently resets/rejoins (our leaf power-cycles its radio between transactions) differently for inbound routing — i.e. routes to it don’t establish/persist even though routes from it do?
- Confirm
ATVR=0x8075is the DigiMesh function set for the 900HP (the function-set name from XCTU is[FILL IN]).
Happy to post raw API frame captures (the 0x10 request + 0x8B 0x01 status, and the relay’s successful Remote AT) if useful.
Thanks!
Hongwei