Hi,
I use the TCA9548A in a circuit for I2C expantion . it can't work after power on. i can't read the adress of it by i2cdetect tool.
what is the problem ?How can i resolve it. Picture below is the sch on the circuit. Thank you !
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.
Hi,
I use the TCA9548A in a circuit for I2C expantion . it can't work after power on. i can't read the adress of it by i2cdetect tool.
what is the problem ?How can i resolve it. Picture below is the sch on the circuit. Thank you !
Hey Megan,
Can you get scopeshots of SDA/SCL when you try to communicate to the TCA9548A device?
Typically when we see this problem, the issue is that he 'i2cdetect tool' uses a I2C read of every address. Our device requires a i2c write to its address (and set which register to write to) before an I2C read can be acknowledged by our device.
You can check to see if this is the problem by making your processor do an I2C write to the device and seeing if it acknowledges its address (use an o-scope).
Thanks,
-Bobby
Hi Bobby,
Thank you for your reply. According to what you say, your mean is that if i want to read the address of 9548A by i2cdetect , i need to write to it first ?
what instrut can i used?
I have another question to ask . what is the adress of 9548A in my design? according to the datasheet it is 0x70,but i find somebody using 0xE0, which one
is right?
"what instrut can i used? "
I am not sure since I do not/have not used linux to control the 9548A. Our support forum for these I2C devices are more towards the analog domain and not the digital/code level support.
"what is the adress of 9548A in my design? according to the datasheet it is 0x70,but i find somebody using 0xE0, which one"
I2C addresses are 7 bits. so anything larger than 0x7Fh is not a real I2C address. I assume you are just talking about an 8 bit byte that you send after the start condition, inwhich case you would see 0xE0h which contains the I2C address 0x70h plus the 8th bit being 0 signifying a write in I2C.
-Bobby
I don't have much code for our I2C switches but here is a small portion of code I wrote awhile back (this is not for linux):
Wire.beginTransmission(deviceAddress); //send device address for you this would be 0x70h
Wire.write(0x24h); // Enables channel 1 and channel 6
Wire.endTransmission();
-Bobby
Thanks very much.
I have another quention. If i want to enable all the channels , how to choose the I2C pull-up resistors of channels and master I2C bus?
Maybe i don't use all of the channels , for example 4-7 channels don't be used. Do these channels have to connect to VCC with pull-up resistors?
You should choose pull up resistors depending on the SCL max frequency and the expected bus capacitance. For each secondary channel, compute the pull up resistor on each channel for the expected capacitance on that channel.
This app note discusses how to choose a pull up resistor:
"for example 4-7 channels don't be used. Do these channels have to connect to VCC with pull-up resistors?"
Well, you technically don't have to if the channels there are never used but if you accidentally do enable them you'll end up seeing some additional leakage current (important for battery operated equipment). I typically recommend pull up resistors regardless but technically if you didn't have them , the device would still be functional.
-Bobby