Expromo EPS power sequencer · firmware 3.3 (recommended as official)

EPS firmware 3.3: executive summary

v3.3 is the firmware we recommend as the official EPS firmware. It replaces the network layer of v2.2 with one written for the job (v3.0), brings it in line with the network standards an enterprise network expects (v3.1), widens the chip self-check to the faults that reproduce the field dropout (v3.2), and closes the four gaps a full code analysis found in that self-check (v3.3). Where v2.2 needed a power cycle after the network failures we reproduced, v3.3 recovers by itself, measures its own supply, and records what happened when something goes wrong. It was tested overnight against every earlier version on the same box; it has not yet run in the field. The case for making v3.3 official → · All versions compared →

Status 2026-10-12 · Bench: three units on a NETGEAR M4250 (a switch model with field failures), then a real EPS box cabled to a PC · All tests pre-registered, every failure reported

Bottom line

Field problem: EPS units on v2.2 randomly drop off the network (no ping, no web page, no control) until their power is cycled.

What we found: v2.2 has several defects that lead to exactly that state. The clearest one: in DHCP mode, a single DHCP renewal that goes unanswered makes v2.2 restart itself, and if the DHCP server is away at that moment, the unit stays off the network until someone power-cycles it. Others: the network chip losing its settings (v2.2 never notices), and connections that block the control port. For units set to a static address, the field trigger is still open.

What the code analysis added (2026-10-12): v2.2 cannot silence a static unit by its own logic; something outside the firmware has to upset the network chip. But every such upset is permanent on v2.2, and the most likely trigger is the supply: the board's brown-out level is 2.7 V (the box reports it), well below what the CPU and the network chip need.

v3.3: recovers by itself from every one of these in our tests, typically within seconds, keeps the outputs on while it does, and keeps a log (now with the supply voltage at every chip fault) that will tell us what happened if a unit does drop off in the field. In the single-register fault matrix it recovers from all 17 faults, including two new ones: a PHY held in reset, on which v3.2 is dead, and a link that only the new link-down recovery can bring back. On the pre-registered suite of 56 network-standard requirements it passes 48 (v3.1/v3.2: 46, v2.2: 26); of its six failures, two are limits of the network chip and four are kept on purpose. We are confident v3.3 is the most robust firmware we have. Whether it ends the field dropouts will be shown by a pilot and a supply-sag test, not by the bench.

17 / 17
single-register chip faults v3.3 recovers from (3 trials each, 51 trials), with no "dead" outcome. v3.2 is dead on the new PHY-reset fault; v3.1 dies on 4; v2.2 is dead or stuck on most.
48 vs 26
network-standard requirements passed, of 56: v3.3 vs v2.2 (v3.1/v3.2: 46), same suite, same box. Two of v3.3's six failures are limits of the network chip; four are kept on purpose.
99.9–100 %
availability under normal controller load with the new network layer, vs 84–87 % for v2.2 (6 runs each, two boards). v3.1/v3.2 re-run: 541 of 541 answered.

What changed from v2.2 to v3.3

Outputs, timing, inputs, LEDs, the TCP control protocol (Companion, eXcontrol, Crestron, Q-SYS) and all stored settings work as before. The network layer below was rewritten in v3.0, brought to standard in v3.1, had its self-check widened in v3.2, and had the gaps in that self-check closed in v3.3.

