I2C Due Pull up resistor fix

Based on prior posts on I2C Due problems I felt I should post my experience.

Using Due default I2C w/ built in pull up resistors to Max521 D/A.
1.) Wrote code from scratch: Fail
2.) Used Max521 Library: Fail
3.) Swapped to Mega2560 recompiled both of the prior examples and they worked right off.
4. Clipped both I2C built in pull up resistors off due board (marked 102), Substituted external 10K resistors to 3.3v. both prior examples worked right off.

FYI: Max521 powered by 5v, Ref pins on Max521 also 5v, No level converters on I2C lines

Mark K3FY

As far as I can see the Due pin protection diodes are not characterised
in the datasheet, so its not clear what values of 5V pullup resistor are safe.

I presume you meant pull-up to 5V on the MAX521 board, not 3.3?

Another way that would avoid damaging the Due is to put 1N4148 or
equivalent diodes in line with both SDA and SCL, cathode to the Due,
anodes to the MAX521 (which also has pull ups). You should get over
4V then and reduce the current through the Due protection diodes.

I connected the external 10K resistors to 3.3V on the Due. I powered the Max521 with 5V and used 5V as Ref in the Max521. All voltages were pulled from the Due. It was unclear to me that the Max521 has pullups. The terminology on the data sheet mentions that the Max521 does not need pullups although it does state that it is compatible with external pullups if the are needed by an I2C connected device. Thanks for the tip on the diodes. That use was beyond my knowledge.

Mark K3FY

I see that the Due reference schematic has the I2C pullups as 1.5k, which is rather a low value. 4k7 is often quoted
as a good general value for the pullups. However the Due may be optimised for high speed I2C or something.

The pull-up resistors mounted on the DUE's pcb are actually 1000 ohms, not the 1.5k shown on the schematic (at least they are 1k on my DUE's).

In any case, both values are unnecessarily low, undoubtedly causing many DUE boards to be needlessly cooked. This can happen simply by attaching an external I2C bus (that may have additional pull-ups installed).

I recommend that the on-board pull-ups be removed (there are no side-effects), and use your own external pull-ups.

For one of the better run-throughs on how to size I2C pull-ups see:

What K3FY is doing is fine (pulling up the I2C lines to 3.3v). It will work as long as the threshold voltages for valid 0's and 1's on his Max board work around the 3 volt range (one would need to read the specs of the MAX board interface to be sure).

The I2C bus is an open-collector bus. So, the end-user is responsible for deciding what voltage to pull the bus up to, and what values to set the pull-up resistors. Often times this is a tradeoff between threshold voltages, bus capacitance, clock speed, and power consumption.

Regards,

-Chris