getting I2C on the n54l15dk working

Hello,

I have failed to get the I2C working on the nrf54l15dk, i have now connected it to a oscilloscope with pull ups.

i have confirmered the pull ups work, but as i have my oscilloscope never triggers it means the signal is never going low.

is there something i am missing?

#ifndef MAIN_H
#define MAIN_H

#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/drivers/i2c.h>
#include "../firmware/bhi360.fw.h"

/* 1000 msec = 1 sec */
#define SLEEP_TIME_MS   1000

/* The devicetree node identifiers for chip select and another GPIO. */
#define CS_NODE DT_NODELABEL(cs_pin)
#define SDO_NODE DT_NODELABEL(sdo_pin)

/* The devicetree node identifier for the "led0" alias. */
#define LED_NODE DT_ALIAS(led1)

/* The devicetree node identifier for the BHI360 sensor. */
#define BHI360_NODE DT_NODELABEL(bhi360)

#include <stdio.h>

/* GPIO configuration */
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED_NODE, gpios);
static const struct gpio_dt_spec cs_pin = GPIO_DT_SPEC_GET(CS_NODE, gpios);
static const struct gpio_dt_spec sdo_pin = GPIO_DT_SPEC_GET(SDO_NODE, gpios);

/* I2C device */
static const struct i2c_dt_spec bhi360 = I2C_DT_SPEC_GET(BHI360_NODE);

int main(void)
{
    configure();
    
    while (1) {
    	blink_led();
    	int ret;

        uint8_t config[2] = {0x03,0x8C};
        ret = i2c_write_dt(&bhi360, config, sizeof(config));
        if(ret != 0){
            printk("Failed to write to I2C device address %x at reg. %x \n\r", bhi360.addr,config[0]);
        }

        k_msleep(SLEEP_TIME_MS);
    }
    return 0;
}

 

&pinctrl {
    i2c1_default: i2c1_default {
        group1 {
            psels = <NRF_PSEL(TWIM_SDA, 2, 1)>,
                    <NRF_PSEL(TWIM_SCL, 1, 3)>;
        };
    };

    i2c1_sleep: i2c1_sleep {
        group1 {
            psels = <NRF_PSEL(TWIM_SDA, 2, 1)>,
                    <NRF_PSEL(TWIM_SCL, 1, 3)>;
            low-power-enable;
        };
    };
};

/ {
    aliases {
        i2c1 = &i2c21;  // Creating an alias for easy referencing if needed
    };
};

/* Enable I2C and configure pins */
&i2c21 {
    compatible = "nordic,nrf-twim";
    status = "okay";
    clock-frequency = <I2C_BITRATE_STANDARD>;  // 100kHz standard clock frequency
    pinctrl-0 = <&i2c1_default>;
    pinctrl-1 = <&i2c1_sleep>;
    pinctrl-names = "default","sleep";

    bhi360: bhi360@28 {
        compatible = "bosch,bhi360";
        reg = <0x28>;
        label = "BHI360";
        status = "okay";
    };
};



/ {
    gpio_signals {
        compatible = "gpio-keys";
        cs_pin: chip_select_signal {
            gpios = <&gpio0 5 GPIO_ACTIVE_HIGH>;
            label = "Chip Select Signal";
        };
         sdo_pin: sdo_signal {
            gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;
            label = "SDO Signal";
        };
    };
};

CONFIG_I2C=y
CONFIG_GPIO=y
CONFIG_I2C_NRFX_TWIM=y

king regards Luca

Related