Areav2.2v3.3Why it matters
Network driverArduino Ethernet library, 4 connections shared by everythingOwn W5500 driver, all 8 hardware sockets, fixed per serviceNo service can starve another
Idle and half-open connectionsNever closed; two idle browser connections block the control portWeb closed after 5 s idle; control connections kept, oldest evicted when full; a stalled receiver is dropped after 2 sControllers and browsers can't lock the unit out
DHCPBlocks for up to 60 s; an unanswered renewal restarts the unit; after one failed start it never asks again; asks once a secondNever blocks; RFC 2131 timing (random start delay, back-off 4–64 s, renew, rebind); checks the leased address and declines it if in use; falls back to static and keeps askingSurvives DHCP server outages without a power cycle, and doesn't flood the server
Address conflictsNone: takes an address already in useChecks every address before use (RFC 5227: 3 probes, 2 announcements); doesn't take one in use; defends its ownA mistyped IP doesn't knock another device off the network
Network chip healthNever checkedChecked every 5 s; re-initialised within seconds if settings are lost. v3.2 widened the check to the mode, retry and PHY registers (ping block, retry count, forced slow link, PHY power-down); v3.3 adds the PHY reset bit, so a PHY held in reset is caught tooRecovers from a supply dip, interference or a PHY fault (the field symptom)
Link and PHYNever resetFresh negotiation at every start; re-applied if the PHY register is wrong; v3.3: PHY reset after 30 s without link (backing off to ~32 min); receiver check once a minute that also works without a gateway and ignores a gateway that has simply gone; optional fixed 10 MbpsRecovers from a stuck, powered-down or deaf link
MAC addressSet in the sketch for each unit before flashingWritten once per unit from Expromo's IEEE block and stored in the unit; later updates and factory reset keep itA generic update can't give a unit the wrong MAC
Web page and HTTP3,598 packets, ~0.9 s, blocks control meanwhile; every method treated as GET3 packets, ~45 ms; 400/405 for bad or other requests; HEAD never switches anythingControl stays responsive; HEAD and other methods never switch power
TCP retriesLibrary writes the wrong chip registers: gives up after 18 sGives up after 102 s (RFC 1122: at least 100 s)Connections survive short network hiccups
Power control during network waitsStops while the network code blocksInputs, power sequence and LED keep runningA slow client can't delay switching
DiagnosticsNoneNET_STATUS, a 96-event log that survives power cuts, and optional syslog: restarts with reason, link drops, chip re-inits, PHY resets, DHCP, address conflicts, every power command with its source. v3.3: 5 V supply now and lowest (VCC, VCC_MIN), logged with every chip re-init, and the brown-out fuse (BOD)A dropout in the field leaves evidence, including whether the supply sagged

Measured on the bench: v2.2 vs the new firmware

The side-by-side comparison ran on v3.0, which has the same network layer. Every test that doesn't need a long run was then repeated on v3.1's final build, all passed.

