Repository navigation
Conversation
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
marked this pull request as draft
October 19, 2026 20:14
celarco
marked this pull request as ready for review
October 19, 2026 20:15
Global Size Summary (Total Flash delta in bytes)Built from a0b0e5d rebased onto dc78bc5
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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)
Tested on CerePilot V1.00 hardware, running Copter:
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 aregister map and differ by chip ID.
AP_Baro: soft reset the BMP581 on init. The probe checksINT_STATUS.por, whichthe 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 acceptsthe device only on a good status field.
AP_InertialSensor: driver for the ST ISM330DLC, this board's second IMU. Note thatthe FIFO output register does not support burst reads: a multi-byte read from
FIFO_DATA_OUT_Lwalks the address into the reserved registers above0x3Fratherthan 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 willrebuild 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.