nRF Connect SDK Fundamentals Lesson 6 exercise 1: Error with i2c_write_read_dt

I am using the nRF52840DK with nRFConnect for VS Code. In Lesson 6 Exercise 1, I connected the DK to a BME280 board I purchased online. The board exposes the four pins needed for I2C comms and I connected them to the DK pins as directed in the exercise. I also use this BME board with a nRF52840 Feather board from Adafruit - and I know it's address is 0x76. I altered the device overlay as shown below to account for this address change. 

&i2c21 {
status = "okay";
pinctrl-0 = <&i2c21_default>;
pinctrl-1 = <&i2c21_sleep>;
pinctrl-names = "default", "sleep";
mysensor: mysensor@76{
compatible = "i2c-device";
status = "okay";
reg = < 0x76 >;
};
};

&pinctrl {
/omit-if-no-ref/ i2c21_default: i2c21_default {
group1 {
psels = <NRF_PSEL(TWIM_SCL, 1, 11)>,
<NRF_PSEL(TWIM_SDA, 1, 12)>;
};
};
/omit-if-no-ref/ i2c21_sleep: i2c21_sleep {
group1 {
psels = <NRF_PSEL(TWIM_SCL, 1, 11)>,
<NRF_PSEL(TWIM_SDA, 1, 12)>;
};
};
};

The software builds and flashes, but the output I get when I run the program is : Failed to read register d0, which means the first call to i2c_write_read_dt failed.

When I probed deeper, I found that the error returned was -5 - which I believe is a general read/write failure. When I connected my logic analyzer (screenshots below) I found that the DK wrote 0x76 ACK and 0xD0 ACK as expected, but the BME never replied. When I probed the Feather board I noticed that the sequence written by the Feather was 0x76 ACK, 0x76 ACK, 0xD0, and the same BME board replied with the expected 0x60. Has anyone seen this, or do you have any hints to fix it?

Thanks Lonnie

