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.

DAC80508: Can't read any reg. and SDO has no activities while able to write reg. and control DAC outputs.

Part Number: DAC80508


Hi, I would like to confirm my doubt about the design issue. Does the SPPI MISO pin have to be pulled?

Currently, I CAN'T get any response from 80508 SDO, but DAC outputs CAN be controlled correctly by measuring the channel outputs.

I know the read command needs a dummy read for the response, but no matter how many times I loop, SDO remains high.

Checked the 80508EVM reference there are pull-ups for both MISO and CS where there are none in my design. But in my case, CS works fine but SDO is stuck in high.

Please, help to figure out what might be wrong, thanks.

  • Hi Ernie tan,

    Can you please tell me what is the value written in CONFIG (address = 0x03) register?

    And which node in your schematic is being probe ?

    Thanks,

    Sanjay

  • Hi Sanjay

    Here are my probing points. Although, crossed in the schematic but they are there in the layout.

    My init code has it written to all 0. Here is my source code.

    void dac80508_Init(dac80508_handle_t *p_dac80508)
    {
        ASSERT(p_dac80508 != NULL);
        ASSERT(p_dac80508->spi < SPI_MST_INDEX_CNT);
    
        // Init SPI
        spimst_cfg_t spimst_cfg =
        {
            .trans_complete_cb = SpiCallback,
            .p_callback_handler = p_dac80508,
        };
        ASSERT(spimst_Configure(p_dac80508->spi, &spimst_cfg) == OP_STATUS_SUCCESS);
    
        // Init IC
        // Issue a software reset after power up.
        p_dac80508->_tx_data_buf[0] = DAC_CMD_TRIGGER|DAC_CMD_WRITE_MASK;   // 0x05
        p_dac80508->_tx_data_buf[1] = DAC_CMD_TRIGGER_SOFT_RESET_BYTE_1;    // 0x00
        p_dac80508->_tx_data_buf[2] = DAC_CMD_TRIGGER_SOFT_RESET_BYTE_2;    // 0x0A
        ASSERT(SpiTransact(p_dac80508) != OP_STATUS_ERROR);
        ASSERT(InitSpiWait(p_dac80508));
    
        // > 250us delay to wait for reset (8.3.3.1 in manual)
        ASSERT(gbtmr_Delay(GBTMR_USEC_TO_TICKS(1000)) == OP_STATUS_SUCCESS);
    
        // Issue a software reset after power up.
        p_dac80508->_tx_data_buf[0] = DAC_CMD_CONFIG|DAC_CMD_WRITE_MASK;    // 0x03
        p_dac80508->_tx_data_buf[1] = 0;
        p_dac80508->_tx_data_buf[2] = 0;
        ASSERT(SpiTransact(p_dac80508) != OP_STATUS_ERROR);
        ASSERT(InitSpiWait(p_dac80508));
    
        // test code
    //    while(1){
    //    	p_dac80508->_tx_data_buf[0] = DAC_CMD_DEVICE_ID|DAC_CMD_READ_MASK;  // 0x81
    //    	p_dac80508->_tx_data_buf[1] = 0;
    //    	p_dac80508->_tx_data_buf[2] = 0;
    //    	ASSERT(SpiTransact(p_dac80508) != OP_STATUS_ERROR); // obtained 0xffff, SDO high
    //    	ASSERT(InitSpiWait(p_dac80508));
    //    	p_dac80508->_tx_data_buf[0] = DAC_CMD_DEVICE_ID|DAC_CMD_READ_MASK;  // 0x81
    //    	p_dac80508->_tx_data_buf[1] = 0;
    //    	p_dac80508->_tx_data_buf[2] = 0;
    //    	ASSERT(SpiTransact(p_dac80508) != OP_STATUS_ERROR);	// obtained 0xffff, SDO high
    //    	ASSERT(InitSpiWait(p_dac80508));
    //    }
    }

  • More tests, I disconnected the on-board ISO from the on-board DAC completely and wired jumps it to DAC eval. board and DAC eval. board can respond through its' SDO correctly.

    That means the root cause might be in the DAC circuit on-board, but I can't figure out what could cause the issue.

    I used the same code but just CAN'T obtain any response from SDO, so weird!

    Here is my test code.

    void dac80508_Init(dac80508_handle_t *p_dac80508)
    {
        ASSERT(p_dac80508 != NULL);
        ASSERT(p_dac80508->spi < SPI_MST_INDEX_CNT);
    
        // Init SPI
        spimst_cfg_t spimst_cfg =
        {
            .trans_complete_cb = SpiCallback,
            .p_callback_handler = p_dac80508,
        };
        ASSERT(spimst_Configure(p_dac80508->spi, &spimst_cfg) == OP_STATUS_SUCCESS);
    
        // Init IC
        // Issue a software reset after power up.
        p_dac80508->_tx_data_buf[0] = DAC_CMD_TRIGGER|DAC_CMD_WRITE_MASK;   // 0x05
        p_dac80508->_tx_data_buf[1] = DAC_CMD_TRIGGER_SOFT_RESET_BYTE_1;    // 0x00
        p_dac80508->_tx_data_buf[2] = DAC_CMD_TRIGGER_SOFT_RESET_BYTE_2;    // 0x0A
        ASSERT(SpiTransact(p_dac80508) != OP_STATUS_ERROR);
        ASSERT(InitSpiWait(p_dac80508));
    
        // > 250us delay to wait for reset (8.3.3.1 in manual)
        ASSERT(gbtmr_Delay(GBTMR_USEC_TO_TICKS(1000)) == OP_STATUS_SUCCESS);
    
        // Issue a software reset after power up.
        p_dac80508->_tx_data_buf[0] = DAC_CMD_CONFIG|DAC_CMD_WRITE_MASK;    // 0x03
        p_dac80508->_tx_data_buf[1] = 0;
        p_dac80508->_tx_data_buf[2] = 0;
        ASSERT(SpiTransact(p_dac80508) != OP_STATUS_ERROR);
        ASSERT(InitSpiWait(p_dac80508));
    
        // test code
    //    while(1){
    //    	p_dac80508->_tx_data_buf[0] = DAC_CMD_DEVICE_ID|DAC_CMD_READ_MASK;  // 0x81
    //    	p_dac80508->_tx_data_buf[1] = 0;
    //    	p_dac80508->_tx_data_buf[2] = 0;
    //    	ASSERT(SpiTransact(p_dac80508) != OP_STATUS_ERROR); // obtained 0xffff, SDO high
    //    	ASSERT(InitSpiWait(p_dac80508));
    //    	p_dac80508->_tx_data_buf[0] = DAC_CMD_DEVICE_ID|DAC_CMD_READ_MASK;  // 0x81
    //    	p_dac80508->_tx_data_buf[1] = 0;
    //    	p_dac80508->_tx_data_buf[2] = 0;
    //    	ASSERT(SpiTransact(p_dac80508) != OP_STATUS_ERROR);	// obtained 0xffff, SDO high
    //    	ASSERT(InitSpiWait(p_dac80508));
    //    }
    }

  • Hi Ernie Tan,

     

    Let me go through it and will get back to you ASAP.

     

    Thanks,

    Sanjay

  • Hi Ernie,

    You should confirm the exact part number you are using on your PCB.  Note that there are variants of the DAC80508 that do not feature an SDO pin, and that pin is used for a /CLEAR function.  You may need to look at the device markings itself.

  • Jesus, you are right!

    We are using 80508ZC...

    Paul, thanks for the notice!!