I2C Issues on Port2 (P2.06–P2.10) with BMI270 on nRF54L15 DK (NCS 2.9.0)

Hello,

I'm trying to connect a BMI270 sensor over I2C using Port2 on the nRF54L15, with the nRF54L15 DK, and I'm working with the nRF Connect SDK v2.9.0, based on a Zephyr sample.

Here's what I've observed:

  • I'm using P2.06 as SCL and P2.07 as SDA, without external pull-up resistors. Instead, I'm relying on the bias-pull-up configuration in the pinctrl.

  • When the sensor is NOT connected, I can see waveforms on the SCL line as expected (confirmed with an oscilloscope).

  • When I connect the sensor, the SCL line stays high, and I don't see any waveforms — it seems the line gets stuck.

  • If I try changing the SDA pin to P2.08, P2.09, or P2.10, I don't get any activity on the SCL line at all, regardless of whether the sensor is connected or not.

  • I'm only trying to use these P2.x pins for the I2C connection, and they are available on my board.

As a comparison, if I use Port1 (with P1.07 as SCL and P1.06 as SDA), everything works perfectly — the sensor communicates as expected.

My question is:
Are the pins P2.06 to P2.10 actually usable for I2C communication on the nRF54L15 DK?
I've tried several configurations but nothing seems to work on Port2.

Any help or clarification would be greatly appreciated.
Thanks in advance!


My .overlay:

/*
 * Copyright (c) 2021 Bosch Sensortec GmbH
 *
 * SPDX-License-Identifier: Apache-2.0
 */

&i2c21 {
    status = "okay";
    compatible = "nordic,nrf-twim";
    clock-frequency = <I2C_BITRATE_STANDARD>;
    pinctrl-0 = <&i2c21_default>;
    pinctrl-1 = <&i2c21_sleep>;
    pinctrl-names = "default", "sleep";
	zephyr,concat-buf-size = <257>;

    bmi270@68 {
		compatible = "bosch,bmi270";
		reg = <0x68>;
    };	
};

&pinctrl {
    i2c21_default: i2c21_default {
		group1 {
			psels = <NRF_PSEL(TWIM_SDA, 2, 7)>,
            // psels = <NRF_PSEL(TWIM_SDA, 1, 6)>,
                    <NRF_PSEL(TWIM_SCL, 2, 6)>;
            //         <NRF_PSEL(TWIM_SCL, 1, 7)>;
					nordic,drive-mode = <NRF_DRIVE_H0H1>;
                    bias-pull-up;           
		};
	};

	i2c21_sleep: i2c21_sleep {
		group1 {
			psels = <NRF_PSEL(TWIM_SDA, 2, 7)>,
            // psels = <NRF_PSEL(TWIM_SDA, 1, 6)>,
                    <NRF_PSEL(TWIM_SCL, 2, 6)>;
            //         <NRF_PSEL(TWIM_SCL, 1, 7)>;
                    low-power-enable;
		};
	};
};

  • Hi,

    It is not possible to connect TWIM instances to pins on P2 in nRF54L15. In general, serial peripherals can be connected to GPIOs port(s) located in the same power domain as the instance itself, as shown in the block diagram. This means that TWIM20-TWIM22 can be assigned pins on GPIO port P1, TWIM30 can be assigned pins on GPIO port P0. There is no TWIM instance in the MCU power domain where the P2 pins are located. Please use pins from P1 or P0 for TWIM.

    Some serial peripherals (SPIM/SPIS/UARTE) supports dedicated cross-domain pins, but unfortunately, this is not supported for TWIM (note that there is a bug in the current datasheet that indicates that this is possible also for TWIM, this will be fixed in next release of the datasheet). Cross-domain pins also increase the current consumption by quite a bit, so it is recommended to avoid this for all peripherals if possible.

    Best regards,
    Jørgen

Related