ICM42670 Sensor with nRF9160

Hi,

I am trying to test the ICM42670 sensor using nRF9160 with Zephyr V2.6.0 and I am getting an errors when I init the sensor:

unexpected RESET_DONE_INT value, 0

 ICM42670 Sensor is not ready

device tree:

&spi3 {
compatible = "nordic,nrf-spi";
pinctrl-0 = <&spi3_default>;
pinctrl-1 = <&spi3_sleep>;
pinctrl-names = "default", "sleep";
cs-gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;

status = "okay";
overrun-character = <1>;

// IMU Sensor
icm42670: icm42670@0 {
compatible = "invensense,icm42670";
reg = <0>;
spi-max-frequency = <DT_FREQ_M(24)>;
accel-hz = <1600>;
accel-fs = <16>;
gyro-hz = <1600>;
gyro-fs = <2000>;
};
};
icm_sensor.c file
const struct device *const icm_dev = DEVICE_DT_GET_ANY(invensense_icm42670);

int icm_init(void) {
if (icm_dev == NULL) {
LOG_ERR("ICM42670 Sensor Not found");
return INIT_ERR;
}
if (!device_is_ready(icm_dev)) {
LOG_ERR("ICM42670 Sensor is not ready");
return INIT_ERR;
}

LOG_INF("Sensor %s is ready", icm_dev->name);

k_sleep(K_MSEC(1000));

return INIT_OK;
}

void get_icm_data(void) {
static unsigned int count;
struct sensor_value accel[3];
const char *overrun = "";
int rc = sensor_sample_fetch(icm_dev);

++count;
if (rc == -EBADMSG) {
/* Sample overrun. Ignore in polled mode. */
if (IS_ENABLED(CONFIG_ICM42670_TRIGGER)) {
overrun = "[OVERRUN] ";
}
rc = 0;
}
if (rc == 0) {
rc = sensor_channel_get(icm_dev, SENSOR_CHAN_ACCEL_XYZ, accel);
}
if (rc < 0) {
LOG_ERR("ICM42670: Update failed: %d", rc);
} else {
LOG_INF("ICM42670 : X = %f , Y = %f , Z = %f",
sensor_value_to_double(&accel[0]), sensor_value_to_double(&accel[1]), sensor_value_to_double(&accel[2]));
}
}
Related