Skip to content

CerePilot v1.00 new board support - #34816

Open
celarco wants to merge 7 commits into
ArduPilot:masterfrom
Cerepi:cerepilot-v100
Open

celarco wants to merge 7 commits into
ArduPilot:masterfrom
Cerepi:cerepilot-v100

Conversation

@celarco

@celarco celarco commented Oct 19, 2026

Copy link
Copy Markdown

Summary

Add support for the Cerepi CerePilot V1.00, an STM32H743VI flight controller with an
integrated NVIDIA Jetson Orin Nano carrier on a single 80 x 65 mm board.

Classification & Testing (check all that apply and add your own)

  • Checked by a human programmer
  • Non-functional change
  • No-binary change
  • Infrastructure change (e.g. unit tests, helper scripts)
  • Automated test(s) verify changes (e.g. unit test, autotest)
  • Tested manually, description below (e.g. SITL)
  • Tested on hardware
  • Logs attached
  • Logs available on request

Tested on CerePilot V1.00 hardware, running Copter:

  • BMI088 and ISM330DLC IMUs: both detected and delivering data, EKF3 running on both
  • BMM350 compass: detected, heading tracks rotation
  • BMP585 barometer: detected, altitude tracks
  • SM9541 differential pressure sensor: detected, reports pressure and temperature
  • u-blox MAX-M10N GNSS: 3D fix acquired
  • FM25V02A FRAM: parameter storage read/write
  • microSD logging via SDMMC1
  • 9 PWM outputs verified on a scope

Not exercised on this unit: CAN peripherals, DShot, RC input with a live receiver,
and the I2C power module. These use standard ArduPilot paths and carry no
board-specific code beyond pin assignment.

Description

New board definition plus three supporting library changes, one per commit.

Board: STM32H743VIT6 (LQFP100), 6 UARTs, 9 PWM outputs, 2 CAN with transceivers and
termination fitted, SDMMC logging, FRAM parameter storage, on-board u-blox MAX-M10N.
Board ID AP_HW_CEREPILOT_V100 = 5750.

Library changes:

  • AP_Baro: support the BMP585 in the existing BMP581 driver. The two share a
    register map and differ by chip ID.
  • AP_Baro: soft reset the BMP581 on init. The probe checks INT_STATUS.por, which
    the datasheet clears on the first read of the register, so a board that keeps the
    barometer powered across an MCU reboot fails detection on every boot after the
    first and only recovers on a physical power cycle. Found during Cerepi bring-up.
    Ten other boards use this driver (Pixhawk6X, CUAV-V6X-v2, CUAV-X25-MEGA/EVO,
    CUAV-7-Nano, CORVON743V2, CyberX-v10, SULILGH7-P1-P2, ZeroOneX6, ZeroOneX6_Air),
    so this one deserves a careful look; I have only been able to test it on CerePilot.
  • AP_Airspeed: driver for the TE SM9541 differential pressure sensor, ARSPD_TYPE 21.
    The part has no chip ID register, so init() reads a measurement packet and accepts
    the device only on a good status field.
  • AP_InertialSensor: driver for the ST ISM330DLC, this board's second IMU. Note that
    the FIFO output register does not support burst reads: a multi-byte read from
    FIFO_DATA_OUT_L walks the address into the reserved registers above 0x3F rather
    than popping successive words, so the driver reads one 16-bit word per transfer.

there is also a public hardware documentation repo here:
https://github.com/Cerepi/Cerepilot_Hardware

I am claiming board IDs 5750-5759 for Cerepi. The first choice, 5740, collided with
AP_HW_ZenFC_H743. Please confirm 5750 is free to use; if it has to change I will
rebuild the bootloader binaries.

This contribution was AI-assisted (Claude Code). The AI wrote the hwdef, the two new
sensor drivers and the documentation. All hardware bring-up, sensor verification and
debugging was done by me on real hardware, and I have reviewed and understand every
line submitted.

The BMP585 is register-compatible with the BMP581 and differs only in its
chip id, so accept 0x51 as well and report it under its own device type.
init() probes INT_STATUS.por to confirm the sensor came out of a power-up
reset, but that flag is cleared by the first read of the register. A board
that keeps the baro powered across an MCU reboot therefore fails to detect
it on every boot after the first, and only recovers on a power cycle. Soft
reset the chip before the check so por is re-armed.
The SM9541 is a factory-calibrated, temperature-compensated differential
pressure sensor with a fixed I2C address of 0x28. It has no configuration
registers and no chip id, so a read returns the latest measurement packet
directly and detection relies on the packet's status bits.

Adds ARSPD_TYPE 21 for the -100 to +100 cmH2O part.
The ISM330DLC shares the LSM6DSL register layout, so its control registers
and scale factors match the existing ASM330 driver, but its FIFO does not:
this part has the older decimation-based FIFO at 0x06-0x0A with data at
0x3E, rather than a tagged FIFO. With gyro and accelerometer batched
undecimated and nothing else enabled, the FIFO holds a fixed repeating
pattern of six 16-bit words, which is how this driver decodes it.

FIFO_DATA_OUT_L/H is read one 16-bit word per transfer: a longer read
walks the address past 0x3F into the reserved registers rather than
popping the next word.

Runs both sensors at 1.66 kHz, +/-2000 dps and +/-16 g.
STM32H743VI flight controller and NVIDIA Jetson Orin Nano carrier board
from Cerepi. BMI088 and ISM330DLC IMUs, BMM350 compass, BMP585 barometer,
SM9541 differential pressure sensor, FRAM, microSD, nine PWM outputs and
two CAN interfaces. See the README for the full peripheral map.
@celarco
celarco marked this pull request as draft October 19, 2026 20:14
@celarco
celarco marked this pull request as ready for review October 19, 2026 20:15
@github-actions

Copy link
Copy Markdown

Global Size Summary (Total Flash delta in bytes)

Built from a0b0e5d rebased onto dc78bc5

Board Periph tracker blimp bootloader copter heli iofw plane rover sub
DrotekP3Pro _ _ _ * _ _ _ _ _ _
Durandal _ +36 +36 _ +776 +776 _ +776 +792 +792
Hitec-Airspeed * _ _ _ _ _ _ _ _ _
KakuteF7 _ * * _ * * _ * * *
MambaH743v4 _ +44 +44 _ +884 +884 _ +884 +884 +884
MatekF405-CAN _ _ _ * _ _ _ _ _ _
MatekF405 _ * * _ * * _ * * *
MatekH743-bdshot _ +36 +36 _ +776 +776 _ +776 +792 +792
Pixhawk1-1M _ * * _ * * _ * * *
disco _ +48 +48 _ +1256 +1256 _ +1244 +1252 +1262
f103-GPS * _ _ _ _ _ _ _ _ _

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant