BDShot/AM32 telemetry fails on battery-only boot when FC is powered from ESC/BEC, but works if FC boots before ESC rail

Author: tasdepCreated Jun 19, 2026Updated Sep 17, 2026
Labelskind:bugscope:drivers

Description

I am seeing a repeatable startup-order issue with PX4 bidirectional DShot on a Holybro Kakute H7 using an AM32 4-in-1 ESC.

When the flight controller and ESC are powered together from the main battery, BDShot telemetry does not start. The ESCs/motors can be powered, but PX4 receives no valid BDShot telemetry from any motor.

If the FC is powered first over USB, and then the ESC battery is connected about 10 seconds later, BDShot telemetry starts correctly on all 4 motors and RPM feedback works.

Hardware

  • Flight controller: Holybro Kakute H7
  • ESC: MicoAir AM32 4-in-1 ESC
  • Motor outputs: MAIN1-4
  • No separate ESC telemetry wire used
  • FC is powered by ESC/BEC when USB is not connected

PX4 / BDShot Version

Firmware is based on the PX4 v1.18 prerelease BDShot implementation that supports per-timer BDShot selection and multiple timer groups via sequential burst/capture.

The branch under test is a local/custom branch derived from PX4 v1.18.0-alpha1.

On-board version reported:

  • PX4 git hash: 3e89291f9da0be13d73cebc1564f43262a84faf6
  • Branch under test: tas/kakuteh7-bdshot-nosd-bench
  • git describe --tags --always HEAD: v1.18.0-alpha1-195-g3e89291f9d
  • PX4 version reported by ver all: 1.18.0 40
  • Board: HOLYBRO_KAKUTEH7

Local branch changes relevant to this test:

  • Disabled the old Kakute H7 serial DShot telemetry startup line: dshot telemetry -d /dev/ttyS5
  • Allowed bench arming without an SD card
  • DSHOT_TEL_CFG=0
  • Serial Telemetry: Disabled confirmed in dshot status
  • DSHOT_ESC_TYPE=1 for AM32
  • DSHOT_BIDIR_EDT=0
  • PWM_MAIN_TIM0..3=-7 for BDShot300 on all four motor timer groups

Expected Behavior

BDShot telemetry should start reliably after a normal battery-only boot where the FC and ESC are powered together from the flight battery.

dshot status should show all four channels Online, and esc_status.esc_online_flags should be 15.

Actual Behavior

Case 1: Battery-only boot, no USB

Steps:

  1. Unplug everything.
  2. Plug in flight battery.
  3. FC powers from ESC/BEC.
  4. Connect over companion/Pi MAVLink route.
  5. Check dshot status.

Result:

  • All four BDShot channels Offline
  • esc_online_flags: 0
  • No RPM feedback
  • Diagnostic instrumentation showed empty captures:
    • raw 0x000000
    • shifted 0
    • intervals 0
    • read_ok 0

Example:

BDShot Telemetry: Enabled
Serial Telemetry: Disabled
ESC Type: AM32 (1)

Ch0: read_ok 0, fail_crc ..., raw 0x000000, shifted 0, intervals 0, min 0
Ch1: read_ok 0, fail_crc ..., raw 0x000000, shifted 0, intervals 0, min 0
Ch2: read_ok 0, fail_crc ..., raw 0x000000, shifted 0, intervals 0, min 0
Ch3: read_ok 0, fail_crc ..., raw 0x000000, shifted 0, intervals 0, min 0

Case 2: USB/FC first, ESC battery later

Steps:

  1. Plug USB into FC first.
  2. Wait for PX4 to boot.
  3. Plug ESC battery about 10 seconds later.
  4. Check dshot status.

Result:

  • All four BDShot channels Online
  • esc_online_flags: 15
  • RPM feedback works while armed/spinning

Example observed while spinning:

esc_online_flags: 15 (0b1111)
esc_armed_flags: 15 (0b1111)

esc_rpm:
  2428
  2400
  2414
  2414

dshot status also showed all four channels Online with read_ok increasing on all channels.

There is a possibly related ArduPilot issue for AM32 BDShot startup reliability: