i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0

Hello,

I am trying to combine results from the temperature sensor which works in I2C protocol

and in RTT prints I get an error
<err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0

I tried to make a change in the configuration of the pins (DTS file), but still this error is accepted.

Attached is a DTS file.

  • /*
     * Copyright (c) 2018-2020 Nordic Semiconductor ASA
     *
     * SPDX-License-Identifier: Apache-2.0
     */
    
    / {
    	model = "Nordic nRF9160 DK NRF9160";
    	compatible = "nordic,nrf9160-dk-nrf9160";
    
    	chosen {
    		zephyr,console = &uart0;
    		zephyr,shell-uart = &uart0;
    		zephyr,uart-mcumgr = &uart0;
    	};
    	
    	leds {
    		compatible = "gpio-leds";
    		led0: led_0 {
    			gpios = <&gpio0 2 0>;
    			label = "Green LED 1";
    		};
    		led1: led_1 {
    			gpios = <&gpio0 3 0>;
    			label = "Green LED 2";
    		};
    		led2: led_2 {
    			gpios = <&gpio0 2 0>;
    			label = "Green LED 3";
    		};
    		led3: led_3 {
    			gpios = <&gpio0 5 0>;
    			label = "Green LED 4";
    		};
    	};
    
    	pwmleds {
    		compatible = "pwm-leds";
    		pwm_led0: pwm_led_0 {
    			pwms = <&pwm0 12>;
    		};
    	};
    
    	buttons {
    		/*
    		 * Unlike most DK boards, we do not actually have 4 buttons
    		 * on nRF9160 DK. Instead, we have 2 buttons and 2 switches.
    		 * Treat the switches as buttons anyway, for convenience.
    		 * This makes life easier for software that wants to deal with
    		 * the usual "4 buttons per DK board" convention.
    		 */
    		compatible = "gpio-keys";
    		button0: button_0 {
    			gpios = <&gpio0 6 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Push button 1";
    		};
    		button1: button_1 {
    			gpios = <&gpio0 7 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Push button 2";
    		};
    		button2: button_2 {
    			gpios = <&gpio0 8 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Switch 1";
    		};
    		button3: button_3 {
    			gpios = <&gpio0 9 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Switch 2";
    		};
    	};
    
    	interface_to_nrf52840: gpio-interface {
    		compatible = "nordic,nrf9160dk-nrf52840-interface";
    		#gpio-cells = <2>;
    		gpio-map-mask = <0xf 0>;
    		gpio-map-pass-thru = <0 0xffffffff>;
    		gpio-map = <0 0 &gpio0 17 0>,
    			   <1 0 &gpio0 18 0>,
    			   <2 0 &gpio0 19 0>,
    			   <3 0 &gpio0 21 0>,
    			   <4 0 &gpio0 22 0>,
    			   <5 0 &gpio0 23 0>;
    			   /* 6: COEX0 */
    			   /* 7: COEX1 */
    			   /* 8: COEX2 */
    	};
    
    	nrf52840_reset: gpio-reset {
    		compatible = "nordic,nrf9160dk-nrf52840-reset";
    		status = "disabled";
    		/*
    		 * This line is specified as active high for compatibility
    		 * with the previously used Kconfig-based configuration.
    		 */
    		gpios = <&interface_to_nrf52840 5 GPIO_ACTIVE_HIGH>;
    	};
    
    	arduino_header: connector {
    		compatible = "arduino-header-r3";
    		#gpio-cells = <2>;
    		gpio-map-mask = <0xffffffff 0xffffffc0>;
    		gpio-map-pass-thru = <0 0x3f>;
    		gpio-map = <0 0 &gpio0 14 0>,	/* A0 */
    			   <1 0 &gpio0 15 0>,	/* A1 */
    			   <2 0 &gpio0 16 0>,	/* A2 */
    			   <3 0 &gpio0 17 0>,	/* A3 */
    			   <4 0 &gpio0 18 0>,	/* A4 */
    			   <5 0 &gpio0 19 0>,	/* A5 */
    			   <6 0 &gpio0 0 0>,	/* D0 */
    			   <7 0 &gpio0 1 0>,	/* D1 */
    			   <8 0 &gpio0 2 0>,	/* D2 */
    			   <9 0 &gpio0 3 0>,	/* D3 */
    			   /*<10 0 &gpio0 4 0>,*/   /* D4 */
    			   <11 0 &gpio0 5 0>,	/* D5 */
    			   <12 0 &gpio0 6 0>,	/* D6 */
    			   <13 0 &gpio0 7 0>,	/* D7 */
    			   <14 0 &gpio0 8 0>,	/* D8 */
    			   <15 0 &gpio0 9 0>,	/* D9 */
    			   <16 0 &gpio0 10 0>,	/* D10 */
    			   <17 0 &gpio0 11 0>,	/* D11 */
    			   <18 0 &gpio0 12 0>,	/* D12 */
    			   <19 0 &gpio0 13 0>,	/* D13 */
    			   <20 0 &gpio0 30 0>,	/* D14 */
    			   <21 0 &gpio0 31 0>;	/* D15 */
    	};
    /* Non-Secure image memory */
    	arduino_adc: analog-connector {
    		compatible = "arduino,uno-adc";
    		#io-channel-cells = <1>;
    		io-channel-map = <0 &adc 1>,	/* A0 = P0.14 = AIN1 */
    				 <1 &adc 2>,	/* A1 = P0.15 = AIN2 */
    				 <2 &adc 3>,	/* A2 = P0.16 = AIN3 */
    			   /*<3 &adc 4>,*/	/* A3 = P0.17 = AIN4 */
    				 <4 &adc 5>,	/* A4 = P0.18 = AIN5 */
    				 <5 &adc 6>;	/* A5 = P0.19 = AIN6 */
    	};
    
    	/* These aliases are provided for compatibility with samples */
    	aliases {
    		led0 = &led0;
    		led1 = &led1;
    		led2 = &led2;
    		led3 = &led3;
    		pwm-led0 = &pwm_led0;
    		sw0 = &button0;
    		sw1 = &button1;
    		sw2 = &button2;
    		sw3 = &button3;
    		bootloader-led0 = &led0;
    	};
    };
    
    &adc {
    	status = "okay";
    };
    
    &gpiote {
    	status = "okay";
    };
    
    &gpio0 {
    	status = "okay";
    };
    
    &uart0 {
    	status = "okay";
    	current-speed = <115200>;
    	tx-pin = <29>;
    	rx-pin = <28>;
    	rx-pull-up;
    	rts-pin = <27>;
    	cts-pull-up;
    };
    
    arduino_serial: &uart1 {
    	status = "disabled";
    	current-speed = <115200>;
    };
    
    &uart2 {
        status = "disabled";
    	tx-pin = <24>;
    	rx-pin = <23>;
    };
    
    &pwm0 {
    	status = "okay";
    	ch0-pin = <12>;
    };
    
    &spi3 {
        status = "okay";
        compatible = "nordic,nrf-spim";
        sck-pin = <31>;
        mosi-pin = <9>;
        miso-pin = <30>;
    /* 	cs-gpios = <&gpio0 26 0>,<&gpio0 15 1>;
       cs-gpios = <&gpio0 26 GPIO_ACTIVE_LOW>,
    	           <&gpio0 15 GPIO_ACTIVE_LOW>;  */
    };
    
    &spi1 {
    	compatible = "nordic,nrf-spim";
    	clock-frequency = <0x80000000>;
    	status = "okay";
        sck-pin = <3>;
        mosi-pin = <8>;
        miso-pin = <5>;
        cs-gpios = <&gpio0 4 0>;  
    /*    cs-gpios = <&gpio0 4 1>;  */
    };
    
    &gpiote {   
    status = "okay";
       interrupts = <49 0>;
       interrupts = <49 0>;
    };
    
    &i2c2 {
    	compatible = "nordic,nrf-twim";
    	status = "okay";
    	sda-pin = <11>;
    	scl-pin = <10>;
    };
    
    &gpiote {   
    status = "okay";
       interrupts = <49 0>;
    };
    
    &timer0 {
    	status = "okay";
    };
    
    &timer1 {
    	status = "okay";
    };
    
    &timer2 {
    	status = "okay";
    };
    
    &flash0 {
    
    	partitions {
    		compatible = "fixed-partitions";
    		#address-cells = <1>;
    		#size-cells = <1>;
    
    		boot_partition: partition@0 {
    			label = "mcuboot";
    			reg = <0x00000000 0x10000>;
    		};
    		slot0_partition: partition@10000 {
    			label = "image-0";
    		};
    		slot0_ns_partition: partition@50000 {
    			label = "image-0-nonsecure";
    		};
    		slot1_partition: partition@80000 {
    			label = "image-1";
    		};
    		slot1_ns_partition: partition@c0000 {
    			label = "image-1-nonsecure";
    		};
    		scratch_partition: partition@f0000 {
    			label = "image-scratch";
    			reg = <0x000f0000 0xa000>;
    		};
    		storage_partition: partition@fa000 {
    			label = "storage";
    			reg = <0x000fa000 0x00006000>;
    		};
    	};
    };
    
    / {
    
    	reserved-memory {
    		#address-cells = <1>;
    		#size-cells = <1>;
    		ranges;
    
    		sram0_s: image_s@20000000 {
    			/* Secure image memory */
    		};
    
    		sram0_modem: image_modem@20016000 {
    			/* Modem (shared) memory */
    		};
    
    		sram0_ns: image_ns@20020000 {
    			/* Non-Secure image memory */
    		};
    	};
    };
    
    /* Include partition configuration file */
    #include "etrog_nrf9160_partition_conf.dts"
    

  • Hi,

    This error has been discussed here, and is apparently a NACK error. Can you probe the I2C lines and verify if the slave responds correctly?

    regards

    Jared 

  • We have a reference program for checking the value obtained from a temperature sensor, and in this reference software it works smoothly.

    I think there is something missing in the settings, otherwise I have no way to explain, how one software works wonderfully and in the other I get an error.

    These are the error lines :

    00> rtt:~$ rtt:~$ rtt:~$ [00:00:28.898,132] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
    00> rtt:~$ i2c_burst_read:-5

  • Gal_S said:
    I think there is something missing in the settings, otherwise I have no way to explain, how one software works wonderfully and in the other I get an error.

    Can you verify that the output on SDA and SCLK looks the same in both cases. I would be great if you can share the trace. In the case I linked, the issue was a HW problem. Most probably something was configured incorrectly such as pullups etc. Do you use any external pull ups? Does the slave require it?

    regards

    Jared 

Related