cancel
Showing results for 
Search instead for 
Did you mean: 

How to differentiate inertial sensors with the same WHO_AM_I register value?

LPats.1
Associate II

Hello,

I need to use the WHO_AM_I register value to differentiate between some inertial sensors, but I've realized that this value is the same across some products.

Example:

ISM330DLC and LSM6DSM shares the same 01101010 WHO_AM_I value.

LSM6DSO and LSM6DSO32 shares the same 01101100 WHO_AM_I value.

In the first case, ISM330DLC and LSM6DSM, it seems to not be a major issue, other than the impossibility of knowing exactly what part is mounted on a board. As far as I've seen, all the registers and configurations are the same across the two options.

However, for LSM6DSO and LSM6DSO32, this is a problem. It is not possible to know what exact part is mounted on a board using this info, and each part need some specific register values (setting the accelerometer full-scale is the most obvious difference).

Just to provide some context: we're developing a board with some inertial sensors footprints, and we'd like to have some flexibility in our BOM to deal with components shortages and price increases. It should be up to the firmware to detect what sensor is mounted on the PCB, and configure it accordingly.

Is there any other way to differentiate between these sensors other than the WHO_AM_I register?

1 ACCEPTED SOLUTION

Accepted Solutions
wai.1
Associate

Hi LPats.1,

Other than checking WHO_AM_I value, I think you can differentiate the sensors with their address? saying that, I assume you are using I2C mode.

I've checked the datasheet of LSM6DSO32, and found that the I²C least significant bit of the device address can be changed by setting or resetting pin (SA0). The reference is from Table 2 of the datasheet.

If you are using SPI mode, could you differentiate the sensors by assigning different CS pin to them?

View solution in original post

2 REPLIES 2
wai.1
Associate

Hi LPats.1,

Other than checking WHO_AM_I value, I think you can differentiate the sensors with their address? saying that, I assume you are using I2C mode.

I've checked the datasheet of LSM6DSO32, and found that the I²C least significant bit of the device address can be changed by setting or resetting pin (SA0). The reference is from Table 2 of the datasheet.

If you are using SPI mode, could you differentiate the sensors by assigning different CS pin to them?

LPats.1
Associate II

Hi wai.1

Yes, that's really an option, I haven't realized that.

We're using I2C, and we can use the address pin to differ between these devices. That's easily accomplished with BOM changes. A PCB mounted with LSM6DSO should have a jumper on this pin setting it to Vcc, while a PCB mounted with LSMDSO32 should have a jumper to GND.

It won't help in case it's needed to identify between three different options, but that's enough for our purposes now.

Thanks