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.

TCA9548A Not getting good ACK signal

Other Parts Discussed in Thread: TCA9548A

I'm working on trying to interface the TCA9548A Switch to several I2C Slave proximity Sensors(Vishay VCNL4040).  I'm using a Freescale Kenitis MCU as the master controller. I'm able to talk to the TCA9548A and select a channel. It's when I attempt to address the down stream I2C sensor that I run into issues. From what I can see, the down stream I2C sensor does not issue an ACK. Looking at the SCL and SDA lines with a scope it appears that the down stream I2C sensor attempts to pull the SDA line low but it can't, it only drops about a half a volt during the ACK clock pulse.

Any ideas will be appreciated.

VCC is 3.3 and common to the MCU, TCA9548A and proximity Sensors(Vishay VCNL4040).

Pull up resistor values in both main bus and down stream bus where initially 2K for both SCL and SDA. We were suspicious of these values and changed the SDA pullups to 5.3K with no success.

Thanks,

  • Hello Carlos,

    Thanks for the post.

    Your first suspicion of pull-up resistors is my first thought as well, but if you have changed the values with no luck, then it would appear to be something else.

    Just to verify, are these waveforms with only 1 channel connected on the switch at a time?

    Also, is the scope shot on the master side of the bus, or on the sensor side of the bus (down stream to the switch)?
  • Hello Jonathan,
    Yes, its accessing only one channel at a time and yes, scope is connected to the master side. Current pull up values on SDA lines are 5.3K at both master and slave sides. Current pull up on SCL lines are 2K at both master and slaves.

    Carlos
  • Hello Carlos,

    Is there a reason you have the pull-up resistors miss-matched between the SDA and SCL lines? I would recommend increasing the SCL pull-ups to the same 5.3k. I don't believe this is the cause of your issue, but it is good practice to make the RC time constant the same on both the SCL and SDA bus (to help prevent any possible data corruption as a result of an offset).

    Does this behavior stick to 1 channel, or does it happen on any channel you are connected to?

    Also, I notice that you appear to have fairly high inductance on your lines (large over shoots and undershoots on the transitions).

    Have you tried shorting one of the channels directly to the master, and to bypass the switch? I would like to see the result of such a test, because internally, the I2C switch only closes a FET-based switch between the slave and the master channel, and does not have any internal pull-ups or buffered channels.
  • Hi Jonathan,

    Initially both the SDA and SCL lines where 2k. We were experimenting with other pullup values for the SDA line because of our ACK issue and we left it at 5.3K. Yes, I agree we will make them the same at 5.3K

    All channels exhibit the same behavior. 

    As far as the overshoot, It might be a scope setup issue. I will ensure a good setup next time. 

    We will try your suggestion of bypassing the switch all together and providing scope shot.

    Thanks again,

    Carlos

  • Jonathan,
    We did further debugging and found that it was a peripheral setup issue. Pins were not setup for Open Drain operation. Once we changed it, everything started to work correctly.

    Thanks for your help,
    Carlos
  • Great news,

    Thank you for updating me.

    Please feel free to post again you require any help.