您好、我想确认一下我对设计问题的怀疑。 是否必须拉低 SPPI MISO 引脚?
目前、I 无法从80508 SDO 获得任何响应、但可以通过测量通道输出来正确控制 DAC 输出。
我知道读取命令需要虚拟读取才能实现响应、但无论 I LOOP 多少次、SDO 都保持高电平。
检查80508EVM 参考、在我的设计中没有 MISO 和 CS 上拉。 但在本例中、CS 工作正常、但 SDO 卡在高电平。
请帮助您找出可能存在的问题、谢谢。
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.
您好、我想确认一下我对设计问题的怀疑。 是否必须拉低 SPPI MISO 引脚?
目前、I 无法从80508 SDO 获得任何响应、但可以通过测量通道输出来正确控制 DAC 输出。
我知道读取命令需要虚拟读取才能实现响应、但无论 I LOOP 多少次、SDO 都保持高电平。
检查80508EVM 参考、在我的设计中没有 MISO 和 CS 上拉。 但在本例中、CS 工作正常、但 SDO 卡在高电平。
请帮助您找出可能存在的问题、谢谢。
尊敬的 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)); // } }