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.

[参考译文] DAC60504:使用 SPI 读取寄存器

Guru**** 2394295 points
Other Parts Discussed in Thread: DAC60504

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1468134/dac60504-reading-register-using-spi

器件型号:DAC60504

工具与软件:

我将使用 STM32读取和写入 DAC60504的寄存器。 我第一次尝试读取器件 ID、但得到的响应仅为0x00000000。 我的 SPI 配置为16位字大小和 MSB 第一位顺序。
我读取寄存器的函数是  

uint16_t DAC60504_ReadRegister (uint8_t reg){
uint16_t txData1、txData2;
uint16_t rxData1、rxData2;
uint16_t 结果= 0;

//构造24位读取命令(分为两个16位字)
txData1 =(DAC60504_CMD_READ |(reg & 0x0F));//第一个16位字(命令+地址)
txData2 = 0x0000;//虚拟数据以完成24位帧

//第一个 SPI 事务(发送读取命令)
DAC60504_CS_LOW ();
HAL_SPI_TRANSMIT (&hspi3、(uint8_t*)&txData1、1、HAL_MAX_DELAY);
HAL_SPI_TRANSMIT (&hspi3、(uint8_t*)&txData2、1、HAL_MAX_DELAY);
DAC60504_CS_HIGH ();
HAL_DELAY (1);//确保满足时序要求

//第二个 SPI 事务(读取响应)
txData1 = 0x0000;//虚拟数据
txData2 = 0x0000;

DAC60504_CS_LOW ();
HAL_SPI_RECEIVE (&hspi3、(uint8_t*)&rxData1、1、HAL_MAX_DELAY);
HAL_SPI_RECEIVE (&hspi3、(uint8_t*)&rxData2、1、HAL_MAX_DELAY);
DAC60504_CS_HIGH ();


//提取16位数据
Result = rxData2;//最后16位包含实际数据

返回结果;
}
请帮助我解决此问题。  

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

    尊敬的 Omkar:

    首先、您可以使用示波器或逻辑分析仪确认您发送的是3个字节吗? 该示例似乎您仅发送了2个字节。  此外、请确保与时钟和数据线的边缘关系正确。

    请尝试读取地址0x01、因为这应该是芯片 ID、并提供一个非零值。

    谢谢!
    Paul