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. SDO 在能够编写寄存器时没有任何活动。 和控制 DAC 输出。

Guru**** 657980 points
Other Parts Discussed in Thread: DAC80508
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1252956/dac80508-can-t-read-any-reg-and-sdo-has-no-activities-while-able-to-write-reg-and-control-dac-outputs

器件型号:DAC80508

您好、我想确认一下我对设计问题的怀疑。 是否必须拉低 SPPI MISO 引脚?

目前、I 无法从80508 SDO 获得任何响应、但可以通过测量通道输出来正确控制 DAC 输出。

我知道读取命令需要虚拟读取才能实现响应、但无论 I LOOP 多少次、SDO 都保持高电平。

检查80508EVM 参考、在我的设计中没有 MISO 和 CS 上拉。 但在本例中、CS 工作正常、但 SDO 卡在高电平。

请帮助您找出可能存在的问题、谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ernie Tan:

    您能否告诉我在 CONFIG (地址= 0x03)寄存器中写入的值是什么?

    您的原理图中的哪个节点是探测节点?

    谢谢。

    桑贾伊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sanjay:

    以下是我的探测点。 不过、它在原理图中有交叉、但它们在布局中位于那里。

    我的初始代码将其全部写入为0。 这是我的源代码。

    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));
    //    }
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在更多的测试中、我将板载  ISO 与板载 DAC 完全断开、然后有线连接将其转移到 DAC 评估。 电路板和 DAC 评估。 电路板可以通过其 SDO 正确响应。

    这意味着根本原因可能在板载 DAC 电路中、但我不知道是什么原因导致了问题。

    我使用了相同的代码,但只是无法从 SDO 获得任何响应,太奇怪了!

    这是我的测试代码。

    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));
    //    }
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ernie Tan:

     

    让我继续讨论、并尽快回复您。

     

    谢谢。

    桑贾伊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ernie。

    您应该确认您在 PCB 上使用的确切器件型号。  请注意、DAC80508的有些型号不具有 SDO 引脚、该引脚用于/CLEAR 功能。  您可能需要查看器件标识本身。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    耶稣,你是对的!

    我们正在使用80508ZC。。。

    Paul、谢谢你的通知!!