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.

PCA9546A Addressing

Other Parts Discussed in Thread: PCA9546A

I am working on a project using the PCA9546A chip and am communicating between two microcontrollers.  If I configure the address of the slave device to x71 as well as the PCA9546A chip I can communicate between the two.   If I change the address of the of I2C chip to x70 and change the address of the device I communicating with to x8 I loose communication.  I need help understanding how to setup the PCA9546A such as the address pins, how to set the address of the PCA9546A, and how to communicate to devices on each of the channel.

I've tried configuring the PCA9546A to address x70 by pulling all the address pins low through the microcontroller, then pulse the reset line low then high.  I then send data via I2C to the PCA9546A and I send the values x70 to initiate the address and then x07 to enable all the channels.  I then 3 bytes of data to the slave device.  The problem I'm getting is that the data going to the slave device is incorrect but if bypass the PCA9546A chip I'm able to communicate.

I've been playing with the PCA9546A chip for almost two days and am not understanding just how to make it work.

Thanks,

Matt

  • Hello Matt,
    Can you draw up a diagram of what you are trying to do? It seems like you are a bit confused about the address. The PCA9546A's device address needs to be different than the peripheral device you are trying to communicate with. Do you have I2C device tree that defines the devices on each separate bus and what their device addresses are.
    -Francis Houde
  • Francis,

    I've been playing with it some more and I got it working by setting the PCA9546A to address 0x71 by setting the Address bits as follow: A0-1, A1-0, A2-0. In the beginning of the program I hold the RESET line low, set the Address lines as previously mentioned, then set the RESET line high, I then send via I2C 0x71 followed by 0x07. This should tell the PCA9546A that it's address is 0x71 and to enable all the channels. I have my slave device configured as address 0x8 and it is on channel 1. I will be attaching another microcontroller to the PCA9546A on channel 2 and I haven't set an address for it yet. What will I have to do in order to communicate to it? Will I have to send data to the PCA9546A chip, do I have to manipulate the Address bit, or can I just send data to the third microcontroller?