Testv2.2v3.0 / v3.1
Normal controller load: availability (6 runs, 2 boards)84.2–86.6 %99.91–100 % v3.0
Control reply, 99th percentile1,031–1,532 ms31–47 ms v3.0
Longest control-port outage per 5-min run79–121 s0 s v3.0
Idle connections held open (up to 5 per port)control port dead from 1–2800 of 800 answered v3.1
Network chip loses its settingsdead until reset (4/4)recovered in 2.1–6.9 s, outputs kept (10/10) v3.1
DHCP renewals (M4250 server, 10 min)restarted itself every 3–4 minkept its lease, no restarts v3.0
DHCP server off 5 min, then backstranded until power cyclelease back 6 s after the server returned v3.0; v3.1 keeps asking at most 64 s apart
Silent start-up after a reset (same board)4 in 5360 in 300 (suggestive, not proven) v3.0
5 h side by side, ping and control every secondno failures; worst reply 625 msno failures; worst reply 16 ms v3.0
Main-loop hangwatchdog restartwatchdog restart, answering ~25 s later (3/3) v3.1
Single chip-register faults (17 faults, real box)dead or stuck on mostv3.1 dies on 4 (incl. PHY power-down); v3.2 recovers from the original 14 but is dead on a PHY held in reset; v3.3 recovers from all 17 (51 trials, 3–10 s, outputs never moved) v3.1–v3.3
Gateway disappears (router reboot), 12 min watchedkeepalive keeps using the cached address; no reactionv3.2: no ARP after it vanished, so its check keeps "succeeding" on a cached address (and can't see a deaf receiver); v3.3: one ARP request per check, no false PHY reset v3.2 / v3.3
Start-up after a USB reset (real box, ×200)200/200, 0 deaf200/200, 0 deaf v3.1

Why v3.3 over v3.2: a code analysis found that v3.2's self-check ignored the PHY's reset bit, that nothing recovered a link that stayed down, and that its deaf-receiver check could never fire on a network without a gateway or right after a link-up. v3.3 closes all of these, measures the supply, and sends one ARP request per check instead of twenty. In the overnight run it recovered from all 17 faults (v3.2 is dead on the PHY held in reset) and passed every regression test, Twice in 40 chip-reset trials the network chip came back deaf after its re-init and cleared by itself (38 s and about 3.5 min): the rare "deaf after a link negotiation" state, now captured on this box too. Faster detection of it is the next firmware step. Full argument: Why v3.3 should be official.

v3.0's one recorded miss: a single lost ping in 6 load-test runs. Every bug found during testing was fixed and is listed in the full report.

Network standards: v3.3 vs v2.2

Fifty-six requirements from ten standards, each with a pass criterion written down before either firmware was tested, run with the same tool on the same box. A standard passes only if every one of its requirements passes, so one failed item is enough to fail it. The suite was run on v3.1 (2026-10-10) and again on v3.3 (2026-10-12). v3.2 scores as v3.1: its only change is the health check, which nothing in the suite measures.

Standardv2.2v3.3
IEEE 802.3 EthernetPassPass
IEEE 802 MAC addressingPassPass
RFC 826 ARPPassPass
IEEE 802.1D/Q end stationPassPass
RFC 5227 address conflict detectionFail: 6 itemsPass
RFC 5424/5426 syslogNot availablePass
RFC 2131/2132 DHCP clientFail: 7 itemsFail: 1 item
HTTP (RFC 9110/9112)Fail: 7 itemsFail: 2 items
TCP (RFC 9293/1122)Fail: 2 itemsFail: 1 item
RFC 1122 host requirementsFail: 3 itemsFail: 2 items (chip limits)
Requirements passed, of 562648

Why v3.3 still fails four standards

  • Network chip limits (2): the W5500 corrupts long ping payloads and can't reassemble fragmented packets. No firmware on this board can change that; v2.2 fails the same two.
  • Fixed in v3.3 (2): ARP requests to an absent gateway (now one per check) and 414 for an over-long URL. Left as is (1): no 400 when the Host header is missing, because control systems send hand-written HTTP strings that often omit it.
  • Kept on purpose (3, plus the Host check above): the web page and control systems switch power with simple GET links; a stalled receiver is dropped after 2 s so it can't hold up power control; while waiting for a DHCP server the unit asks from its fallback address, so it stays reachable.

Is v2.2 as good, since both fail four?

  • No. One failed item fails a whole standard, so the count of failed standards hides the size of the gap: v2.2 fails 25 requirements, v3.3 6.
  • Only v2.2 takes an IP address already in use, asks for DHCP once a second, renews and rebinds incorrectly, drops TCP connections after 18 s, and treats every HTTP method as a GET.
  • The standards suite doesn't test recovery from the field failures, where the gap is largest (table above).

Fit with enterprise network practice

Verified on the benchBuilt in, not yet verifiedNot supported
Areav3.3 behaviourConfidence
DHCP client (RFC 2131)Random start delay and back-off; renews by unicast at T1, rebinds at T2, falls back when the lease expires; declines an address in use; sends a hostname (EPS-xxxxxx). Tested with three different servers (v3.0) and the new timing with a bench server (v3.1). One deviation: while it has no lease it asks from its fallback address, not 0.0.0.0.Verified
Static addressingDefault mode; the address is checked before use and not taken if another device has it.Verified
Address conflicts (RFC 5227)Probes and announces at start-up, after a link outage and for every new lease; logs later conflicts and defends its address (defence code-reviewed only: testing it needs forged traffic).Verified
ARPAnswers in hardware; one ARP request a minute to the gateway (or, without one, to the last controller), never more than one a second, even when the gateway is absent.Verified
Unique, registered MACOne address per unit from Expromo's IEEE MA-S block (8C:1F:64:C3:9x:xx).Verified
Link10/100 Mbps auto-negotiation; works with a partner forced to 10 or 100 Mbps half duplex; optional fixed 10 Mbps. The W5500 chip has no Energy-Efficient Ethernet.Verified
Spanning treePlain end station, sends no BPDUs; works on edge / auto-edge ports (≈ 3 s forwarding delay on the M4250).Verified
Long-lived controller connectionsCrestron / Q-SYS-style persistent connections kept; a new client always gets in. TCP keep-alive available, off by default.Verified
Syslog (RFC 5424)Optional: every logged event to a server set on the web page or by DHCP.Verified
DHCP snooping, dynamic ARP inspectionStandard renewals and probes should pass; not tested in such an environment.Not yet verified
Other switch brands (e.g. Cisco), multi-day operation, real loadsNot tested yet; planned in the pilot.Not yet verified
802.1X, VLAN tagging, IPv6, SNMP, NTPNot available. Use MAC-based port authorisation and an untagged access port in the AV VLAN.Not supported
Authentication and encryptionNone on the control port or web page (same as v2.2). Keep EPS units on a dedicated AV VLAN or restrict access with ACLs.Not supported

What we can say, and what we can't yet

We can say

  • v3.3 recovers by itself, in seconds, from every v2.2 failure we could provoke on it: DHCP outage, lost chip settings, stuck connections, all 17 single-register chip faults, a PHY held in reset and a link that stays down.
  • v3.3 behaves like a standard network device on the points that matter on a shared network: DHCP, address conflicts, unique MAC, no stuck connections, at most one ARP request a second. Its remaining standards gaps are listed above.
  • If a v3.3 unit ever drops off, its log will show why: link, chip, DHCP, address conflict, restart, and the supply voltage around each chip fault.

We can't say yet

  • That v3.3 ends the field dropouts: it recovers from the faults that match the symptom, but the trigger for static-mode units is still a hypothesis (supply sag) that needs a hands-on test.
  • How it handles a real deaf receiver: the new check is tested by emulation; the deaf state itself has only been seen on one board.
  • Why the network chip sometimes comes back deaf after a link negotiation (twice tonight, 38 s and about 3.5 min, both clearing by themselves), and whether it can last longer in the field.
  • How it behaves with real loads switching, over days, and on other switch brands.
  • Results rest on three boards and three days of testing; the same team wrote the firmware and the tests (mitigated by pre-registered criteria and crossover runs).

Recommended rollout

  1. Hands-on checks on the real box: inputs, factory reset and LED colours by hand; real power cycles with the USB cable unplugged.
  2. Supply-sag test (hands-on): the box on a lab supply, the 5 V rail sagged to 2.8–4.5 V and slow power-ups, v2.2 vs v3.3. Decides the leading hypothesis.
  3. Real loads: v3.3 on our showroom unit, loads switched while the log runs. Any chip re-init (with its supply voltage) in the log is a finding.
  4. Hardware, next board revision: brown-out level 4.3 V (fuse), a reset supervisor instead of the 22 µF capacitor, and the network chip's reset pin on a free GPIO.
  5. Pilot: v3.3 with per-unit MACs on units at sites that had dropouts. With no failure in N unit-days, the 95 % upper bound on the failure rate is about 3/N (≈ 300 unit-days to show fewer than one failure per 100 unit-days).
  6. Site settings: static addresses outside DHCP ranges, or DHCP reservations; EPS on an untagged access port in the AV VLAN.
  7. On any dropout, before power-cycling: note the LED colour, check whether the unit's MAC is still in the switch's MAC table, then read NET_LOG after it is back.
  8. Fallback: v2.2 can be re-flashed.

More detail