Hello, I have a minor problem with starting up i2c0 and i2c1. I am trying to run a scanner in the sample code that will print out the addresses connected to these buses. I am using an SRT40 sensor with address 0x44. This scan only works for the i2c0 bus without any problems.
Here is the code:
overlay:
/ {
aliases {
i2c0 = &i2c0;
i2c1 = &i2c1;
};
};
&spi0 {
status = "disabled";
};
&spi1 {
status = "disabled";
};
&i2c0 {
compatible = "nordic,nrf-twim";
status = "okay";
scl-pin = <26>;
sda-pin = <27>;
clock-frequency = <I2C_BITRATE_STANDARD>;
};
&i2c1 {
compatible = "nordic,nrf-twim";
status = "okay";
scl-pin = <28>;
sda-pin = <29>;
clock-frequency = <I2C_BITRATE_STANDARD>;
};
prj.conf:
main:
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/devicetree.h>
#include <zephyr/drivers/i2c.h>
#include <zephyr/sys/printk.h>
#define I2C0_NODE DT_NODELABEL(i2c0)
#define I2C1_NODE DT_NODELABEL(i2c1)
const struct device *i2c0_dev = DEVICE_DT_GET(I2C0_NODE);
const struct device *i2c1_dev = DEVICE_DT_GET(I2C1_NODE);
void scan_i2c_bus(const struct device *i2c_dev, const char *bus_name) {
if (!device_is_ready(i2c_dev)) {
printk("I2C %s is not ready!\n", bus_name);
return;
}
printk("Scanning %s...\n", bus_name);
for (uint8_t addr = 0x08; addr <= 0x77; addr++) {
uint8_t dummy;
struct i2c_msg msg = {
.buf = &dummy,
.len = 1,
.flags = I2C_MSG_WRITE | I2C_MSG_STOP,
};
if (i2c_transfer(i2c_dev, &msg, 1, addr) == 0) {
printk("Found device at 0x%02X on %s\n", addr, bus_name);
}
}
}
int main(void) {
printk("\n🚀 Starting I2C scan on nRF52840\n");
scan_i2c_bus(i2c0_dev, "I2C0");
scan_i2c_bus(i2c1_dev, "I2C1");
printk("12C scan completed.\n");
return 0;
}I really don't know why it doesn't want to find i2c1, according to the documentation I turned off the spi1 peripherals. I also tried adding this to prj.conf:
after this prj I get this error:
error: NRFX_TWIM (defined at C:/ncs/v2.9.0/zephyr/modules/hal_nordic\nrfx/Kconfig:842,
modules\hal_nordic\nrfx/Kconfig:842) is assigned in a configuration file, but is not directly user-
configurable (has no prompt). It gets its value indirectly from...Code
I use Zephyr OS, nRF Connect SDK v2.9.0