This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TCA9800: I2C buffering

Part Number: TCA9800
Other Parts Discussed in Thread: ISO1541, , TCA9517, PCA9306, ISO1450, P82B96, ISO1640, TCA9517A

I have a design that requires isolated power supply to two sections (let's call them section A and section B). We have I2C running from section A to section B, which I would think needs to be buffered. The TCA980x family was recommended, so I was thinking I would power Vcca = section A's 3.3V, and Vccb = section B's 3.3V, and GND = ground B.

i2c buffer v2.pdf

I need some help with how to select which TCA980x device to use, as well as how to size the pull-ups.

The I2C bus is running at a 400kHz frequency, and we only have one device on it (i.e., one master controlling one slave), so following the estimation of 15pF bus capacitance per device and looking at the limits for each device, is it correct that any of the TCA980x devices should suffice, regardless of the rise time? I ask because I'm not entirely sure how to determine what the rise time is. The FPGA documentation doesn't spec a rise time (I'm also not very familiar with FPGAs so I don't know if that's something that's usually specified or not). 

Since the pull-up resistance is also calculated based on rise time, is it best to size the pull-ups assuming a really fast rise-time so that I don't accidentally exceed Rpmax for whatever the rise time actually is?

Additionally, there are pull-ups between the FPGAs and bus switches. Are the existing 10k pull-ups sufficient or do pull-ups to the 3.3V supplies need to be added prior to the TCA980x buffer?

Thanks for your help.

  • It is possible that the TCA980x's B side does not work with the level translator. And there must not be any pull-ups on the B side.

    Anyway, it's possible that the translators/bus switches make an additional buffer unnecessary. What devices are you using?

  • Hi Clemens,

    Both section A and B use the 74CBTLVD3245PW for the bus switch.

  • The TCA980x must not have pull-ups on the B side, but the bus requires some pull-up when it is disconnected. The TCA980x would not be a good idea.

    What is the purpose of the TCA980x on the electrical level? If the two supplies are nearly the same, there should be no problem.

    Why are there two bus switches? You should need only one to disconnect the two boards.

  • The bus switches are designed on COTS boards for the FPGAs so they're already part of the design. 

    I really just need to keep the power rails isolated between section A and section B, so my intuition was that I'd need to buffer the signals going between the two circuits as well, which led me on a search for i2c buffers.

    I did just discover i2c isolators for the first time, so is that the terminology for the kinds of parts that I should be looking for instead? I'm new to this kind of design so I'm not very familiar with the terminology yet. On my initial search I came across the ISO1541, which seems like it'll achieve what I want.

  • Hi Gillian,

    What is the main purpose you chose the TCA980x for since you are not in need of level translating since Power A = Power B and you are not near the 400pF parasitic capacitance limit of I2C? Are you need of a hot-swappable buffer? Will Section A and Section B be disconnecting during I2C communication that could cause the I2C bus to lock up (I see that the GNDA and GNDB are eventually connected together).

    I need some help with how to select which TCA980x device to use, as well as how to size the pull-ups.

    As you already know, the TCA980x are all the same device, but with different levels of ICS current source. 

    Depending on how heavily loaded the B-side is may determine the version of the device you decide to implement. However, in the block diagram you provided, it looks like 10kohm resistors are present on the B-side which is not allowed on the TCA980x in order for the device to work properly. TCA980x requires no external sources of current to be present on the B-side. The benefit to using this device is that while it level translates and buffers, it also does not require pull-up resistors on the B-side which saves cost and space. It also buffers without static voltage offset (SVO) and can push VOL lower than most buffers around 0.22V typical (TCA9800). 

    The bus switch you are using is an NXP device that looks to be passive internally. When the switch is ON, the only component separating side A of the bus switch and side B is a simply FET resistance RDS_ON. This means that the TCA980x will see the external current from the 10k pull-up to supply B. 

    To suggest a different buffer that can include the pull-up resistors in the block diagram you provided, I suggest looking into the TCA9517. Please ensure to follow the specifications for VILC on this device to make sure it works properly. 

    I need some help with how to select which TCA980x device to use, as well as how to size the pull-ups.

    The I2C bus is running at a 400kHz frequency, and we only have one device on it (i.e., one master controlling one slave), so following the estimation of 15pF bus capacitance per device and looking at the limits for each device, is it correct that any of the TCA980x devices should suffice, regardless of the rise time? I ask because I'm not entirely sure how to determine what the rise time is. The FPGA documentation doesn't spec a rise time (I'm also not very familiar with FPGAs so I don't know if that's something that's usually specified or not). 

    It seems in your application that parasitic bus capacitance will not be a problem. I doubt that your design will go over the 400pF limit, unless you are attempting to communicate along a very long trace. Rise-time is directly affected by the amount of bus capacitance that is present as well as the pull-up resistor in use. If you know your parasitic cap is well <400pF, then rise-time should not be an issue. 

    Since the pull-up resistance is also calculated based on rise time, is it best to size the pull-ups assuming a really fast rise-time so that I don't accidentally exceed Rpmax for whatever the rise time actually is?

    We have a really good application note that I have linked here that describes how to calculate pull-up resistance for an I2C solution. 

    Additionally, there are pull-ups between the FPGAs and bus switches. Are the existing 10k pull-ups sufficient or do pull-ups to the 3.3V supplies need to be added prior to the TCA980x buffer?

    I think we discussed this a little already, but TCA980x cannot have pull-up resistors present on the B-side. In general, the 10kohm pull-ups would work just fine in your system considering the little amount of parasitic bus cap. 

    Please let me know if you have any more questions. 

    Regards,

    Tyler

  • Hi Tyler, first of all, thanks for the really thorough response. 

    I really only looked at the TCA980x family because a tech support specialist recommended it. I was originally asking whether a PCA9306 would provide the buffering that I need, and was told that it wouldn't and that I should look at TCA980x.

    I believe Section A and B shouldn't be getting disconnected during operation.

    The core goal of what I'm looking for is to make sure that the I2C signals will communicate properly given the power supply isolation requirement. Since power is supposed to be isolated, I believe I also want to make sure that signals going between A and B should also be isolated/buffered (not sure if I have the terminology correct here). I know that technically since the grounds are tied together, they aren't completely isolated, so the goal is to separate them as much as possible other than where the grounds need to tie together.

    All this is to say that I don't have any particular attachment to using a TCA980x, so I'm happy to throw out that idea and use something else.

    I think that the block diagram I provided is actually incorrect. I'm suspecting that the bus switches aren't translating up to 3.3V; the switches and FPGA are generating 1.8V signals, with the switches apparently just there to enable the I2C signals. I'll need to double-check whether that's the case or not.

    Assuming that the signals that I have to work with are 1.8V, an older design we have used the PCA9306 I2C level translator between A's switch and B's switch (this was before the power isolation was required). Since that worked, I was thinking of chaining a PCA9306 to translate from 1.8V to 3.3V, then a digital isolator (I've been looking at the MAX14850 since I have some other digital signals to buffer, and I glanced at the ISO1450, but again, no particular attachment if you have a recommendation for something else), then another PCA9306 to translate from 3.3V to 1.8V. Does this sound like it'll work?

    Looking at the TCA9517, it looks like I'd have to use 3 of them (1.8V <-> 3.3V <-> 3.3V <->1.8V) since I can't connect the B-sides together, right? If so, I think it'll come down to which option saves me more space since my board is getting crowded.

    Thanks again for your help.

  • Galvanic isolation does not make sense if the grounds are the same. And it is still not clear what kind of isolation you need. What is the actual problem that you are trying to prevent with isolation?

    I²C uses open-drain signals, i.e., current flows only for low-level signals. So it is not necessary to completely buffer the signals. To keep the high-level voltages separated, a passive switch like the PCA9306 would suffice.

  • Hi Tyler, I talked to some engineers here about how to describe what I'm trying to do. The aim is to control the return currents, and therefore I was told to use isolators to keep the grounds separate all the way up until they get tied together. 

    As I mentioned in my last response, I realized that the I2C signals I'm working with are going to be 1.8V, not 3.3V. I looked at the available I2C isolators, and didn't see any that would work for 1.8V signals, but I may have missed it. I'm hoping I'll be able to save space without needing to add a level translator. Are there any I2C isolators that would work, or maybe any bidirectional standard digital isolators that might work at 1.8V?

    Should I ask a new question on the Isolation forum instead?

  • With 2× P82B96, you could use a higer voltage and a plain 2+2 isolator in the middle.

    (And I suspect you could then just leave out the isolator.)

  • Hi Gillian,

    Buffering is mainly for re-driving a highly loaded bus in order to drive I2C signals where the parasitic bus capacitance reaches near the 400pF limit. I2C busses with this amount of parasitic capacitance tend to run into rise-time issues especially at faster data rates, and need to be re-driven, thus implementing a buffer/repeater solution. 

    Your response here makes it seem like you are desiring some type of electrical isolation (isolating GND A and GND B). 

    Our team supports transceiver devices such as I2C switches/muxes/IO expanders/buffers etc. I will move this thread to the isolation team to see if they have an I2C solution for your needs. 

    Regards,

    Tyler

  • Hi Gillian,

    Based on the block diagram you have shared, I see that the grounds GNDA and GNDB are tied together and are not isolated. If they are isolated, then there won't be any isolation between the two sections. Using an I2C isolator like ISO1640 will achieve isolation only when GNDA and GNDB are electrically not connected. Otherwise, ISO1640 will work just like an I2C buffer.

    Let us know if your application needs isolation in which case you can use ISO1640 and keep GNDA and GNDB separate. If isolation is not a requirement, then you can I2C buffers instead. Thanks.


    Regards,
    Koteshwar Rao

  • Hi Koteshwar, agreed on the grounds not being fully isolated. However, we're controlling return currents in section A and B, and want to keep the grounds separated as much as possible. Understood on the buffer vs. isolator distinction, so let's just assume that an isolator is actually what I want, and GNDA and GNDB aren't tied together.

    I'm pretty sure the I2C is 1.8V, not 3.3V though, which is why I was wondering if TI has an isolator that will work at 1.8V as all of the ones I've seen are 3.3V or higher, but I wanted to check in case I missed one that would work perfectly. 

    Otherwise, will two PCA9306 to translate 1.8V to 3.3V work with the ISO1640?

  • Hi Gillian,

    Thanks for your inputs and update.

    In that case, yes ISO1640 can be used for I2C isolation. Unfortunately, we do not have I2C isolation that supports 1.8V operation and the best device we recommend is ISO1640.

    Otherwise, will two PCA9306 to translate 1.8V to 3.3V work with the ISO1640?

    Yes, two PCA9306 devices can be used with ISO1640 to translate voltages between 1.8V and 3.3V. Please note that the I/O logic thresholds of Side1 of ISO1640 are a little different than standard TLL / CMOS thresholds, hence, make sure the MCU I/Os are compatible to these thresholds. If they are not compatible, then you could use other translators like TCA9517A and TCA9800.

    Please let me know if you have any further questions, thanks.


    Regards,
    Koteshwar Rao