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.

TSC2004 I2C Addressing

Other Parts Discussed in Thread: TSC2004

I have incorporated the TSC2004 touch screen controller into an existing design utilizing the I2C bus for communications.

An Initial bus probe of the I2C bus correctly identifies the peripherals on the bus.

 

1.  If the device is then issued a read command the I2C bus is then locked and the system will then be unable to read or write to any device upon the bus.

2.  If the device is written to first with a command & then issued read commands then the device operates as expected.

 

Is this operation normal for TI devices?

Other I2C devices used in other designs the initial order of I2C Read/Write commands operates either way.

 

  • Hello Scott,

    TSC2004 is a register-based TSC device, refer to the app note slaa359,  that can operate at different modes. By default the TSC is powered down.

    About your question:

    1. which/what read command is issued? What do you mean "the I2C bus is locked"?

    2. which/what command is first issue?

    Regards,
    Wendy F. 

  • The transmit empty register bit, ISR_ITE, is never set after the routine i2c_transfer starts the transmission, so a transmit timeout is generated after 10ms. Any device attached to the I2C bus will now get the same timeout error when it tries to use the I2C bus.

     

    The first thing the touch driver does is to validate the address of the I2C device. It calls the I2C driver
    which performs the following routine:

    int i2c_bus_probe(BYTE chip)    <= chip = 0x48
    {
     struct i2c_msg msg;

     i2c_reset();

     msg.condition = I2C_COND_START;
     msg.acknack   = I2C_ACKNAK_WAITACK;
     msg.direction = I2C_WRITE;
     msg.data      = (chip << 1) + 1;  <= Set to Read operation
     if (i2c_transfer(&msg)) return -1;

     msg.condition = I2C_COND_STOP;
     msg.acknack   = I2C_ACKNAK_SENDNAK;
     msg.direction = I2C_READ;
     msg.data      = 0x00;
     if (i2c_transfer(&msg)) return -1;

     return 0;
    }

    The transmit empty register bit, ISR_ITE, is never set after the routine i2c_transfer starts the transmission, so a
    transmit timeout is generated after 10ms. Any device attached to the I2C bus will now get the same timeout error when
    it tries to use the I2C bus.

  • Hello Scott,

    I am still confused on what the I2C is doing. May you send me the I2C waveform on running routine?

    Anyhow, the TSC works only after it is setup  into TSMODE 1, 2, or 3.

    Regards,
    Wendy F.