Looking for guidance from the community before pursuing RMA. I have two Holybro PM08-CAN modules in a dual-redundant configuration that are visible on the DroneCAN bus as OPERATIONAL but are not broadcasting any `uavcan.equipment.power.BatteryInfo` messages — only `uavcan.protocol.NodeStatus` heartbeats. The flight controller therefore reports zero voltage with a “Bad Battery” prearm error.
- **Flight controller:** CubeOrange Plus on Airbot Mini Carrier Board v1.3
- **ArduCopter version:** 4.6.3 (92b0cd78)
- **Power modules:** 2× Holybro PM08-CAN, hardware version 21.25
-
Left PM08-CAN → carrier POWER1 (6-pin Molex CLIK-Mate, 4 wires used: 2×VCC + 2×GND on pins 1, 2, 5, 6)
-
Right PM08-CAN → carrier POWER2 (same 4-wire config)
-
Both PM08 4-pin CAN cables → Holybro DroneCAN Hub (CAN_H, CAN_L, GND only; VCC pin removed because hub is fed 12V from APD PDB500)
- **Other DroneCAN nodes on bus:** 2× Holybro H-RTK F9P GPS (G4-based)
- **Main pack:** 6S, confirmed flowing through PM08 XT90 in/out path (multimeter verified at PM08 input terminals)
- **CAN bus baudrate:** 1 Mbps standard
## Firmware tested
**Original (working at firmware level, not broadcasting):**
- Holybro stock firmware: SW version `1.9.A2FA7A3A`, identifier `org.ardupilot.f405_HolybroPMU`
**Current (after attempting fix):**
- ArduPilot AP_Periph latest stable from `firmware.ardupilot.org/AP_Periph/stable/HolybroF4_PMU/AP_Periph.apj`
- Flashed via DroneCAN GUI Tool’s Update Firmware function
- Both PM08s came back OPERATIONAL on the bus after flash
- Software version visible in node info changed (flash confirmed successful)
**Result on both firmware versions:** zero BatteryInfo messages broadcast, only NodeStatus heartbeats at ~1 Hz.
-–
## What I’ve verified
**On the bus (via DroneCAN GUI Tool Bus Monitor and Mission Planner UAVCAN Inspector):**
- Both PM08s appear as nodes 120 and 122, Mode: OPERATIONAL, Health: OK, uptime increments normally
- Both publish `uavcan.protocol.NodeStatus` only (~7 Bps each)
- No `uavcan.equipment.power.BatteryInfo` messages at any rate from either node
- GPS nodes 124 and 125 broadcasting normally (~143–263 Bps each, MovingBaselineData, MagneticFieldStrength, Fix2)
- ArduPilot node 10 broadcasting normally (NotifyState, SafetyState, ArmingStatus)
**PM08 internal parameters (verified identical on both nodes via DroneCAN GUI Tool Fetch All):**
- `BATT_MONITOR = 8`
- `BATT_HIDE_MASK = 0`
- `BATT_CAPACITY = 10000`
- `BATT_SERIAL_NUM = 120` (and 122 on the other)
- `BRD_SERIAL_NUM = 120` (and 122)
- `CAN_NODE = 120` (and 122)
- `CAN_BAUDRATE = 1000000`
- `OPTIONS = 0 (tested with 1, no difference)
- `TEMP_MSG_RATE = 1` (tested 0 and 1, no difference)
**FC-side parameters:**
- `BATT_MONITOR = 8`
- `BATT2_MONITOR = 8`
- `BATT_SERIAL_NUM = 120`, `BATT2_SERIAL_NUM = 122` (also tested with -1 auto-assign)
- `CAN_P1_DRIVER = 1`
- `CAN_D1_PROTOCOL = 1`
- `BRD_BOOT_DELAY = 3000`
- Full FC parameter reset to defaults and reconfigured from scratch — no change
**Hardware:**
- Main pack voltage confirmed at PM08 XT90 input terminals on both modules (multimeter under load)
- 5V rail from PM08 to carrier POWER1/POWER2 confirmed (carrier boots normally on PM08 power)
- Both PM08s receive 5V from the FC carrier via the 6-pin cable
- No reverse polarity, no overvoltage events on this build
-–
## Key observation — features.txt analysis
Reviewing `firmware.ardupilot.org/AP_Periph/latest/HolybroF4_PMU/features.txt`, the following battery-related features are explicitly disabled in the current AP_Periph stable build:
- `!AP_BATTERY_ANALOG` (analog voltage divider sense)
- `!AP_BATTERY_INA2XX_ENABLED`
- `!AP_BATTERY_INA3221_ENABLED`
- `!AP_BATTERY_FUELLEVEL_ANALOG_ENABLED`
- `!AP_BATTERY_SUM_ENABLED`
- `!AP_BATTERY_FUELFLOW_ENABLED`
Only `AP_BATTERY_SMBUS_ENABLED` remains active.
Holybro support clarified that INA2XX and INA3221 are intentionally disabled because the PM08-CAN hardware doesn’t include those chips — which makes sense. However, this leaves an open question: **what driver actually reads voltage and current on the PM08-CAN, and is that driver compiled into the current AP_Periph build for HolybroF4_PMU?**
If the PM08-CAN reads voltage via the F405’s onboard ADC through an internal voltage divider, that would map to `AP_BATTERY_ANALOG` — which is disabled. If it uses a custom code path within the Holybro PMU firmware that doesn’t depend on the standard AP_Battery library backends, then the features.txt disable flags may be irrelevant and the issue lies elsewhere.
-–
## What I’m asking
1. **Has anyone successfully gotten the current AP_Periph stable build (HolybroF4_PMU target) to broadcast BatteryInfo on a PM08-CAN?** If yes, what configuration step did I miss?
2. **Does the PM08-CAN broadcast voltage via the standard AP_Battery library, or via custom Holybro firmware code that’s separate from the disabled drivers in features.txt?**
3. **Is there a known-good firmware build (— either an older AP_Periph version or a Holybro-maintained fork) that has full BatteryInfo broadcast support for the PM08-CAN?** If so, where can I obtain it?
4. **Is there a calibration step or DroneCAN service call required after firmware flash to enable voltage reporting?** I haven’t found this documented anywhere.
Happy to provide additional logs, parameter dumps, Bus Monitor captures, or screenshots if helpful. Both modules behave identically, which suggests this is firmware/configuration rather than hardware fault.
Thanks in advance for any insight.