BDShot/AM32 telemetry fails on battery-only boot when FC is powered from ESC/BEC, but works if FC boots before ESC rail
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=0Serial Telemetry: Disabledconfirmed indshot statusDSHOT_ESC_TYPE=1for AM32DSHOT_BIDIR_EDT=0PWM_MAIN_TIM0..3=-7for 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:
- Unplug everything.
- Plug in flight battery.
- FC powers from ESC/BEC.
- Connect over companion/Pi MAVLink route.
- Check
dshot status.
Result:
- All four BDShot channels Offline
esc_online_flags: 0- No RPM feedback
- Diagnostic instrumentation showed empty captures:
raw 0x000000shifted 0intervals 0read_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 0Case 2: USB/FC first, ESC battery later
Steps:
- Plug USB into FC first.
- Wait for PX4 to boot.
- Plug ESC battery about 10 seconds later.
- 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
2414dshot 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:
Source: PX4/PX4-Autopilot