04-02-2024 06:44 PM
Hi,
I'm building my own board with a BMI323. I tripple checked the connections, everything seams fine. I've tried resoldering 3 different BMI323 all with the same result. I'm using the latest offical bmi3 github drivers and all the three BMI323 answeres the correct chip ID but fails when soft-resetting and trying to start the feature engine.
BMI323 CAD:ed like this:
I've taken some I2C logs where I ignore the BMI3_E_FEATURE_ENGINE_STATUS error so I can also configure and read the acc+gyro both with a 0x8000 response on all axis:
write to 0x68 ack data: 0x7E
write to 0x68 ack data: 0xAF 0xDE
write to 0x68 ack data: 0x12
write to 0x68 ack data: 0x2C 0x01
write to 0x68 ack data: 0x14
write to 0x68 ack data: 0x01 0x00
write to 0x68 ack data: 0x40
write to 0x68 ack data: 0x01 0x00
write to 0x68 ack data: 0x11
read to 0x68 ack data: 0x00 0x00 0x00 0x00
write to 0x68 ack data: 0x11
read to 0x68 ack data: 0x00 0x00 0x00 0x00
write to 0x68 ack data: 0x11
read to 0x68 ack data: 0x00 0x00 0x00 0x00
write to 0x68 ack data: 0x11
read to 0x68 ack data: 0x00 0x00 0x00 0x00
write to 0x68 ack data: 0x11
read to 0x68 ack data: 0x00 0x00 0x00 0x00
write to 0x68 ack data: 0x11
read to 0x68 ack data: 0x00 0x00 0x00 0x00
write to 0x68 ack data: 0x11
read to 0x68 ack data: 0x00 0x00 0x00 0x00
write to 0x68 ack data: 0x11
read to 0x68 ack data: 0x00 0x00 0x00 0x00
write to 0x68 ack data: 0x11
read to 0x68 ack data: 0x00 0x00 0x00 0x00
write to 0x68 ack data: 0x11
read to 0x68 ack data: 0x00 0x00 0x00 0x00
write to 0x68 ack data: 0x00
read to 0x68 ack data: 0x00 0x00 0x43 0x11
write to 0x68 ack data: 0x41
write to 0x68 ack data: 0x05 0x00
write to 0x68 ack data: 0x42
write to 0x68 ack data: 0x08 0x10 0x05 0x00 0xFA 0xA0
write to 0x68 ack data: 0x41
write to 0x68 ack data: 0x08 0x00
write to 0x68 ack data: 0x42
write to 0x68 ack data: 0x1E 0x10 0x03 0x00 0xFA 0xA0
write to 0x68 ack data: 0x41
write to 0x68 ack data: 0x1E 0x00
write to 0x68 ack data: 0x42
write to 0x68 ack data: 0xB6 0x00 0xFA 0x64 0x64 0x68
write to 0x68 ack data: 0x41
write to 0x68 ack data: 0x10 0x00
write to 0x68 ack data: 0x42
write to 0x68 ack data: 0x00 0x00 0x33 0x01 0xEC 0xF1 0x50 0x00 0x9A 0xD9 0x7E 0xF6 0x66 0xE6 0x14 0x20 0x0F 0x0E 0xC3 0xF3 0x96 0xA0 0x57 0x0D
write to 0x68 ack data: 0x41
write to 0x68 ack data: 0x0D 0x00
write to 0x68 ack data: 0x42
write to 0x68 ack data: 0xFA 0x00 0x96 0x20 0x53 0x46
write to 0x68 ack data: 0x41
write to 0x68 ack data: 0x1C 0x00
write to 0x68 ack data: 0x42
write to 0x68 ack data: 0xD8 0x54 0x32 0x20
write to 0x68 ack data: 0x21
read to 0x68 ack data: 0x00 0x00 0x48 0x00
write to 0x68 ack data: 0x3A
read to 0x68 ack data: 0x00 0x00 0x00 0x00 0x00 0x00
write to 0x68 ack data: 0x3A
write to 0x68 ack data: 0x00 0x00 0x00 0x01
write to 0x68 ack data: 0x21
write to 0x68 ack data: 0x48 0x40
write to 0x68 ack data: 0x03
read to 0x68 ack data: 0x00 0x00 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x14 0x07 0x00 0x00 0x00 0x00
I2C communication looks fine:
What am I doing wrong?
04-07-2024 08:55 PM
No one has any idea?
04-08-2024 02:39 PM
I got a BMI323 shuttle board 3.0 and hocked this up to the nRF52832 Dev kit and I get exactly the same response so I'm thinking there is somthing with the driver integration.
Since the BMI323 answere with the correct CHIP_ID Im thinking it is the delay function that might not be working correctly? I'm using the nRF SDK function:
static void bmi3_delay_us(uint32_t period, void *intf_ptr)
{
nrf_delay_us(period);
}
04-09-2024 08:42 AM
Some further updates. I got some LSM6DS3 which are pin compatible and those work fine. This further suggest there is some driver problem or the integration of it. The LSM6DS3 uses the same underlying I2C driver so most likely the problem lies higher up.
04-11-2024 03:45 AM - edited 04-11-2024 03:46 AM
Hi tobbeanton,
1. Could you provide your BMI323 schematic for double check?
2. We uploaded BMI323 example code on STM32 for your reference. This example code based BMI323 sensor API & example code on github https://github.com/boschsensortec/BMI323_SensorAPI
3. You can check the correctness of nrf_delay_us(period) function on your host platform.