2025-06-23 3:07 AM - edited 2025-06-23 3:30 AM
Hello,
I use the STEVAL-MKI209V1K with the IIS2ILCX sensor. I am trying to get the IIS2ILCX communicating with a second IIS2ILCX via sensor hub. The master sensor is connected to my MCU via SPI. Please find my „schematic“ and the configuration code below.
My problem is, that I cannot observe any I2C communication between the sensors. My oscilloscope just shows 3.4 V for each SCL and SDA. What could be wrong?
I would greatly appreciate any suggestions.
Additional information: i want to read the slaves data triggered by DRDY-Interrupt to get synchronized data of both sensors.
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_FUNC_CFG_ACCESS, 0x00);
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_FIFO_CTRL1, 0x7F);
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_FIFO_CTRL2, 0x00);
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_FIFO_CTRL3, 0x07);
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_FIFO_CTRL4, 0x01);
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_INT1_CTRL, 0x00);
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_CTRL1_XL, 0x70);
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_CTRL3_C, 0x44);
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_CTRL4_C, 0x04);
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_CTRL9_XL, 0x00);
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_MD1_CFG, 0x00);
// shub config
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_FUNC_CFG_ACCESS, 0x80); // Activate access to shub registers
accelerometer_write_register(accel, ACCEL_IIS2ICLX_REG_ADDR_SLV0_ADD, 0x68); // I2C address of sensor 2
accelerometer_write_register(accel, ACCEL_IIS2ICLX_REG_ADDR_SLV0_SUBADDR, ACCEL_IIS2ILCX_REG_ADDR_CTRL1_XL); // set to 2 g and 833 Hz
accelerometer_write_register(accel, ACCEL_IIS2ICLX_REG_ADDR_DATAWRITE_SLV0, 0x7C);// power-down, 2 g
accelerometer_write_register(accel, ACCEL_IIS2ICLX_REG_ADDR_SLV0_ADD, 0x68); // I2C address of sensor 2
accelerometer_write_register(accel, ACCEL_IIS2ICLX_REG_ADDR_SLV0_SUBADDR, ACCEL_IIS2ILCX_REG_ADDR_INT2_CTRL); // set to 2 g and 833 Hz
accelerometer_write_register(accel, ACCEL_IIS2ICLX_REG_ADDR_DATAWRITE_SLV0, 0x01);// power-down, 2 g
accelerometer_write_register(accel, ACCEL_IIS2ICLX_REG_ADDR_SLV0_ADD, 0x68); // I2C address of sensor 2
accelerometer_write_register(accel, ACCEL_IIS2ICLX_REG_ADDR_SLV0_SUBADDR, 0x28); // OUTX_L_A register //! could be changed to 0x2A for Y-axis
accelerometer_write_register(accel, ACCEL_IIS2ICLX_REG_ADDR_SLV0_CONFIG, 0x0A); // SHUB-ODR = 0 Hz, FIFO data batching enabled, 2 read operations
accelerometer_write_register(accel, ACCEL_IIS2ICLX_REG_ADDR_SHUB_MASTER_CONFIG, 0x24); // MASTER_ON, 1 ext sensor, START CONFIG
accelerometer_write_register(accel, ACCEL_IIS2ILCX_REG_ADDR_FUNC_CFG_ACCESS, 0x00); // deactivate shub register access
2025-06-23 5:40 AM
Do any slave addresses respond to HAL_I2C_IsDeviceReady? Note that HAL expects the 7-bit address to be left-shifted by 1 bit.
2025-06-23 5:47 AM - edited 2025-06-23 5:48 AM
The communication with the "master" sensor via SPI works fine. I am using an ESP32. Therefore I provide my write function here:
static bool accelerometer_write_register(accel_iis2ilcx_t *accel, uint8_t address, uint8_t reg_value)
{
unsigned char write_buf[2];
write_buf[0] = address & ~(1 << 7);
write_buf[1] = reg_value;
return spi_interface_write(accel->spi_device, write_buf, 2);
}
I guess that the sensor hub i2c is not directly accessible for me, right?