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.

ADS122U04: Unable to communicate with chip

Part Number: ADS122U04

I cannot wrap my head around why I cannot communicate with the ADS122U04... I've tried both an Arduino and an FTDI USB to TTL cable with no respond from the chip at all. I simply want to "ping" the chip to validate it's there so I am trying to read register 01h by transmitting 55h followed by 22h at 9600 baud. I know I am definitely transmitting to the chip, there's just nothing coming back.

Any suggestions? Am I missing a step between powering up the chip and being able to reading registers? The whole time I am trying to communicating with the chip I do have the reset line driven high and I did try throwing the reset command at it and that didn't help.

  • Hi Doug,

    Do you have any screen shots of the communication? Are you sure you have RX and TX going to the correct pins?

    Best regards,
    Bob B
  • Hi Bob,

    I don’t have any useful screenshots, all I could show is the serial port tool transmitting the hex codes. I did check the header for my board with a scope and I can see the data entering the RX pin. The TX pin is being held high by the ADS122U04 with no sign of data being transmitted on it. I even went as far as trying to talk to the chip on the EVM without success. I’m guessing I’m not transmitting the right bytes for a response.

    Thanks,
    Doug
  • Hi Doug,

    I'm sorry to hear you are still having issues communicating.  The only strict requirements to communicate, aside from baud rate,  is the RESET pin must be high, and communication is 8 bits, no parity and 1 stop bit.  To transmit a command, the command must be proceeded by 0x55 (0101 0101).  You could double check to make sure that you are not sending this as a decimal value of 55.  The best way I have found to solve my communication issues is to use a logic analyzer (like a Saleae for example) to verify my timing and protocol.  These days this tool is relatively inexpensive and well worth the cost in time saved troubleshooting.  You would think something simple like this would be easy, but it is not.

    /*
     * Reads a register contents from the specified address
     *
     * \param regnum identifies which address to read
     *
     */
    char regRead(unsigned int regnum)
    {
        uint32_t ulDataTx;
        uint32_t ulDataRx;
        uint8_t junk;
    	ulDataTx = REGRD_OPCODE_MASK + ((regnum & 0x07) << 1 );
    	while(UARTCharsAvail(UART_BASE))
    	{
    		junk = UARTCharGet(UART_BASE);
    	}
    	while(UARTBusy(UART_BASE));
    	UARTCharPut(UART_BASE, 0x55);
    	UARTCharPut(UART_BASE, ulDataTx);
    	ulDataRx = UARTCharGet(UART_BASE);
    	return ulDataRx;
    }

    The above example is a register read function using the EVM and Tiva.  There is nothing special here.  Where things become complicated is the ADS122U04 is not full-duplex, so the device will not like it if you are attempting to transmit to it when the ADS122U04 is transmitting.

    Best regards,

    Bob B

  • Hi Bob,
    I found the problem, I wasn't powering the analog side of the chip. When I went to test my board I didn't connect the analog supply since I didn't have a sensor connected but I forgot all about it also powering half the chip. Now that I have both sides of the chip powered up its working just fine.
    Thanks,
    Doug
  • Hi Doug,

    I'm glad to hear you found the issue.  I apologize as I should have previously stated that both of the analog and digital supplies must be operating and valid or the device will be held in a reset state.

    Best regards,

    Bob B

  • Hi Bob,

    Well I should have been smarter and powered up the whole chip in the first place. It might not be such a bad idea to throw a note in the datasheet on the next revision.

    Thanks,
    Doug