How to Interface I2C Buffers with Static Voltage Offsets? - Page 1
Forum section: electronics / projects

author: sean0118
author_rank: Frequent Contributor
timestamp: August 12, 2023, 05:56:40 am
content: I've run into a really annoying issue, I'm trying to interface the single ended side of anNXP PCA9615buffer to a power supply with PMBus...Except it seems both have static voltage offsets where the V input low (VIL) and V output low (VOL) are offset from each other to avoid the buffer from latching itself. The PCA9615 needs a VIL of <0.4V but it's VOL is 0.5V for example. TI have anapp notewith some info.I found the perfect solution with theNXP PCA9525 and the PCA9605, these buffers use a different strategy to avoid latchup and can be used to interface two static offset buffers, however.... they are obsolete and not available anymore!!!I thought I found another solution using theP82B96 with optocouplers, except the P82B96 also has a static offset (VIN <0.64V VOL ~ 0.7V) so can't be interfaced to the PCA9615...I'm starting to run out of ideas, I guess a micro controller could be used? There must be a more elegant solution though seems like it'd be a common problem?

author: moffy
author_rank: Super Contributor
timestamp: August 12, 2023, 06:56:11 am
content: I think all you might need is to insert a normal I2C buffer between the two devices that can tolerate the Vol and provide a voltage that will appear as a low voltage e.g.https://www.ti.com/lit/ds/symlink/tca9800.pdf?ts=1691823174007&ref_url=https%253A%252F%252Fwww.ti.com%252Finterface%252Fi2c%252Flevel-shifters-buffers-and-hubs%252Fproducts.htmlHope it helps.

author: sean0118
author_rank: Frequent Contributor
timestamp: August 12, 2023, 07:47:46 am
content: Quote from: moffy on August 12, 2023, 06:56:11 amThanks the TCA9800 does look promising initially because it doesn't have offsets... but I'm not sure if it will work in this case?In the datasheet section pg.12 "10.1.2.2 Buffered Translators/Level-shifters" it talks about how the B side of the buffer can't be connected to pullup resistors or "Static-voltage offset buffer outputs (B-side of the TCA9517)"."The B-side may not be connected to another translator if it uses a static-voltage offset. The RILC spec is violated since the static voltage offset adjusts the output resistance to ground to be outside of the RILC spec requirement, causing the TCA980x to be unable to recognize a low."It's amazing how many of these buffers aren't compatible with each other.

author: moffy
author_rank: Super Contributor
timestamp: August 12, 2023, 08:23:50 am
content: It was just an example of what might work, no doubt it will be necessary to sift through the various devices, that is the hard part.

author: Doctorandus_P
author_rank: Super Contributor
timestamp: August 12, 2023, 09:00:45 am
content: Do you mean that the I2C IC's do not share the same ground?How much difference is there in the ground?I have seen optocoupler based methods to split an I2C bus, but it's a bit messy and it needs two optocouplers per wire because the I2C wires are bidirectional. Once you have to mess with the I2C wires, it quickly becomes quite a nuisance because of this.Later, IC's were designed to provide galvanic isolation for I2C buses. Something like the ISO1540 is an overkill, but it should surely get the job done.https://www.ti.com/lit/ds/symlink/iso1540.pdf

author: Nominal Animal
author_rank: Super Contributor
timestamp: August 12, 2023, 12:13:40 pm
content: Quote from: Doctorandus_P on August 12, 2023, 09:00:45 amNo, they mean that PCA9615 requires input low to be pulled below 0.4V, but it itself only pulls down to 0.5V, meaning you cannot use two PCA9615 on the same I2C bus to talk to each other.Edited to add:If I understood correctly, the issue is to find an I2C level translator for which the PCA9615-facing side has VIL≥0.6V and VOL≤0.4V.sean0118, what are the voltage level requirements of the PMBus device, then?

author: sean0118
author_rank: Frequent Contributor
timestamp: August 13, 2023, 01:36:40 am
content: Quote from: Doctorandus_P on August 12, 2023, 09:00:45 amThis is different, the buffers by design have an offset between VOL and VIL.The ISO1540 is an interesting IC, it looks like its side 2 would interface to the PCA9615, but it's side 1 VOL is 570 - 800 mV, not sure if that will interface to the PSU. This is because it also uses a staic offset design:"Isolated bidirectional communication is accomplished within these devices by offsetting the low-level output voltage on side 1 to a value greater than the high-level input voltage on side 1, thus preventing an internal logic latch that otherwise would occur with standard digital isolators."Quote from: Nominal Animal on August 12, 2023, 12:13:40 pmThat's a good point, the PMBus device is aTDK TPS4000-48, only problem is I can't find any published voltage threshold values. The NXP PCA9615 can talk to it, but the acknowledge returned is too high (0.6V I think, I need to check) which makes me think it also uses an offset buffer.I'll get in touch with TDK and see if they can supply more information about thresholds etc.If only NXP still made the PCA9605, that would be a perfect solution.

author: gnuarm
author_rank: Super Contributor
timestamp: August 13, 2023, 01:57:28 am
content: Quote from: Doctorandus_P on August 12, 2023, 09:00:45 amHe is talking about the fact that the input and output low voltage limits are such that once the bus is pulled low, this device will pull low, which is seen as a low by the input on that same side, pulling the other side low. This is essentially a latch up.I've seen device that prevent this by detecting that the input is pulled low externally, disabling the output on that same pin. Once the input pull down is disabled, the other pin drive is removed and both circuits pull up. It's a bit more complex than this, but this was a long time ago and I don't recall the details. I believe it was a TI part.How do open collector voltage level translators work? Any sort of open collector drive buffers would have the same problem.QuoteThe optocoupler is used when you need isolation of grounds. Otherwise, it's just another open collector driver.QuoteSo, how do they prevent latchup?

author: Nominal Animal
author_rank: Super Contributor
timestamp: August 13, 2023, 11:01:55 am
content: PMBusis based onSMBus, and SMBus specifies two profiles, low power and high power, that have the same voltage level requirements:VIL= 0.8 V maximumVOL= 0.4 V maximumSo, we can probably assume that the TDK TPS4000-48 will accept 0.8 V input low, and output (pull down) to 0.4 V or lower, based on SMBus specs on which PMBus relies on. (As far as I understand, PMBus tops out at 400 kHz, and does not support I2C Fast Mode Plus.)If so, it seems to me TPS4000-48 and PCA9615 should be able to communicate:PCA9615 pulls down to 0.6 V or less, which suffices for TPS4000-48 as it considers anything below 0.8 V a lowTPS4000-48 pulls down to 0.4 V or less, which suffices for TPS4000-48 as it considers anything below 0.4 V a lowHave you actually verified they cannot, or are you assuming they cannot based on the datasheet information?If they actually cannot, then the properties of the I2C buffer needed for the PCA9615-facing side areVIL> 0.6 VVOL< 0.4 Vand for the TPS4000-48 facing side,VIL> 0.4 VVOL< 0.8 VI2C/SMBus/PMBus level translators typically require at least a 1V difference between the Vref's on either side (and in a specific orientation), and they cannot pull their output lower than their input. Here, the only problem possible is if the TPS4000-48 pulling SDA or SCL to 0.4 V is not low enough for the PCA9615.So, I do not believe an I2C/SMBus/PMBus level translator can help here; you need either a buffer, or an isolator (even if the ground is the same on both sides).I assume the PCA9615 is using 5V, because its datasheet indicates that is optimal for it. Figure 1 in theTPS4000 manualindicates you can choose between 5V and 3.3V PMBus logic levels by closing the topmost dip/pin pair in the address selection.If we look atTI ISO1640(3.31€ in singles at Mouser) I2C isolator, it has VIL1= 0.48 V, so side 1 should face the TPS4000. Side 2, facing PCA9615, has VIL2= 0.3×Vcc2 = 1.5 V if the PCA9615 uses 5V, 1 V if PCA9615 uses 3.3V.The output low voltage levels depend on the I2C pull-up resistors used, because side 1 can sink 0.5mA–3.5mA, and side 2 0.5mA–50mA.This means the isolator should be as close to the TPS4000 as possible, with very weak pull-up resistors between the TPS4000 and the isolator: 10k to 5V or 6.6k to 3.3V would be my starting point on both SCL and SDA, on the TPS4000 side.On the PCA9615 side, the pullups can be much stronger (lower resistance), whatever is needed to ensure the bus works well. I'd try 2.2k myself.Thus, although I'm a hobbyist myself (who likes to interface single-board Linux computers to all sorts of sensors and modules), it seems to me that either the PCA9615 works fine with the TPS4000-48 (as long as you use the same voltage level references for the bus in between), or you can fix it with an ISO1640 isolator, four pull-up resistors, and two 0.1µF supply bypass capacitors (from each Vcc to respective ground, as close to the isolator Vcc pins as possible).

