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.

PCA9548A: RBL CC3200 wifi micro: no communication

Part Number: PCA9548A
Other Parts Discussed in Thread: ENERGIA, CC3200, , TCA9548A

I am trying to connect a PCA9548A to my RedBearLabs CC3200 wif-fi micro in order to multiplex MPU6050s. I am using Energia to program the mcu.

The MUX does not seem to be working,i.e., there is no communication happening. I have tried using pull-up resistors of values 1k, 2.2k, 4.7k, 8.2k, 10k and even used a pot to adjust the pull up value. The exact same circuit works fine with an Arduino Uno R3. 

When I tried connecting an MPU6050 to the CC3200 directly without the MUX, it worked fine. There seems to be a problem with the connection between the CC3200 and the PCA9548. My circuit looks something like the one given below.

Is there a compatibility issue? What should I do in order to make it work?

  • Hello Harish,

    What I2C communication are you sending to the PCA9548A?  Can you send waveforms of the transactions to the PCA9548A prior to trying to communicate to MPU6050 devices.    Make sure you are sending a stop command after you send the data to the PCA9548A.

    I have seen people immediately send a command to the slave devices on the other channels before the device's channel is actually set.  Let me know if this is the problem.  I will be able to see if you send me the I2C transactions from a scope shot of SCL/SDA.

    -Francis Houde

  • Also, are you aware that we have a TCA9548A? It is a more robust solution because if addresses the errata's in PCA devices.
  • Hello Francis!

    Thank you for replying. 

    Since I am using Energia IDE with Wire library that comes with it, I suppose it takes care of setting up, sending/receiving data and terminating communication between an I2C master and a slave. 

    Below is the function that I am using to select a mux channel, where i is the channel number.

    void tcaselect(uint8_t i) //select MUX line

    if (i > 7) return;
    Wire.beginTransmission(TCAADDR);  //TCAADDR=0x70
    Wire.write(1 << i);
    Wire.endTransmission(false);
    }

    I have also set a delay of 10ms after sending the channel select command to the mux, so that the channel is actually selected before I send any I2C messages through it.

    Below are the scope views of the signals at SDA and SCL pins of the microcontroller. These signals are repetitive and I don't know what they mean. 

    1) SDA

    Voltage Scale: 1 unit = 1V

    Time Scale: 1 unit = 25us

    2) SCL

    Voltage Scale: 1unit = 1V

    Time Scale: 1unit = 25us

    Lastly, I have tried with a TCA9548A as well and I had the same problem. 

  • Hello Harish, Can you have two channels on at the same time (one for SCL and one for SDA) so that I can decode the transmission? The resolution doesn't look all that good, so maybe you could increase the resolution so I can see the quality of the signal or maybe you can do one screen shoot that captures the data and one that shows a close-up. It looks like the pull-ups might not quite be strong enough. Hard to tell. You can measure the rise times of the edges to make sure that they meet I2C standards.
    Francis Houde

  • Hello Francis!

    I'm sorry for the bad resolution in the previous pictures. Here is what you asked for.

    Yes, it does look as though the pull ups are not strong enough. I have used 2.2k pull up resistors, but even with higher pull up resistors it fails to work.

    Harish Jayanth V

  • Hello Harish,

    Your clock looks messed up.  You have one clock pulse that looks like it doesn't have the correct timing and voltage level.  Have you tried changing the frequency to something much slower to see if it does communicate and not exhibit the cut-off clock signal.

    -Francis Houde