Our system uses an iMX6 Solo on an Iris carrier board, and we have been using the existing I2C bus off of Iris connector X16 (pins 5 & 6) successfully.
Circumstances require the use of a 2nd I2C bus, which is available on connector X16 (pins 8 & 11) with some re-configuration. The problem is that I cannot get this to work and I’m at my wits end. We are experimenting with the GPIO tool, and it seems pretty clear what I should do, however I must be missing something fundamental.
The GPIO tool shows this for the default I2C configuration:
- GPIO3, AltFn name = i2c.I2C3_SCL, SODIMM # = 196
- GPIO 6, AltFn name = i2c.I2C3_SDA, SODIMM # = 194
Section 3.9.3 of the iMX6 data sheet shows that SODIMM pins 194 and 196 are mapped to X16 pins 5 and 6 respectively, which we have been using successfully.
In my C# I2C test program, this all works as long as I open “I2C1” (not “I2C3”). I found that puzzling because it’s actually I2C3 according to the GPIO tool, but it works so I’m Ok with it.
Now, to use a 2nd I2C bus, the GPIO tools permits us this capability:
- GPIO 85, AltFn name = i2c.I2C1_SCL, SODIMM # = 88
- GPIO 92, AltFn name = i2c.I2C1_SDA, SODIMM # = 92
Section 3.9.3 of the iMX6 data sheet shows that SODIMM pins 88 and 92 are mapped to X16 pins 8 and 11 respectively.
So after changing the X16 connections, I finally determine that to use I2C1 (from the GPIO tool) my test code has to open “I2C3”. Somewhere the I2C1 and IcC3 wires get crossed, but that’s not an issue once you understand it.
Anyway, my test code does not work with the I2C re-configured as described. I ‘m using external 2.2K pullups, by the way. A ‘scope shows that an I2C read causes both SCL and SDA to go low for about ¼ second, but there is no evidence of a recognizable I2C signal.
Once this is all working we will be using the Toradex libraries to configure the 2nd I2C bus, but for now it would be nice to see it working as configured.
Any thoughts on what I might be missing?