BMI270 initialization failed

Using STM32F103 to communicate with BMI270 via IIC, I can read the chip ID, but I have not been able to load the configuration files, can you help me to see the problem?

Serial debugging information and source code

 

int write_register_block(struct bmi270 *sensor, uint8_t reg_addr, uint8_t len, const uint8_t *data)
{
if (HAL_I2C_Mem_Write(&hi2c1,BMI270_I2C_ADDR,reg_addr,I2C_MEMADD_SIZE_8BIT,(uint8_t *)&data,4, 1000) != 0)
{
printf("0x%X --> Failed to write to I2C device\r\n", sensor->i2c_addr);
return -1;
}

return 0;
}
void load_config_file(struct bmi270 *sensor)
{
printf("0x%x --> Initializing...\r\n", BMI270_I2C_ADDR);
write_register(sensor, PWR_CONF, 0x02); 
HAL_Delay(5);
write_register(sensor, INIT_CTRL, 0x00); 

sensor->internal_status = read_register(sensor, INTERNAL_STATUS);

if((sensor->internal_status & 0x01) == 0)
{
for (int i = 0; i < 256; i++)
{

write_register(sensor, INIT_ADDR_0, 0x00);
write_register(sensor, INIT_ADDR_0, i);
write_register_block(sensor, INIT_DATA, 32, &bmi270_config_file_data[i * 32]);
}

write_register(sensor, INIT_CTRL, 0x01);
IWDG_Refresh();
HAL_Delay(20);
}

sensor->internal_status = read_register(sensor, INTERNAL_STATUS);

printf("INTERNAL_STATUS:%d\r\n", sensor->internal_status);
if (sensor->internal_status & 0x01)
{
printf("0x%x --> Already initialized!\r\n", BMI270_I2C_ADDR);
}
  else if (sensor->internal_status & 0x02)
  {
    printf("0x%x --> IMPORTANT: Sensor needs power cycle!\r\n", BMI270_I2C_ADDR);
  }
}

3 replies