Skip to content

RS-232 bridge diagnostics, 22 October 2026

Follow-up: the RAK RAM repair and hardware checks close the Full/Reduced build failure below at adb11e7b4. Physical RS232 cable and line-driver testing remain outside that follow-up's scope.

Status: host tests and ESP32 Full build PASS. The RAK4631 Reduced sensor/LoRa OTA build passes, but its Full sensor build fails the RAM gate. The same Full failure occurs on the previous source, before these diagnostics. The required nRF52 Full/Reduced pair remains incomplete and is not a qualified release. No radio was flashed or contacted in this work.

The feature implementation is 281f1a519, with additional host UART platform adapters in df08877c1. The ESP32 build used the implementation source with those test-only adapters already present locally. The nRF52 build used committed df08877c1.

Behavior

The existing get rs232.status heartbeat/automatic-standby report remains. get rs232.transport adds UART state, baud, RX/TX pins, packet source, partial/pending frame state and historical errors. Separate RX, TX, drop and test counter pages distinguish framing/checksum failures, pool pressure, blocked/short writes, filters and duplicates. Statistics occupy 120 bytes inside the bridge object, with no new persistent preferences.

rs232 test [8 hex digits] queues a reserved, one-way UART control frame. The receiver consumes it without allocating a mesh packet, updating duplicate tracking, establishing heartbeat liveness, replying or forwarding onto LoRa. Confirm receipt using the other updated board's increased probe rx count and matching rxid; local UART write completion does not prove delivery.

Fault testing found that cancelling a partially emitted control frame could confuse an older receiver's following frame. The implementation cancels an entirely unsent probe at its deadline, but retains and drains an already-started frame's original suffix. It never retransmits the prefix or interleaves another frame. A timeout records one failure; a later local completion can also count as sent. Each loop's diagnostic work remains bounded.

Both usb.logging on and usb.debug on enable bounded RS232: summaries in ordinary bridge images, at most once per second when diagnostic state changes. CLI pages and test probes require neither logging gate. See the setup and diagnostic guide for exact commands.

Embedded build checks

Canonical builds used version v1.18.0.1-halo-keymind-cascade-dev, Cascade runtime defaults and the USA Cascade preset. These were compile/package checks, with no physical UART, LoRa, USB capture or OTA operation.

Target/profile Available internal bytes Required heap bytes Result
Heltec_v3_repeater, selected Full MQTT/UART/ESP-NOW image 209,472 203,920 PASS
RAK_4631_repeater, Full sensors + LoRa OTA 82,324 85,152 FAIL
RAK_4631_repeater, Reduced sensors + LoRa OTA 85,336 85,152 PASS
Previous e7b863494, same RAK Full recipe 82,324 85,152 FAIL

The ESP32 Full image passes its application/merged package and linked capability checks with no feature reductions. Its largest internal region is 176,704 bytes against a 21,184-byte contiguous requirement. These are linked capacity estimates, not running free-heap or maximum-load measurements.

The RAK Full shortfall is exactly 2,828 bytes on both sources. No memory guard or reserve was lowered. The new nRF52 bridge allocation is 2,656 bytes, within the unchanged 2,816-byte source assertion. Reduced is a separate supported profile; its pass does not qualify Full or replace the failed required pair.

Host validation

  • Eight diagnostic methods passed across five sanitizer builds: ESP32 ordinary and native USB, nRF52, RP2040 and STM32. Cases include invalid control frames, both legacy parsers, pool exhaustion, liveness isolation, every partial probe prefix, timeout recovery, saturation, reset and bounded runtime logging.
  • Three CLI methods passed across seven sanitizer configurations, including local-only actions, strict grammar, reply bounds, transport combinations and unsupported roles. Existing ESP-NOW CLI checks also passed.
  • Bridge-only native USB formatter checks passed on nRF52 and ESP32 with compile-time debug flags off. Existing heartbeat, UART lifecycle, independent MQTT/UART runtime, power settings/ownership, filter wiring, bridge recovery, ingress and ESP-NOW diagnostic regressions passed.
  • Allocation-budget boundary checks, hosted links and strict documentation rendering passed.

Physical cable/line-driver behavior, actual peer probe receipt, UART sleep rendezvous, USB debug capture and end-to-end LoRa delivery remain untested for this change.