author: sean0118
author_rank: Frequent Contributor
timestamp: August 14, 2023, 08:40:58 am
content: Quote from: Nominal Animal on August 13, 2023, 11:01:55 amThanks, that's a really detailed reply. I'm starting to think that either I've done something wrong or the TPS4000-48 doesn't meet the SMBus standards.Earlier I did have the TPS4000-48 and PCA9615 set to 3.3V, with 4.7k pullups on the PCA9615 output. With this configuration the TPS4000-48 was returning a low of about ~0.8V:Today I changed both to 5V and removed the pullups (the TPS4000-48 has internal pullups), it now returns a low of ~0.6V but that's still too high for the PCA9615:I'm not really sure what could be going wrong with this configuration both are next to each other in the same enclosure connected together with a 10cm wire.I've contacted TDK asking for some more information on what the TPS4000-48 input and output lows should be.

author: Nominal Animal
author_rank: Super Contributor
timestamp: August 14, 2023, 12:24:11 pm
content: Darn. I'm pretty sure any microcontroller would handle that just fine, but as the underlying PMBus (I²C) protocol involves acknowledging/nak'ing each byte, I don't see I²C forwarding feasible. Even a small 8-bit AVR like ATtiny402 could act as a serial ↔ PMBus translator, using your own protocol for the serial part, i.e. for complete commands and responses, but not as a hardware-level translator.I know nothing, but I do fear that for a true transparent I²C buffering, one would need a tiny FPGA with a state machine with e.g. BJT pulldown transistors, connected to both SCL and SDA on both sides, and use clock stretching to sniff whether the other side acknowledges each byte. The state machine is not exactly trivial, as it has to understand read and write commands and repeated starts and bus conflicts, but it shouldn't be awfully complicated. It'd have to run at several times higher frequency than the I²C bus, though, perhaps using a fixed frequency in the ten to hundred megahertz range...I wonder what would happen if you were to use a TI ISO1640 as I outlined earlier, but with a pair of antiparallel diodes between the ISO1640 and TPS4000-48 grounds, essentially lifting the TPS4000-48 facing ground by a diode drop; target being about 0.4 V or so?

author: sean0118
author_rank: Frequent Contributor
timestamp: August 31, 2023, 12:25:53 am
content: Time for an update, sorry I've been distracted.I've decided not to use the NXP PCA9615 which solves the immediate issue, but I'd still like to find a long term solution for this, it seems like needing to interface two static offset buffers would be a common issue.Anyway, I was curious so I took the lid off the TDK TPS4000-48, they are using theADM3260 I2C isolator.The ADM3260 VOL for side 1 is 600-900mV, side 2 is <400mV.Looking at the PCB layout it seems side 1 goes to the PMBUS connector... which matches what I measured with the scope. I wonder if they accidentally placed it backwards?It's not related to the PMBUS but another interesting thing I found is they have whole daughter boards with rows and rows of ceramic capacitors. I've never seen this, I guess they wanted very low ESR for filtering:

author: gnuarm
author_rank: Super Contributor
timestamp: August 31, 2023, 01:14:44 am
content: I haven't kept up with this, but I seem to recall the problem you are facing is trying to interface two I2C type busses, which operate at different high level voltages.Whenever I need to interface signals with different high voltage levels, I reach for a switch device. No logic, just a simple analog switch that allows either side to pull the voltage to ground, while the high level driven through the switch is limited by the power voltage on the switch.Each side has a pull up resistor to the appropriate high voltage level.What is wrong with this arrangement?

author: Nominal Animal
author_rank: Super Contributor
timestamp: August 31, 2023, 03:45:31 am
content: Quote from: gnuarm on August 31, 2023, 01:14:44 amNo, it's actually the opposite: how low various ICs can pull the signal, and how low they require the signal to be pulled to recognize a logic low.

author: gnuarm
author_rank: Super Contributor
timestamp: August 31, 2023, 06:40:37 am
content: Quote from: Nominal Animal on August 31, 2023, 03:45:31 amAre you saying one device will not pull low enough for the other side to see the low? I believe that was something in your intermediate part, not in the two I2C devices.Just try this. Consider what happens if you connect the two busses directly together, without an intermediate buffer of any sort. Assume there is "magic" involved that prevents the lower voltage side from being pulled above the specified pullup voltage, and that no part will be harmed by anything going on. Will each device pull the signal low enough that the other device sees it as a low?

author: Nominal Animal
author_rank: Super Contributor
timestamp: August 31, 2023, 06:52:31 am
content: Quote from: gnuarm on August 31, 2023, 06:40:37 amYes. That, and exactly why that happens to be the case, is described in the posts above. I'm not going to rehash them for you just because you're too lazy to read the posts.

