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.

[参考译文] ADS8661:无法确认 ADC 是否正常工作

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1477775/ads8661-unable-to-confirm-if-the-adc-is-properly-functioning

器件型号:ADS8661

工具与软件:

您好!

我正在尝试读取 ADC 的器件 ID、微控制器的代码如下:

accelerometerCmdBuf[0]= 0xC9;
accelerometerCmdBuf[1]= 0x00;
accelerometerCmdBuf[2]= 0x00;
accelerometerCmdBuf[3]= 0x00;
SPI_CHD_CS_CLEAR ();
SPI_CHD_CS_SET ();
CORETIME_DELAYN (500);
SPI_CHD_CS_CLEAR ();
CORETIME_DELAYN (20);
SPI4_WriteRead (&accelerometerCmdBuf[0]、4*sizeof (UINT8)、&accelerometerDataBuf[0]、4*sizeof (UINT8));
SPI_CHD_CS_SET ();
snprintf (uartBuffer、sizeof (uartBuffer)、"器件 ID:%02x %02x %02x %02x\r\n"、accelerometerDataBuf[0]、accelerometerDataBuf[1]、accelerometerDataBuf[2]、accelerometerDataBuf[3]);

上述代码的输出如下所示:

器件 ID:01 00 00

器件 ID:F6 00 00

器件 ID:00 00 00

器件 ID:05 00 00 00

这些是我 多次收到器件 ID 01 00 00 00时随机收到的值。

除此之外、我已经尝试将 ADC 配置为+/- 1.25V 外部基准、相关代码如下:
accelerometerCmdBuf[0]= 0xD0;
accelerometerCmdBuf[1]= 0x14;
accelerometerCmdBuf[2]= 0x00;
accelerometerCmdBuf[3]= 0x43;
SPI_CHD_CS_CLEAR ();
SPI_CHD_CS_SET ();
CORETIME_DELAYN (500);
SPI_CHD_CS_CLEAR ();
CORETIME_DELAYN (20);
SPI4_Write (&accelerometerCmdBuf[0]、4* sizeof (uint8));
SPI_CHD_CS_SET ();

有没有什么我可以验证它是否已成功配置?

我还尝试将 Data_VAL 设置为固定模式、代码如下:

accelerometerCmdBuf[0]= 0xD0;
accelerometerCmdBuf[1]= 0x10;
accelerometerCmdBuf[2]= 0x00;
accelerometerCmdBuf[3]= 0x06;
SPI_CHD_CS_CLEAR ();
SPI_CHD_CS_SET ();
CORETIME_DELAYN (500);
SPI_CHD_CS_CLEAR ();
CORETIME_DELAYN (20);
SPI4_Write (&accelerometerCmdBuf[0]、4* sizeof (uint8));
SPI_CHD_CS_SET ();


accelerometerCmdBuf[0]= 0x00;
accelerometerCmdBuf[1]= 0x00;
accelerometerCmdBuf[2]= 0x00;
accelerometerCmdBuf[3]= 0x00;
SPI_CHD_CS_CLEAR ();
SPI_CHD_CS_SET ();
CORETIME_DELAYN (500);
SPI_CHD_CS_CLEAR ();
CORETIME_DELAYN (20);
SPI4_WriteRead (&accelerometerCmdBuf[0]、4*sizeof (UINT8)、&accelerometerDataBuf、4*sizeof (UINT8));
SPI_CHD_CS_SET ();

snprintf (uartBuffer、sizeof (uartBuffer)、"Data_VAL :%02x %02x %02x %02x\r\n"、accelerometerDataBuf[0]、accelerometerDataBuf[1]、accelerometerDataBuf[2]、accelerometerDataBuf[3]);

在固定图形的输出下:

DATA_VAL:00 00 00

DATA_VAL:0f FF FF FF

虽然它不会交替的0和1的,它是随机发生这是预期?

以下是我的 SPI 配置:

#define SPI4_CON_MSTEN (1 <<_SPI4CON_MSTEN_POSITION)
#define SPI4_CON_CKP (0 <<_SPI4CON_CKP_POSITION)
#define SPI4_CON_CKE (0 <<_SPI4CON_CKE_POSITION)
#define SPI4_CON_MODE_32_MODE_16 (0 <<_SPI4CON_MODE16_POSITION)
#define SPI4_CON_ENHBUF (1 <<_SPI4CON_ENHBUF_POSITION)
#define SPI4_CON_MCLKSEL (0 <<_SPI4CON_MCLKSEL_POSITION)
#define SPI4_CON_MSSEN (0 <<_SPI4CON_MSSEN_POSITION)
#define SPI4_CON_SMP (1 <<_SPI4CON_SMP_POSITION)


请让我知道我错了哪里,希望能迅速作出回应。

此致、
法哈德。

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

    尊敬的 Fahad:

    欢迎来到我们的 e2e 论坛!  您能否提供上面初始命令的范围或逻辑分析仪屏幕截图?

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

    您好、Tom、

    请查看随附的连接到 ADS8661的4条 SPI 线路的波形图像。

    注意:此处在 CS 上观察到的初始脉冲的周期为347ns。

    此处读取的响应如下所示[一旦我更改了 CS 高电平、响应就会发生变化、这在发送命令的中间发生、现在已修复]

    器件 ID:09 40 00 00

    如果需要任何其他测量、请告诉我。

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

    谢谢!

    您可以放大一点第一个和第二个事务吗?  很难验证 SCLK 的哪些边沿会引发数据。

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

    这是放大的图像。



    已收到响应:
    器件 ID:09 E0 00 00

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

    尊敬的 Fahad:

    您的 SPI 相位设置不正确。  SDI 和 SDO 应在 SCLK 上升沿均有效。  请将 控制器设置为模式0 (CPOL=0、CPHA=0)、然后查看这是否会清除您的问题。

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

    您好、Tom、

    我们提出了建议的更改、并尝试写入和读取器件 ID 寄存器

    写入命令:d0 02 FF

    写入波形:

    读取命令:C8 02 00 00

    读取波形:

    蓝色:CS (注意:缩小后、其两端均为高电平)
    黄色:SCLK

    绿色:SDI 至 ADS8661

    紫色:ADS8661的 SDO。

    在器件 ID 寄存器中、我们将写入0xF (4位)、当我们回读时、我们期望它在相应的位字段中具有0xF、但遗憾的是、我们无法这样做。 我们还缺少什么其他东西吗?

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

    让我回顾一下这个问题、明天再给您答复。

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

    当然、Tom。

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

    很抱歉耽误你的时间。  您的命令是正确的、只需查看"下一个"序列即可获取器件 ID。  下面这个屏幕快照应该会有所帮助。  我先发送了0xD002FFFA、然后是0xC8020000、然后是0x00000000。  在 READ_HWORD 命令之后的帧中、您会看到写入命令中写入的'a'。  保留位的读数始终为零。