I'm going to build an project with 2 AS5600 sensors, and also using I2C mux(TCA9548A) to communicate with 2 sensors.
I have some problem with devicetree. There are two errors in &i2c1 node, how could I fix this?
Also, when I try to build the project, I got an error message:
error: static assertion failed: "I2C multiplexer channels must be initialized after their root"
Please give me some advices.
I had already read this https://devzone.nordicsemi.com/f/nordic-q-a/100595/problem-configuring-twi-i2c-interface, but nothing help
This is my .dts file currently:
// Copyright (c) 2024 Nordic Semiconductor ASA
// SPDX-License-Identifier: Apache-2.0
/dts-v1/;
#include <nordic/nrf52832_qfaa.dtsi>
#include "custom_nrf52832-pinctrl.dtsi"
/ {
model = "custom_nrf52832";
compatible = "myself,custom-nrf52832";
chosen {
zephyr,sram = &sram0;
zephyr,flash = &flash0;
zephyr,code-partition = &slot0_partition;
zephyr,console = &uart0;
zephyr,shell-uart = &uart0;
zephyr,uart-mcumgr = &uart0;
};
leds {
compatible = "gpio-leds";
ledR: led_0 {
gpios = <&gpio0 3 (GPIO_ACTIVE_LOW)>;
label = "Red led R";
};
ledB: led_1 {
gpios = <&gpio0 4 (GPIO_ACTIVE_LOW)>;
label = "Blue led B";
};
// ledB: led_2 {
// gpios = <&gpio0 5 (GPIO_ACTIVE_LOW)>;
// label = "Blue led B";
// };
};
buttons {
compatible = "gpio-keys";
button0: button_0 {
gpios = <&gpio0 27 0>;
label = "Push button switch 0";
};
Gsensor_INT1: INT1 {
gpios = <&gpio0 19 0>;
label = "Gsensor_INT1";
};
Gsensor_INT2: INT2 {
gpios = <&gpio0 20 0>;
label = "Gsensor_INT2";
};
};
zephyr,user {
io-channels = <&adc 4>;
status = "okay";
};
vbatt {
compatible = "voltage-divider";
io-channels = <&adc 0>;
output-ohms = <10000000>;
full-ohms = <(10000000 + 10000000)>;
// power-gpios = <&sx1509b 4 0>;
status = "okay";
};
/* These aliases are provided for compatibility with samples */
aliases {
led0 = &ledR;
led1 = &ledB;
// led2 = &ledB;
// pwm-led0 = &pwm_ledR;
// pwm-led1 = &pwm_ledG;
// pwm-led2 = &pwm_ledB;
sw0 = &button0;
int1 = &Gsensor_INT1;
int2 = &Gsensor_INT2;
bootloader-led0 = &ledR;
mcuboot-button0 = &button0;
mcuboot-led0 = &ledR;
watchdog0 = &wdt0;
};
};
&flash0 {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
boot_partition: partition@0 {
label = "mcuboot";
reg = <0x0 0xc000>;
};
slot0_partition: partition@c000 {
label = "image-0";
reg = <0xc000 0x32000>;
};
slot1_partition: partition@3e000 {
label = "image-1";
reg = <0x3e000 0x32000>;
};
scratch_partition: partition@70000 {
label = "image-scratch";
reg = <0x70000 0xa000>;
};
storage_partition: partition@7a000 {
label = "storage";
reg = <0x7a000 0x6000>;
};
};
};
&gpio0 {
status = "okay";
};
&gpiote {
status = "okay";
};
&uart0 {
status = "okay";
current-speed = <115200>;
pinctrl-0 = <&uart0_default>;
pinctrl-1 = <&uart0_sleep>;
pinctrl-names = "default", "sleep";
};
&i2c0 {
compatible = "nordic,nrf-twim";
status = "okay";
clock-frequency = <I2C_BITRATE_STANDARD>;
pinctrl-0 = <&i2c0_default>;
pinctrl-1 = <&i2c0_sleep>;
pinctrl-names = "default", "sleep";
label = "I2C_0";
lsm6dsl: lsm6dsl@6a {
compatible = "st,lsm6dsl";
reg = <0x6a>;
// irq-gpios = <&gpio0 19 GPIO_ACTIVE_HIGH>,
// <&gpio0 20 GPIO_ACTIVE_HIGH>;
label = "GSENSOR";
status = "okay";
};
};
&i2c1 {
status = "okay";
pinctrl-0 = < &i2c1_default > ;
pinctrl-names = "default";
clock-frequency = < I2C_BITRATE_STANDARD >;
mux: tca9548a@70 {
compatible = "ti,tca9548a";
reg = <0x70>;
status = "okay";
label = "i2c_mux";
#address-cells = <1>;
#size-cells = <0>;
mux_i2c@0 {
compatible= "ti,tca9548a-channel"
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
as5600_0: as5600@36 {
compatible = "ams,as5600";
reg = <0x36>;
};
};
mux_i2c@1 {
compatible= "ti,tca9548a-channel"
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
as5600_1: as5600@36 {
compatible = "ams,as5600";
reg = <0x36>;
};
};
};
};
&adc {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
channel@0 {
reg = <0>;
zephyr,gain = "ADC_GAIN_1_4";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
zephyr,input-positive = <NRF_SAADC_AIN0>; /* P0.02 */
zephyr,resolution = <12>;
};
channel@4 {
reg = <4>;
zephyr,gain = "ADC_GAIN_1_4";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
zephyr,input-positive = <NRF_SAADC_AIN4>; /* P0.028 */
zephyr,resolution = <12>;
};
};
And the pinctrl file:
/*
* Copyright (c) 2022 Nordic Semiconductor
* SPDX-License-Identifier: Apache-2.0
*/
&pinctrl {
uart0_default: uart0_default {
group1 {
psels = <NRF_PSEL(UART_TX, 0, 6)>,
<NRF_PSEL(UART_RX, 0, 8)>,
<NRF_PSEL(UART_RTS, 0, 9)>,
<NRF_PSEL(UART_CTS, 0, 7)>;
};
};
uart0_sleep: uart0_sleep {
group1 {
psels = <NRF_PSEL(UART_TX, 0, 6)>,
<NRF_PSEL(UART_RX, 0, 8)>,
<NRF_PSEL(UART_RTS, 0, 9)>,
<NRF_PSEL(UART_CTS, 0, 7)>;
low-power-enable;
};
};
i2c0_default: i2c0_default {
group1 {
psels = <NRF_PSEL(TWIM_SDA, 0, 11)>,
<NRF_PSEL(TWIM_SCL, 0, 12)>;
// bias-pull-up;
};
};
i2c0_sleep: i2c0_sleep {
group1 {
psels = <NRF_PSEL(TWIM_SDA, 0, 11)>,
<NRF_PSEL(TWIM_SCL, 0, 12)>;
low-power-enable;
};
};
i2c1_default: i2c1_default {
group1 {
psels = <NRF_PSEL(TWIM_SDA, 0, 14)>,
<NRF_PSEL(TWIM_SCL, 0, 13)>;
// bias-pull-up;
};
};
i2c1_sleep: i2c1_sleep {
group1 {
psels = <NRF_PSEL(TWIM_SDA, 0, 14)>,
<NRF_PSEL(TWIM_SCL, 0, 13)>;
low-power-enable;
};
};
};
Here are the errors show on vscode:

