mirror of
https://github.com/ArduPilot/ardupilot.git
synced 2026-10-08 02:57:16 +08:00
The ICM-56686 shares the ICM-456xy programming model, so this is a variant of that path rather than a new driver: same FIFO header bits and the same 20 byte high resolution packet, so the existing parser and accumulator are untouched. Two things differ, both from DS-000563 rev 1.0. The register block from PWR_MGMT0 upwards sits 4 higher, which reg456() maps at runtime, with WHO_AM_I and the IREG window passing through unshifted. And SREG_CTRL resets to 0x0A on this part - 20 bit sensor registers and big endian - where the ICM-45686 needs no such write at all. The endianness applies to FIFO data as well, so it has to be cleared before any sample is read or every value comes back byte swapped. FS_SEL 0 selects 4000dps and 32g on both parts, so the scaling is shared. Device ID is 0x08 against 0xE9, at the same address, so probing needs no heuristics.