I2C on Shield Shield

I am integrating my Core with NightShade’s EnergyShield. The EnergyShield is basically an arduino style piggy back board that has a small LiPo and a fuels guage. When I use the Core and the EnergyShield without the SHield Shield, I have great success. I hook up the I2C plus a GND and it works great. Now I have a Shield Shield so I can put it all together in a nice connected bundle. The problem is getting I2C to work in this fashion. The Shield Shield moves Core D0 and D1 to Shield Shield’s D3 and D5 respectively. The Shield Shield also uses a bi-directional logic level shifter to make them 5V IO. So, I assume the I2C is now running at 5V on the Shield Shield’s D3 and D5. In this configuration, I am having no joy making the two devices communicate. I know there are varying schools of thought on if I2C can tolerate the 3.3v vs 5v difference… it does not appear to in this case. I went so far as to wire up a bi-direciton logic level converter to bridge the 3.3/5 gap. No luck.

I am also noticing that while the Core is running and breathing Cyan, it will periodically give about 10 rapid flashes followed by 5 very rapid flashed. Anybody know what this means?

All thoughts welcome.

Thanks!

I think I2C on the shield shield has some issues based on past forum post.

Let’s try to confirm this.

@bko, @peekay123 and @BDub,

Based on the datasheet:

The TXB0108 is designed to drive capacitive loads of up to 70 pF. The output drivers of the TXB0108 have low dc drive strength. If pullup or pulldown resistors are connected externally to the data I/Os, their values must be kept higher than 50 kΩ to ensure that they do not contend with the output drivers of the TXB0108. 

For the same reason, the TXB0108 should not be used in applications such as I2C or 1-Wire where an open-drain driver is connected on the bidirectional data I/O. For these applications, use a device from the TI TXS01xx series of level translators.  

I don’t understand fully what this implies so maybe you guys can give some inputs :wink:

@kennethlimcp Thanks for the reply… Your snippet form the datasheet is restoring my sanity. Awaiting input from a few others.

Maybe @mohit can add some insight here. I know that others have had problems with i2c and the shield-shield.

Since D0 and D1 are 5V tolerant, maybe you just don’t need the shield-shield?

Regarding the periodic cyan quick flashing–I believe that is the core closing and reopening the cloud connection due to some problem. It can happen to anybody due to a router problem or other internet trouble, but more likely your program is right on the edge of the cloud connection timing out.

Thank @bko, I didn’t see the i2c threads before but now I am
finding them. The Shield Shield was a ‘nice to have’ because of the
form factor of the EnergyShield. Since everything works fine without
it, I am not worried and will put the Shield Shield away until I need it
for the next project.

Thanks for the info on the flashing as well

1 Like

(note, just wrote all of this after reading only Kenneth’s post… then I read the OP’s post… sorry for some duplication of data)

This tidbit in the datasheet is definitely worth noting. I’ve also seen lots of applications where the pins will oscillate at 50MHz with long wires coming from the Shield Shield over to a breadboard. So don’t do that, or if you do… make sure you have an oscilloscope and are looking for this issue to not be there.

What I remembered about I2C on the Shield Shield is that it wasn’t mapped to the right pins. So if you plop down an Arduino Shield that has I2C on A4 and A5, it’s not going to work simply because there’s no I2C there. In fact, A3, A4, A5 have no connection.

I2C has been mapped from D0, D1 to D3, D5 respectively on the “Arduino” pins. So you could make jumpers from D3 to A4 (SDA) and D5 to A5 (SCL)… however remember jumpers are bad, mkay! So… I don’t have high hopes it will work.

2 Likes