Jetson Nano as I2C Slave

Hi,

I have a device that I would like as master and will send i2c data so the Nano can do certain functions. How can I configure the device to run as a slave and act upon i2c triggers or to something of that nature? I saw some old stuff on TK1 but I’m not sure how any of that translates to the Nano.

Hi @kayccc,

I know you just edited the question to add the i2c tag, but do you think you could bring someone into this conversation. I’m not sure how to approach making the device a slave. I know it’s possible because in the documentation, under 4.7.1 it says that slave mode is supported. I’m also just not very well versed in I2C and am not sure how this is typically approached. Any help would be appreciated.

Hi warpstar22,

We’re confirming with our internal team, please say tuned. Thanks

1 Like

Hi warpstar22,
Yes, you can use Nano I2C as slave.

  1. Enable these configs:
    CONFIG_I2C_TEGRA_SLAVE=y
    CONFIG_I2C_SLAVE_EEPROM=y
    Where, CONFIG_I2C_TEGRA_SLAVE enables I2C slave controller driver compilation
    and CONFIG_I2C_SLAVE_EEPROM enables simulated EEPROM slave device at I2C address
    0x64.
  2. Modify kernel device-tree I2c master node like this:
    i2c@3160000 { //Here use i2c controller which you want to make it slave.
    compatible = “nvidia,tegra210-i2c-slave”;
    eeprom@64 {
    reg = <0x64>;
    compatible=“slave-24c02”;
    status = “okay”;
    };
    }
    You can see 0x64 device under the I2c bus where you have added the slave.
    Let me know if you are stuck or need any more info.

Thanks,
Shubhi

Hi @shgarg ,

Thank you for your answer but I have a few questions below. Alternatively, if you could point me to a good resource on how to do this and what may be specific to the Nano that would be great too. I’m struggling to understand where these files should go and how I am supposed to modify the kernel for these options. It looks like everyone else on the forums has modified the device tree before.

In what file, do I need to add this to?

For the second step, I’m not sure where I’m supposed to add that either. Are there steps on how to add this for the Nano?

I’m not sure what ‘i2c@3160000’ means or is referring to. The names that I am seeing are like 7000c400.i2c for bus 1.

After doing all this, can I use something like libi2c the same?

1 Like

Have a check below document for building customize kernel.
https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fkernel_custom.html%23

Below are the i2c aliases for nano

            i2c0 = "/i2c@7000c000";
            i2c1 = "/i2c@7000c400";
            i2c2 = "/i2c@7000c500";
            i2c3 = "/i2c@7000c700";
            i2c4 = "/i2c@7000d000";
            i2c5 = "/i2c@7000d100";
            i2c6 = "/host1x/i2c@546c0000";
2 Likes

Hi,

Did you get or do you have any working solution for i2c slave usage?

Thanks
labi

Sorry @labi, while waiting for a response for this question, we came up with a way to switch the master slave relationship. Since that worked out well, I didn’t explore this option anymore. I think everything should be here though.