Parents
  • Hello,

    Thanks for sharing the logs. However, these look like build logs, whereas I was hoping to see the device logs that show the I2C error. From what I can tell, the issue in this log doesn’t really look like an I2C problem.

    I tried building the same sample on my side and couldn’t reproduce the issue. This looks more like a VS Code related issue, or at least not an I2C issue.

    In your overlay, I see that i2c21 is being used, could you please double-check whether that might be the problem? I’d recommend trying the solution from the same exercise once and seeing if the issue still occurs.

    Kind regards,
    Abhijith

  • Hi,

    Thank you so much for your help. I'm new to nRF connect and Nordic  - so bear with me. I don't know where to find the device logs you are looking for -and google wasn't much help. Also, I think I may have pasted the wrong device overlay file (the one I pasted was from a DevZone ticket I was looking at.. sorry. Finally, I am using the exact files for Lesson 6 Exercise 1 - except that I changed the overlay to account for the I2C device address of 00x76 instead of 0x77. When I build and flash the solution, I get the same errors. Additionally, I noticed errors in the Problems tab if I have the Device Overlay file open - like I saw with the prj.conf file. I am attaching the list of errors from the Problems Tab. And just to be clear, the device overlay is pasted here:

    // To get started, press Ctrl+Space to bring up the completion menu and view the available nodes.
    // For more help, browse the DeviceTree documentation at https://docs.zephyrproject.org/latest/guides/dts/index.html

    &i2c0 {
        status = "okay";
        pinctrl-0 = <&i2c0_default>;
        pinctrl-1 = <&i2c0_sleep>;
        pinctrl-names = "default", "sleep";
        mysensor: mysensor@76{
            compatible = "i2c-device";
            status = "okay";
            reg = < 0x76 >;
        };
    };

    &pinctrl {
        /omit-if-no-ref/ i2c0_default: i2c0_default {
            group1  {
                psels = <NRF_PSEL(TWIM_SCL, 1, 14)>,
                        <NRF_PSEL(TWIM_SDA, 1, 15)>;
            };
        };

        /omit-if-no-ref/ i2c0_sleep: i2c0_sleep {
            group1  {
                psels = <NRF_PSEL(TWIM_SCL, 1, 14)>,
                        <NRF_PSEL(TWIM_SDA, 1, 15)>;
                low-power-enable;
            };
        };
    };
    Thanks again, Lonnie

    [{
    "resource": "/C:/ncs/v3.2.1/zephyr/dts/vendor/nordic/nrf52840_partition.dtsi",
    "owner": "DeviceTree",
    "severity": 4,
    "message": "You are using Partition Manager to define the partitions. Devicetree definitions are ignored for this build.",
    "startLineNumber": 16,
    "startColumn": 2,
    "endLineNumber": 16,
    "endColumn": 12,
    "modelVersionId": 1,
    "origin": "extHost1"
    }]
    
    [{
    "resource": "/C:/myfw/ncs-fund/ncs-fund/l6/l6_e1_sol/boards/nrf52840dk_nrf52840.overlay",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Pin 14 of &gpio1 already assigned to &spi3 • MISO",
    "startLineNumber": 6,
    "startColumn": 17,
    "endLineNumber": 6,
    "endColumn": 32,
    "relatedInformation": [
    {
    "startLineNumber": 281,
    "startColumn": 14,
    "endLineNumber": 281,
    "endColumn": 29,
    "message": "Overlapping assignment",
    "resource": "/c:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts"
    },
    {
    "startLineNumber": 282,
    "startColumn": 14,
    "endLineNumber": 282,
    "endColumn": 27,
    "message": "Overlapping assignment",
    "resource": "/c:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts"
    }
    ],
    "modelVersionId": 7,
    "origin": "extHost1"
    },{
    "resource": "/C:/myfw/ncs-fund/ncs-fund/l6/l6_e1_sol/boards/nrf52840dk_nrf52840.overlay",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Pin 15 of &gpio1 already assigned to &spi3 • SCK",
    "startLineNumber": 6,
    "startColumn": 17,
    "endLineNumber": 6,
    "endColumn": 32,
    "relatedInformation": [
    {
    "startLineNumber": 281,
    "startColumn": 14,
    "endLineNumber": 281,
    "endColumn": 29,
    "message": "Overlapping assignment",
    "resource": "/c:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts"
    },
    {
    "startLineNumber": 282,
    "startColumn": 14,
    "endLineNumber": 282,
    "endColumn": 27,
    "message": "Overlapping assignment",
    "resource": "/c:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts"
    }
    ],
    "modelVersionId": 7,
    "origin": "extHost1"
    },{
    "resource": "/C:/myfw/ncs-fund/ncs-fund/l6/l6_e1_sol/boards/nrf52840dk_nrf52840.overlay",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Pin 14 of &gpio1 already assigned to &spi3 • MISO",
    "startLineNumber": 7,
    "startColumn": 14,
    "endLineNumber": 7,
    "endColumn": 27,
    "relatedInformation": [
    {
    "startLineNumber": 281,
    "startColumn": 14,
    "endLineNumber": 281,
    "endColumn": 29,
    "message": "Overlapping assignment",
    "resource": "/c:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts"
    },
    {
    "startLineNumber": 282,
    "startColumn": 14,
    "endLineNumber": 282,
    "endColumn": 27,
    "message": "Overlapping assignment",
    "resource": "/c:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts"
    }
    ],
    "modelVersionId": 7,
    "origin": "extHost1"
    },{
    "resource": "/C:/myfw/ncs-fund/ncs-fund/l6/l6_e1_sol/boards/nrf52840dk_nrf52840.overlay",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Pin 15 of &gpio1 already assigned to &spi3 • SCK",
    "startLineNumber": 7,
    "startColumn": 14,
    "endLineNumber": 7,
    "endColumn": 27,
    "relatedInformation": [
    {
    "startLineNumber": 281,
    "startColumn": 14,
    "endLineNumber": 281,
    "endColumn": 29,
    "message": "Overlapping assignment",
    "resource": "/c:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts"
    },
    {
    "startLineNumber": 282,
    "startColumn": 14,
    "endLineNumber": 282,
    "endColumn": 27,
    "message": "Overlapping assignment",
    "resource": "/c:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts"
    }
    ],
    "modelVersionId": 7,
    "origin": "extHost1"
    }]
    
    [{
    "resource": "/C:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Pin 13 of &gpio0 already assigned to &pwm0 • OUT0",
    "startLineNumber": 32,
    "startColumn": 20,
    "endLineNumber": 32,
    "endColumn": 22,
    "relatedInformation": [
    {
    "startLineNumber": 220,
    "startColumn": 14,
    "endLineNumber": 220,
    "endColumn": 29,
    "message": "Overlapping assignment",
    "resource": "/c:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts"
    },
    {
    "startLineNumber": 221,
    "startColumn": 14,
    "endLineNumber": 221,
    "endColumn": 27,
    "message": "Overlapping assignment",
    "resource": "/c:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts"
    }
    ],
    "modelVersionId": 1,
    "origin": "extHost1"
    },{
    "resource": "/C:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Pin 13 of &gpio0 already assigned to &led0",
    "startLineNumber": 220,
    "startColumn": 14,
    "endLineNumber": 220,
    "endColumn": 29,
    "relatedInformation": [
    {
    "startLineNumber": 32,
    "startColumn": 20,
    "endLineNumber": 32,
    "endColumn": 22,
    "message": "Overlapping assignment",
    "resource": "/c:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts"
    }
    ],
    "modelVersionId": 1,
    "origin": "extHost1"
    },{
    "resource": "/C:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Pin 13 of &gpio0 already assigned to &led0",
    "startLineNumber": 221,
    "startColumn": 14,
    "endLineNumber": 221,
    "endColumn": 27,
    "relatedInformation": [
    {
    "startLineNumber": 32,
    "startColumn": 20,
    "endLineNumber": 32,
    "endColumn": 22,
    "message": "Overlapping assignment",
    "resource": "/c:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts"
    }
    ],
    "modelVersionId": 1,
    "origin": "extHost1"
    },{
    "resource": "/C:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Pin 14 of &gpio1 already assigned to &i2c0 • SCL",
    "startLineNumber": 281,
    "startColumn": 14,
    "endLineNumber": 281,
    "endColumn": 29,
    "relatedInformation": [
    {
    "startLineNumber": 6,
    "startColumn": 17,
    "endLineNumber": 6,
    "endColumn": 32,
    "message": "Overlapping assignment",
    "resource": "/c:/myfw/ncs-fund/ncs-fund/l6/l6_e1_sol/boards/nrf52840dk_nrf52840.overlay"
    },
    {
    "startLineNumber": 7,
    "startColumn": 14,
    "endLineNumber": 7,
    "endColumn": 27,
    "message": "Overlapping assignment",
    "resource": "/c:/myfw/ncs-fund/ncs-fund/l6/l6_e1_sol/boards/nrf52840dk_nrf52840.overlay"
    }
    ],
    "modelVersionId": 1,
    "origin": "extHost1"
    },{
    "resource": "/C:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Pin 15 of &gpio1 already assigned to &i2c0 • SDA",
    "startLineNumber": 281,
    "startColumn": 14,
    "endLineNumber": 281,
    "endColumn": 29,
    "relatedInformation": [
    {
    "startLineNumber": 6,
    "startColumn": 17,
    "endLineNumber": 6,
    "endColumn": 32,
    "message": "Overlapping assignment",
    "resource": "/c:/myfw/ncs-fund/ncs-fund/l6/l6_e1_sol/boards/nrf52840dk_nrf52840.overlay"
    },
    {
    "startLineNumber": 7,
    "startColumn": 14,
    "endLineNumber": 7,
    "endColumn": 27,
    "message": "Overlapping assignment",
    "resource": "/c:/myfw/ncs-fund/ncs-fund/l6/l6_e1_sol/boards/nrf52840dk_nrf52840.overlay"
    }
    ],
    "modelVersionId": 1,
    "origin": "extHost1"
    },{
    "resource": "/C:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Pin 14 of &gpio1 already assigned to &i2c0 • SCL",
    "startLineNumber": 282,
    "startColumn": 14,
    "endLineNumber": 282,
    "endColumn": 27,
    "relatedInformation": [
    {
    "startLineNumber": 6,
    "startColumn": 17,
    "endLineNumber": 6,
    "endColumn": 32,
    "message": "Overlapping assignment",
    "resource": "/c:/myfw/ncs-fund/ncs-fund/l6/l6_e1_sol/boards/nrf52840dk_nrf52840.overlay"
    },
    {
    "startLineNumber": 7,
    "startColumn": 14,
    "endLineNumber": 7,
    "endColumn": 27,
    "message": "Overlapping assignment",
    "resource": "/c:/myfw/ncs-fund/ncs-fund/l6/l6_e1_sol/boards/nrf52840dk_nrf52840.overlay"
    }
    ],
    "modelVersionId": 1,
    "origin": "extHost1"
    },{
    "resource": "/C:/ncs/v3.2.1/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Pin 15 of &gpio1 already assigned to &i2c0 • SDA",
    "startLineNumber": 282,
    "startColumn": 14,
    "endLineNumber": 282,
    "endColumn": 27,
    "relatedInformation": [
    {
    "startLineNumber": 6,
    "startColumn": 17,
    "endLineNumber": 6,
    "endColumn": 32,
    "message": "Overlapping assignment",
    "resource": "/c:/myfw/ncs-fund/ncs-fund/l6/l6_e1_sol/boards/nrf52840dk_nrf52840.overlay"
    },
    {
    "startLineNumber": 7,
    "startColumn": 14,
    "endLineNumber": 7,
    "endColumn": 27,
    "message": "Overlapping assignment",
    "resource": "/c:/myfw/ncs-fund/ncs-fund/l6/l6_e1_sol/boards/nrf52840dk_nrf52840.overlay"
    }
    ],
    "modelVersionId": 1,
    "origin": "extHost1"
    }]
    
    [{
    "resource": "/C:/ncs/v3.2.1/zephyr/dts/arm/nordic/nrf52840.dtsi",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Address range collides with power@40000000 (both start at 0x40000000)",
    "startLineNumber": 67,
    "startColumn": 10,
    "endLineNumber": 67,
    "endColumn": 29,
    "relatedInformation": [
    {
    "startLineNumber": 72,
    "startColumn": 10,
    "endLineNumber": 72,
    "endColumn": 24,
    "message": "power@40000000 declared here",
    "resource": "/c:/ncs/v3.2.1/zephyr/dts/arm/nordic/nrf52840.dtsi"
    }
    ],
    "modelVersionId": 1,
    "origin": "extHost1"
    },{
    "resource": "/C:/ncs/v3.2.1/zephyr/dts/arm/nordic/nrf52840.dtsi",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Address range collides with clock@40000000 (both start at 0x40000000)",
    "startLineNumber": 74,
    "startColumn": 10,
    "endLineNumber": 74,
    "endColumn": 29,
    "relatedInformation": [
    {
    "startLineNumber": 65,
    "startColumn": 10,
    "endLineNumber": 65,
    "endColumn": 24,
    "message": "clock@40000000 declared here",
    "resource": "/c:/ncs/v3.2.1/zephyr/dts/arm/nordic/nrf52840.dtsi"
    }
    ],
    "modelVersionId": 1,
    "origin": "extHost1"
    },{
    "resource": "/C:/ncs/v3.2.1/zephyr/dts/arm/nordic/nrf52840.dtsi",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Address range collides with flash-controller@4001e000 (both start at 0x4001e000)",
    "startLineNumber": 417,
    "startColumn": 10,
    "endLineNumber": 417,
    "endColumn": 29,
    "relatedInformation": [
    {
    "startLineNumber": 421,
    "startColumn": 21,
    "endLineNumber": 421,
    "endColumn": 46,
    "message": "flash-controller@4001e000 declared here",
    "resource": "/c:/ncs/v3.2.1/zephyr/dts/arm/nordic/nrf52840.dtsi"
    }
    ],
    "modelVersionId": 1,
    "origin": "extHost1"
    },{
    "resource": "/C:/ncs/v3.2.1/zephyr/dts/arm/nordic/nrf52840.dtsi",
    "owner": "DeviceTree",
    "severity": 2,
    "message": "Address range collides with acl@4001e000 (both start at 0x4001e000)",
    "startLineNumber": 423,
    "startColumn": 10,
    "endLineNumber": 423,
    "endColumn": 29,
    "relatedInformation": [
    {
    "startLineNumber": 415,
    "startColumn": 8,
    "endLineNumber": 415,
    "endColumn": 20,
    "message": "acl@4001e000 declared here",
    "resource": "/c:/ncs/v3.2.1/zephyr/dts/arm/nordic/nrf52840.dtsi"
    }
    ],
    "modelVersionId": 1,
    "origin": "extHost1"
    }]
    

  • One addition. I deleted the build file for l6_e1_sol, and I added the parameters in the prj.conf file to provide the i2c_dump_messages. I rebuilt and have this output:

    *** Booting nRF Connect SDK v3.2.1-d8887f6f32df ***
    *** Using Zephyr OS v4.2.99-ec78104f1569 ***
    [00:00:00.249,908] <dbg> i2c: i2c_dump_msgs_rw: I2C msg: i2c@40003000, addr=76
    [00:00:00.249,938] <dbg> i2c: i2c_dump_msgs_rw: W len=01: d0
    [00:00:00.249,969] <dbg> i2c: i2c_dump_msgs_rw: R Sr P len=01: 00
    Failed to read register d0

    However the logic analyzer still shows the same data as the first screenshot in my first message:

    Start, write to 0x76, ACK-Slave, 0xd0, ACK-Master - and that is all, no Read, no restart, no data, and no Stop - even though these are indicated in the i2c_dump_messages data above

Reply
  • One addition. I deleted the build file for l6_e1_sol, and I added the parameters in the prj.conf file to provide the i2c_dump_messages. I rebuilt and have this output:

    *** Booting nRF Connect SDK v3.2.1-d8887f6f32df ***
    *** Using Zephyr OS v4.2.99-ec78104f1569 ***
    [00:00:00.249,908] <dbg> i2c: i2c_dump_msgs_rw: I2C msg: i2c@40003000, addr=76
    [00:00:00.249,938] <dbg> i2c: i2c_dump_msgs_rw: W len=01: d0
    [00:00:00.249,969] <dbg> i2c: i2c_dump_msgs_rw: R Sr P len=01: 00
    Failed to read register d0

    However the logic analyzer still shows the same data as the first screenshot in my first message:

    Start, write to 0x76, ACK-Slave, 0xd0, ACK-Master - and that is all, no Read, no restart, no data, and no Stop - even though these are indicated in the i2c_dump_messages data above

Children
No Data
Related