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: Ask for datasheet contents of I2C expander IC

Part Number: PCA9548A

1. How can I create the waveform when the data byte and data sequence is different that I enable multi-channel with command byte?

2. Support Hot insertion? What is the meaning or application of these sentence?

  • Hey Huang,

    I do not understand your first question. Are you asking how to enable a channel on PCA9548A?

    "Support Hot insertion? What is the meaning or application of these sentence?"
    This means you can plug in an I2C device on a live I2C line as long as the channel you plug into on the PCA9548A is disabled.

    Thanks,
    -Bobby
  • Hi Bobby,

    I mean that I set the register to enable multi-channel. When I execute the read cmd, the waveform will generate the slave address, R/W cmd=0, control byte, slave address, R/W cmd=1, and then receive the data, right? At this time, I will receive the sequence of data from SD0, SD1, etc, if eight channel enable? In addition, if the fan out channels connect to different device which has different data byte, what the behavior or waveform will be formed?
    Thanks~

    Best Regards,
    Jimmy
  • Hey Jimmy,

    So I am assuming you want to read which channels are enabled of the PCA9548A. This is done by sending the slave address +read, then the slave (PCA9548A) will send data to the master on which channels are enabled.

    What you mentioned below works for slave devices with multiple control registers, you should not do this with our device if you want to read directly from it's control register.

    " When I execute the read cmd, the waveform will generate the slave address, R/W cmd=0 (this is a write), control byte (if you are talking to a slave with multiple control registers then what you are doing now is setting a pointer),[here you need to perform a stop and then start condition or a restart condition] slave address, R/W cmd=1 (this time you are reading after addressing a pointer), and then receive the data (fir a device with multiple control registers this is correct), right? "
    I left comments in parenthesis above. This is correct if you are talking to a device with multiple registers. Our device only has one control registers so you will not do this. You would simply send the slave address and then a read bit, the PCA9548A would send you data after that.

    Does this make sense?

    Thanks,
    -Bobby
  • Hi Bobby,

    Thanks for ur explanation clearly.
    I am sorry that I think the wrong application with it.
    Btw, may I ask a question about "how can I allow voltage-level between 1.8V, 2.5V, 3.3V, and 5.5V bus"
    For example, I wanna SD0, SD2 output voltage=1.8V, SD2,SD4 output voltage=3.3V, and SD3,SD6 output voltage=2.5V.
    What is the external pull up resistor needed for each channel? At this time, I should supply Vcc=?

    Thanks,
    Jimmy
  • Hey Jimmy,

    "may I ask a question about "how can I allow voltage-level between 1.8V, 2.5V, 3.3V, and 5.5V bus""
    So in your case, the lowest voltage on your I2C bus is 1.8V. The easiest way to this to work is to make PCA9548A's Vcc 1.8V.

    "What is the external pull up resistor needed for each channel? At this time, I should supply Vcc=?"
    The external pull up resistors for each bus will depend on the I2C max frequency you plan to support and the bus capacitance.
    This app note discusses this in detail:

    www.ti.com/.../slva689.pdf

    For example, lets say channel 2 needs to support 400kHz and has 40pF of capacitance from the device I/O pins and the traces of the PCB.
    The maximum pull up resistor you could use can be calculated as : Rp(max) = 300ns/(0.8473*Cbus)
    If you plan to only support 100kHz then switch the 300ns with 1000ns.

    300ns/(0.8473*40pF)=8.8k ohms

    This means you should pick a pull up resistor less than 8.8k.

    lets do another example where you want to support only 100kHz and have 200pF of capacitance.

    1000ns/(0.8473*200pF)=5.9k ohms

    This means you need to pick a pull up resistor less than 5.9k.

    Thanks,
    -Bobby
  • Hi Bobby,

    "" When I execute the read cmd, the waveform will generate the slave address, R/W cmd=0 (this is a write), control byte (if you are talking to a slave with multiple control registers then what you are doing now is setting a pointer),[here you need to perform a stop and then start condition or a restart condition] slave address, R/W cmd=1 (this time you are reading after addressing a pointer), and then receive the data (fir a device with multiple control registers this is correct), right? "
    I left comments in parenthesis above. This is correct if you are talking to a device with multiple registers. Our device only has one control registers so you will not do this. You would simply send the slave address and then a read bit, the PCA9548A would send you data after that."

    How can PCA9548A get the data from master access to the device ?
    According to the above description, I wanna check again to confirm my understanding is correct, cuz this is exchanged data between master and PCA9548A. For example, I enable all the channels. Channel 0 of PCA9548A connect to Fiber module 0. Channel 1 of PCA9548A connect to Fiber module 1. When I wanna get the data of fiber module 0 with register 0x5, fiber module 1 with register 0x3, the waveform which we needed to perform?
    Did the waveform be performed from master to DUT as the following description, right?
    start + slave address+Write+control byte(enable all the channels)+ stop + start +slave address + write
    + data 0x5 ( channel 0 connect to DUT0's register )+ data 0x3 ( channel 1 )+ ,etc. ( util to channel 7 )+ stop
    + start + slave address + read + data ?? (get from DUT0's register) + data ?? (get from DUT1's register) +, etc +stop.

    Thanks,
    Jimmy
  • Hey Jimmy,


    "start + slave address+Write+control byte(enable all the channels)+ stop "
    -This slave address is to our device right? If so then yes this works.

    " start +slave address + write
    + data 0x5 ( channel 0 connect to DUT0's register )+ data 0x3 ( channel 1 )+ ,etc. ( util to channel 7 )+ stop "
    This doesn't make sense to me. It looks like you are trying to pull data from all the slaves without properly using start/stop conditions.

    Step1:
    start + slave address(PCA9548A)+Write+control byte(enable channel 0 only)+ stop <<only channel 0 is enabled just incase the other channels have the same slave device so we want to avoid this if this is true

    Step2:
    start + slave address(Fiber module 0)+Write+control byte(0x5)+stop <<this writes to a slave #0 setting the pointer of slave#0

    Step 3:
    start + slave address(Fiber module 0)+read+data (Fiber module 0 sends data from 0x5)+ stop <<this is the register we want to read from, yes?

    Step4:
    start + slave address(PCA9548A)+Write+control byte(enable channel 1 only)+ stop <<we want to talk to slave 1 on channel 1 only

    Step5:
    start + slave address(Fiber module 1)+Write+control byte(0x3)+stop <<this writes to a slave #1 setting the pointer of slave#3

    Step 3:
    start + slave address(Fiber module 1)+read+data (Fiber module 1 sends data from 0x3)+ stop <<this is the register we want to read from, yes?

    ect....

    Does this make sense? I wasn't sure what you were trying to do. I think you are trying to read a register from a slave with the same address as others and the slave has multiple registers so you have to set a pointer before you can read.

    Thanks,
    -Bobby
  • Hi Bobby,

    Thanks for ur reply.
    In addition, I wanna check two case as below.

    1. In architecture of PCA9548A, did the master can receive the correct waveform responded by DUT, if all of them supported bit-level and byte level? Cuz the architecture of PCA9548A is open-drain, whether it would have problem with single directionality of transmitting.
    For example, sometimes, we wanna drive multi-device which should use clock buffer to cover the driving ability. But some of clock buffer are
    uni-direction, it would cause the device can not support the function of bit-level or byte-level. I wanna check whether PCA9548A will have the same situation or not.

    2. What would the behavior form about I2C Master accessing DUT in case of PCA9548A slave address is same as DUT’s (e,g., Fiber module, etc.) ?
    Do the device address have unique that we can confirm others device would not make the conflict with it?

    Thanks,
    Jimmy
  • Hey Jimmy,

    I'm having some trouble understanding your first question. The PCA9548A is bidirectional (All of TI's I2C switches support level shifting and are bi-directional), so you should be able to communicate across it from any channel. If you put something like a unidirectional level shifter infront of it, then the PCA9548A would only be able to transmit from one direction.

    I think the answer to your question here is, this device is bi directional and will support communication from any side of the device (if the device channels are enabled).

    "2. What would the behavior form about I2C Master accessing DUT in case of PCA9548A slave address is same as DUT’s (e,g., Fiber module, etc.) ? "
    It wouldn't work. The Fiber module and the PCA9548A need to have different slave addresses to ensure both devices work properly.

    Thanks,
    -Bobby