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);
}
}