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.

TCA6416A: No response from GPIO Expander

Part Number: TCA6416A
Other Parts Discussed in Thread: AM62P, , TCAL6416, TCA6424A

Tool/software:

We are currently in the bring-up process for a new AM62P design and are running into some issues on I2C1 with the TCA6416ARTWR devices.

When we run an i2cdetect command (with options -y -r) we see other devices on the BUS, but neither TCA6416ARTWR responds.

We have confirmed that the power is present at pins 21 and 23 of both devices (3.313V), that the nRESET has been released, that the address pins are at the expected values (0.00V for U73, 3.313V for U74), and that we have good continuity to ground for pin 9.

We have also probed the signals at pins 19 and 20 of each device

On the new AM62P board, the clock frequency is 100K and the following capture shows address 0x20 and 0x21 of the i2cdetect command:

To isolate the board from the device, we removed U74 and hand wired it with ceramic wire to a test board so that we could connect with I2C busses from known good boards.

This capture, connected to our AM62x development board with the clock frequency at 400K, shows addresses 0x20 and 0x21 of the i2cdetect command:

In both cases, the I2C bus has other devices that are responding and functioning, so it seems unlikely that the issue is with the bus, but we are not getting responses from the TCA6416A on our new AM62P board (tested on 3 different boards with 2 devices each) or in isolation connected with the AM62x board.

Can you offer any insight into what may be wrong with our circuit or what we can try to continue debug.

  • Hi Christyan,

    I think the TCA I/O expander circuitry must have the command byte set first before starting a read command. 

    Sending the device address followed by a read bit NACK's because the command byte (pointer byte) has not been set, therefore, the TCA6416A does not know which register to read data from. I believe we changed this in the TCAL I/O expanders. 

    When you send device address + Read bit to the TCAL6416, I believe it reads data from input port register 0 at 0x00. 

    For TCA6416A, I believe it should NACK. 

    Try sending a write command first before reading and let me know the results. 

    Regards,

    Tyler

  • Hi Tyler,

    can you confirm the TI AM62Px EVM uses the same expander just with 24 pins?

    I'm asking because I don't quite understand how this chip is supposed to work in Linux. This expander is using the NXP driver for PCA953. I would assume this driver would send a write command first, but apparently it's not.

    I also get Arbitration Lost errors when using gpiolib to change the value of one the IOs.

  • Hi Daniel,

    It looks like the EVM is using TCA6424A which is the 24-bit I/O expander. 

    It would be similar to the TCA6416A in terms of reading and writing. I don't think the pointer bit is set (command byte). If initial reads are done without sending write commands first, then the device should NACK since it does not know which internal register is being pointed to. 

    See the read snippet from the TCA6424A: 

    Regards,

    Tyler