author: gnuarm
author_rank: Super Contributor
timestamp: August 31, 2023, 10:26:20 am
content: Quote from: Nominal Animal on August 31, 2023, 06:52:31 amI have read many of the other posts. But they were about using abufferdevice between the two busses. I can only assume that you don't understand what I am talking about. That's not uncommon. Many people are not familiar with using switches rather than buffers. If you try a bit harder, you can read what I wrote and understand it.If you actually have two I2C devices that are not interoperable because of incompatible low voltage drive levels, something is wrong with one of the parts. The I2C spec should have details on these levels. It's typically not a problem because a low voltage on the drive is easy to accomplish.

author: Nominal Animal
author_rank: Super Contributor
timestamp: August 31, 2023, 11:10:08 am
content: Your gut feelings and internal beliefsobviouslyoverrides datasheets and PMBus and SMBus standards. Sure.

author: gnuarm
author_rank: Super Contributor
timestamp: August 31, 2023, 11:47:09 am
content: Quote from: Nominal Animal on August 31, 2023, 11:10:08 amDo you have any facts to share, or is it all just snark?

author: sean0118
author_rank: Frequent Contributor
timestamp: September 04, 2023, 01:04:39 am
content: Quote from: gnuarm on August 31, 2023, 10:26:20 amRead the app note that I linked in the second line of the first post.

author: gnuarm
author_rank: Super Contributor
timestamp: September 04, 2023, 03:14:04 am
content: Quote from: sean0118 on September 04, 2023, 01:04:39 amThat app note is about using a buffer device, which is what I have clearly said I am not discussing. As I said, you don't seem to understand what I am talking about regarding a switch device.Also, you clearly do not understand Vil and Vol, or maybe specifications in general. There is nothing about these two values that guarantees the prevention of latchup. Vol is thehighestlevel the output will drive low. Vil is the highest level the input is guaranteed to be seen as a low. There is nothing to prevent the output driven level from being lower than Vil, or from a voltage on the line that is higher than Vil from being seen as a low.I don't know what problem you are really trying to solve, so maybe it's better if I give up trying to help.

author: sean0118
author_rank: Frequent Contributor
timestamp: September 07, 2023, 02:51:28 am
content: Quote from: gnuarm on September 04, 2023, 03:14:04 amYou mentioned using the switch to interface two devices operating with different high level voltages which is not the issue here:Quote from: gnuarm on August 31, 2023, 01:14:44 am??

author: PCB.Wiz
author_rank: Super Contributor
timestamp: September 07, 2023, 04:12:28 am
content: Quote from: sean0118 on August 12, 2023, 05:56:40 amAre you forced to use these 'too-clever' buffers at each end ?It seems you can still buy PCA9525 & PCA9605 from 2nd tier sellers ?Failing that, did you try current-mode buffers like P82B715 ?It seems 1 or even 2 back to back, can use load resistor values to nudge the VOL in the directions you need ?

author: sean0118
author_rank: Frequent Contributor
timestamp: September 07, 2023, 07:19:05 am
content: Quote from: PCB.Wiz on September 07, 2023, 04:12:28 amI was hoping to use the PCA9615 because I already have an existing design which uses it, but the VOL-VIL static offset was making it too difficult to implement. I'm driving the PSU directly now which is working, it's not the design I had in mind originally but it's okay. Everything is close together so don't really need the differential I2C anyway.The second tier PCA9525 & PCA9605 sellers were tempting, but didn't really want to design in an obsolete part.Quote from: PCB.Wiz on September 07, 2023, 04:12:28 amInteresting thanks, haven't seen that one, is that back to back with the Sx or Lx sides connected together? Won't the voltages either side of the current sense resistor be roughly the same because Isx is small? Maybe I'm thinking about this the wrong way though.

author: Corryl
author_rank: Newbie
timestamp: March 19, 2024, 05:02:52 am
content: I know no one likes post resurrecting, but this is still the number one hit for even tangentially related search terms! So, since I’m using the 9616 (9615 with an interrupt line) and iso1640/iso1644s I figured I’d report that yes, the “output” i2c bus from a 9615/16 connected to side 2 of an iso1640/iso1644 does produce a nearly 0 voltage for Vol on side 1, just remember side one is “weak” with a max bus capacitance of 80pf which shouldn’t be a problem after the 9615, unless you’re just using it to traverse a long/noisy distance then have many devices on the other side. Depending on your application, you may be able to buffer that with a lower static offset buffer (the 9615 is on the high end). Otherwise, the 9646 is the last remaining part from the 0 offset buffer product line…and it comes with a multiplexer… $6.62 in qty 10 from DigiKey. Ouch. Only a little more expensive than the iso1644.If anyone has any other parts that kill static voltage offsets on i2c I’d love to hear about them…and so would anyone else searching for very similar terms!