Hi,
We are integrating the MAX32664C sensor hub on a custom board (host MCU: nRF5340, I2C @400 kHz) with the following sensor set: MAX32664C (GWEC) + MAXM86161 + Kionix KX122, running hub firmware MAX32664C_MAXM86161_WHRM_AEC_SCD_WSPO2_C_32.9.23.msbl. Our host sequence follows AN6924 and the Example2_mbed sample host code (MFIO released during CMD_DELAY, re-asserted only for the response read).
What already works — hub enters application mode (0x02 00 → 0x00), version reads back 32.9.23; AFE WHOAMI via AA 41 00 FF returns 0x36 and accel WHO_AM_I via AA 41 04 0F returns 0x1B (KX122); all configuration writes are accepted with status 0x00, including SpO2 coefficients (50 07 00), 10 00 03, 10 01 01, 10 02 01, 50 07 0A/0B/0C/12, and the MAXM86161 mappings from your sample code (50 07 19 = 23 00 00, 50 07 17 = 00 73, 50 07 18 = 00 10).
Our questions:
- Correct firmware for this combination — For MAX32664C + MAXM86161 + KX122, is 32.9.23 the correct (and latest) .msbl? The release notes show 32.9.28/.29 dropped KX122 in favor of the LIS2DS12. Is there any newer or patched build for the KX122 configuration, or any known errata for 32.9.23 with the KX122?
- LDO_EN (hub P0.5) power-up sequencing — On 32.9.23, P0.5/LDO_EN idles LOW after application-mode boot, so the MAXM86161 WHOAMI reads 0xFF until we send AA 10 12 01. Currently we enable LDO_EN only right before the sensor-status check in our driver (see log below, t=1.97 s). Is there a required power-up timing/sequence for LDO_EN (minimum delay after enabling before AFE access, or a required order relative to the algorithm enable)? Does the algorithm enable (52 07 xx) manage LDO_EN by itself, and is a host-pre-enabled LDO acceptable?
- Algorithm enable always fails with status 0xFF — With all sensors responding to WHOAMI, AA 52 07 01 (and 52 07 02) always returns 0xFF, for both AEC (0B=01, 12=01, 0C=01) and AGC (0B=01, 12=00, 0C=00, 11=00 64) configurations, with default and sample-code register mappings, with a 465–500 ms CMD_DELAY and MFIO released during the delay. Reading the hub status byte (AA 00 00) right after the failure returns 0x00 — no sensor-communication error (see log below, t=4.57 s). What exactly does 0xFF mean for this command, and which internal steps does the enable perform (accelerometer init, AFE power-up, first-sample/interrupt wait?) that could fail silently? Is there any additional configuration we should reference?
- Raw data mode enables but never produces samples — In raw mode (10 00 01 → 44 04 01 00 → 44 00 01 → 40 00 12 18 → LED currents 40 00 23/24/25), every command is accepted, yet the hub status byte stays 0x00 forever (DataRdyInt never sets) and the output FIFO stays empty. Reading the AFE registers through the hub shows INT_STATUS1 = 0x00, FIFO write pointer = 0x00, FIFO data count = 0x00, SYSCTRL = 0x00 (not in shutdown) — the AFE looks awake but never converting. Does the hub's raw-mode "enable AFE" program the MAXM86161 LED sequence registers (0x20–0x22), or is the host expected to write them?
- INTB requirement — Is the MAXM86161 INTB → MAX32664C (P0.7 per the AN6924 architecture figure) connection mandatory for both algorithm and raw operation? If that line were missing or broken on the board, would the failure signature match what we see (52 07 → 0xFF with a clean status byte, raw mode silent)?
- Reference wiring checklist — Could you share the MAXM86161EVSYS schematic section (or a minimal-connection checklist) for MAX32664C
MAXM86161
KX122 on 32.9.23 — required interrupt lines, pull-ups, the accel's bus/CS wiring, and any strapping — so we can verify our custom board against it?
- Diagnostics — Is there any hub-side diagnostic/self-test command that reports the detailed reason an algorithm enable was refused (beyond the one-byte status)?
Appendix — boot log from our latest attempt (AEC configuration, normal algorithm report):
[00:00:00.008,209] <wrn> Laminar_PM: tcal6408a_power_on (P6 SPO2_LDO_EN=1)
[00:00:00.014,099] <wrn> maxim_max32664c: Set app mode
[00:00:00.014,282] <wrn> maxim_max32664c: reset_gpio -> Low
[00:00:00.034,576] <wrn> maxim_max32664c: mifo_gpio -> High
[00:00:00.054,840] <wrn> maxim_max32664c: reset_gpio -> High
[00:00:01.927,215] <wrn> maxim_max32664c: Application mode: 0
[00:00:01.949,554] <wrn> maxim_max32664c: Version: 32.9.23
[00:00:01.971,862] <wrn> maxim_max32664c: MAXM86161 LDO_EN (hub P0.5) enabled <- AA 10 12 01
[00:00:01.991,943] <inf> maxim_max32664c: Checking sensors...
[00:00:02.014,282] <inf> maxim_max32664c: Using MAX86161 as AFE
[00:00:02.014,282] <inf> maxim_max32664c: AFE WHOAMI OK: 0x36 <- AA 41 00 FF
[00:00:02.036,621] <inf> maxim_max32664c: Accelerometer WHOAMI OK: 0x1B (KX122) <- AA 41 04 0F
[00:00:02.058,929] <wrn> maxim_max32664c: MAXM86161 LDO_EN handed back (off) -- hub powers AFE at algo enable <- AA 10 12 00
[00:00:02.058,929] <wrn> maxim_max32664c_init: Initialize sensor hub
[00:00:02.170,471] <inf> maxim_max32664c_init: Configuring LED firing: 0x230000 <- AA 50 07 19 23 00 00
[00:00:02.192,840] <inf> maxim_max32664c_init: Configuring WHRM inputs: 0x0073 <- AA 50 07 17 00 73
[00:00:02.215,179] <inf> maxim_max32664c_init: Configuring SpO2 inputs: 0x0010 <- AA 50 07 18 00 10
[00:00:02.394,348] <wrn> maxim_max32664c_init: Initial configuration:
[00:00:03.997,894] <inf> maxim_max32664c: Entering AEC mode... <- 50 07 0A 00 / 0B 01 / 12 01
[00:00:04.041,961] <inf> maxim_max32664c: Enabling SCD... <- 50 07 0C 01
[00:00:04.576,019] <err> maxim_max32664c: Hub status 0xFF for cmd 52 07 <- AA 52 07 01, ~500 ms delay
[00:00:04.576,019] <err> maxim_max32664c: Algorithm enable (52 07 01) failed
[00:00:04.598,083] <err> maxim_max32664c: Hub status byte: 0x00 <- AA 00 00 after the failure
[00:00:04.598,114] <err> Bio_hub: op-mode set failed (err=-22) -- hub NOT sampling
Full I2C bus traces or scope captures are available on request.