Hi,
I'm using the MAX11040K to sample 9 channels (all microphones) which give a signal between 0 to 3.3V DC-biased by 1.65V; that's input to all channels for all 9 mics. I need to sample these at 20kHz simultaneously but I'm having trouble with my hardware:
[datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/max11040k-max11060.pdf]
I've daisy-chaining multiple devices as per the datasheet (figure 13 of the above link) and I can set the configuration register, though I can't get any sampled data out of the chain. Specifically, DRDYOUT never goes low, it's always high:

I'm unsure if I've interpreted the daisy-chain circuit correctly - I would've thought sharing a CS would case SPI bus contention with chips fighting to respond. However, when I set the config register I'm able to read back the correct setting. I'm sending this:
/* Configure (configuration register)
/ command: write to configuration register => 0110 0000 = 0x60
// payload:
Bit Name Description Value Why
7 SHDN Shutdown 0 Normal operation
6 RST Reset 0 Not resetting now
5 EN24BIT 24-bit mode enable 1 Yes, use 24-bit
4 XTALEN Enable external crystal 0 External clock
3 FAULTDIS Disable FAULT pin 1 FAULT disabled
2 PDBUF Buffer active 1 Use buffer
1 Reserved Reserved (must be 0) 0 Always 0
0 Reserved Reserved (must be 0) 0 Always 0
*/
// Write to Configuration Register (0x60) → 0x2C = example config
// Correct order: first bytes go to Chip 1
uint8_t cfg_write[4] = {
0x60, 0x2C, 0x2C, 0x2C,
};
// Step 1: Write config
HAL_GPIO_WritePin(CS_MAX_GPIO_Port, CS_MAX_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi2, cfg_write, 4, HAL_MAX_DELAY);
HAL_GPIO_WritePin(CS_MAX_GPIO_Port, CS_MAX_Pin, GPIO_PIN_SET);
// Step 2. I'm reading back 0x2C from all three chips
// step 3. Reading data
Yet I'm not getting any sampled data, DRDYOUT remains high always.
Is this a hardware fault or a software issue?
I'm using the MAX11040K to sample 9 channels (all microphones) which give a signal between 0 to 3.3V DC-biased by 1.65V; that's input to all channels for all 9 mics. I need to sample these at 20kHz simultaneously but I'm having trouble with my hardware:
[datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/max11040k-max11060.pdf]
I've daisy-chaining multiple devices as per the datasheet (figure 13 of the above link) and I can set the configuration register, though I can't get any sampled data out of the chain. Specifically, DRDYOUT never goes low, it's always high:

I'm unsure if I've interpreted the daisy-chain circuit correctly - I would've thought sharing a CS would case SPI bus contention with chips fighting to respond. However, when I set the config register I'm able to read back the correct setting. I'm sending this:
/* Configure (configuration register)
/ command: write to configuration register => 0110 0000 = 0x60
// payload:
Bit Name Description Value Why
7 SHDN Shutdown 0 Normal operation
6 RST Reset 0 Not resetting now
5 EN24BIT 24-bit mode enable 1 Yes, use 24-bit
4 XTALEN Enable external crystal 0 External clock
3 FAULTDIS Disable FAULT pin 1 FAULT disabled
2 PDBUF Buffer active 1 Use buffer
1 Reserved Reserved (must be 0) 0 Always 0
0 Reserved Reserved (must be 0) 0 Always 0
*/
// Write to Configuration Register (0x60) → 0x2C = example config
// Correct order: first bytes go to Chip 1
uint8_t cfg_write[4] = {
0x60, 0x2C, 0x2C, 0x2C,
};
// Step 1: Write config
HAL_GPIO_WritePin(CS_MAX_GPIO_Port, CS_MAX_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi2, cfg_write, 4, HAL_MAX_DELAY);
HAL_GPIO_WritePin(CS_MAX_GPIO_Port, CS_MAX_Pin, GPIO_PIN_SET);
// Step 2. I'm reading back 0x2C from all three chips
// step 3. Reading data
Yet I'm not getting any sampled data, DRDYOUT remains high always.
Is this a hardware fault or a software issue?

