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.

[参考译文] ADS124S06:无法通信

Guru**** 2559730 points
Other Parts Discussed in Thread: ADS124S06, ADS124S08EVM

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1570223/ads124s06-unable-to-communicate

器件型号:ADS124S06
主题中讨论的其他器件: ADS124S08EVM

工具/软件:

大家好:

我正在使用 ADS124S06 的定制电路板、但无法通信。

我检查了 SPI CS/DIN/SCLK 信号、尽管我无法在 DOUT 中看到任何数据、但看起来很好。

我想时间戳 正常、SPI 时钟为 1MHz、 CS 延时~1us

我使用的是我自己的驱动程序、根据用户手册编写:

void ADS124S0X_send_read_command(void* spi, uint8_t start_adr, void* dest, uint8_t length)
{
  if(length == 0)
    return;

  uint8_t *p8_dest = (uint8_t*)dest;
  hal_spi_channel_t* hal_spi = (hal_spi_channel_t*)spi;
  hal_spi_result_t result = HAL_SPI_RESULT_OK;

  uint8_t command = CMD_RREG | (start_adr & 0x1F);
  uint8_t len = (length - 1) & 0x1F;

  HAL_SPI_Enable_slave(hal_spi);  

  HAL_SPI_exchange_byte(hal_spi, command, NULL);
  HAL_SPI_exchange_byte(hal_spi, len, NULL);

  while(length-- && result == HAL_SPI_RESULT_OK)
  {
    result = HAL_SPI_exchange_byte(hal_spi, 0, p8_dest);
    p8_dest++;
  }

  HAL_SPI_Disable_slave(hal_spi);
}

void ADS124S0X_send_write_command(void* spi, uint8_t start_adr, void* src, uint8_t length)
{
  if(length == 0)
    return;

  uint8_t *p8_src = (uint8_t*)src;
  hal_spi_channel_t* hal_spi = (hal_spi_channel_t*)spi;
  hal_spi_result_t result = HAL_SPI_RESULT_OK;

  uint8_t command = CMD_WREG | (start_adr & 0x1F);
  uint8_t len = (length - 1) & 0x1F;

  HAL_SPI_Enable_slave(hal_spi);  

  HAL_SPI_exchange_byte(hal_spi, command, NULL);
  HAL_SPI_exchange_byte(hal_spi, len, NULL);

  while(length-- && result == HAL_SPI_RESULT_OK)
  {
    result = HAL_SPI_exchange_byte(hal_spi, *p8_src, p8_src);
    p8_src++;
  }

  HAL_SPI_Disable_slave(hal_spi);
}

#define ID_ADS124S06 (0x01)
uint8_t AD124S0X_Init(void* hal_spi)
{
  uint8_t ads124s0x_id = 0;
  ADS124S0X_send_read_command(hal_spi, 0x00, &ads124s0x_id, 1);

  if(ads124s0x_id != ID_ADS124S06)
    return 1;
    
  return 0;
}

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

    尊敬的 Lorenzo Mariotti:

    您是否在 DOUT 上获得了任何数据? 例如、如果您读取寄存器、您是否获得了正确的值?

    您能否提供显示数据通信的逻辑分析仪捕获结果? 请包含 CS、SCLK、DIN、DOUT 和 DRDY、以便我们可以查看

    -布莱恩

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

    您好 Bryan、

    DOUT 保持固定为低电平、我尝试读取单个寄存器、但 DOUT 线路上不读取任何寄存器。  
    我相信 SPI 工作正常、因为在同一条总线中有 3 个 DAC 运行正常。

    我将尝试快速分享示波器屏幕、但我只有 4 个探头Sweat smile、DRDY 是否真的有必要?

    感谢您的支持

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

    尊敬的 Lorenzo Mariotti:

    使用逻辑分析仪 可以更轻松地实现这一点、但示波器也可以起作用。 是的、现在您可以省略 DRDY、尤其是在没有从 ADC 获得任何响应的情况下、即这听起来好像不是输出数据问题、这听起来 ADC 的问题更大

    如果您为 ADC 上电并 将 START 引脚拉至高电平、您应该能够探测专用 DRDY 引脚并看到此引脚以默认数据速率 (20SPS 或 50ms) 切换。 如果看不到此行为、则说明存在电源、时钟或接地问题。  

    -布莱恩

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

    您好 Bryan、

    我可以确认、当 START 引脚处于高电平时、DRDY 引脚会在 50ms 时切换。

    仍然无法读取寄存器。

    在这里、我尝试读取器件 ID 寄存器 (00h)、并期望读取值 001

    第一张图片显示了 CS(黄色)SCLK(绿色)和 SDI(蓝色)线

    第二张图片 显示了 SDO (黄色)SCLK(绿色)和 SDI(蓝色)线

    这是一个愚蠢的问题,但我找不到它。

    编辑:
    我尝试了以下序列:

    -开机
    - START/SYNC = 1
    -延迟 10ms
    -发送复位命令
    -延迟 10ms
    - 每隔 1s 在循环中发送一次 RDATA (12h) 命令、 ADS124S06 响应是固定值 FF8A00h  


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

    尊敬的 Lorenzo Mariotti:

    您是否可以尝试读取一些其他非零默认寄存器而不是 ID 寄存器? 请在上电后立即执行此操作、并告知我们结果。 我在下面强调了几个方面

    在尝试读取转换数据时、还请探测 DRDY 引脚(这在尝试读回寄存器数据时不是必需的)。 当您尝试读取转换数据时、应确认该引脚继续以大约默认数据速率切换。 如果 DRDY 引脚没有切换、发送重复的 RDATA 命令将一次又一次地提供相同的数据。

    -布莱恩

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

    您好 Bryan、

    在这里、我尝试读取数据速率寄存器 (04h)、SCLK 绿色、MOSI(蓝色)、MISO(黄色)、CS(紫色)

    我要发送命令= 24h (20h | 04h) 且 len = 0 (1 - 1 = 0)、然后发送一个 NOP 字节以读回该值。

    请注意:START 引脚为低电平、该命令在 RESET 命令和 10ms 的延迟之后发送。

    关于转换数据、我已将 CS 探头替换为 ADC 的 DRDY 输出、我可以确认 DRDY 引脚在 50ms 时上升

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

    尊敬的 Lorenzo Mariotti:

    我不太确定这里发生了什么。 SPI 总线上是否可能因其他元件而出现争用? 在我看来、DOUT 引脚似乎始终处于高电平是很奇怪的。 您提到总线上有 3 个 DAC、对吗? 您是否可以尝试删除它们以确保它们不会导致问题? 希望可以移除一些电阻器或其他元件以断开 SPI 总线与 DAC 的连接、而无需移除 DAC 本身。

    您还显示了模拟 (AVSS) 和数字 (DGND) 的不同接地端。 它们是否连接在电路板上的任何位置? 我们通常建议对模拟和数字使用单个实心接地平面、但如果您小心、可以使用单独的接地平面

    如果可能、我还建议使用 ADS124S08EVM。 这为您提供了一种已知可正常工作的解决方案、您可以 1) 用作电路板的控制器、以便验证硬件是否正常工作;以及 2) 将固件用作外设以确保也正常工作。  

    另一件事:你说数据是 FF8A00h 上一篇文章,但 我不认为这是正确的。 控制器应该在 SCLK 的下降沿而不是上升沿在 DOUT 上捕获数据。 从您提供的图像来看、一旦 SCLK 上升为高电平、DOUT 似乎下降至低电平、这应该读作为 0、而不是 1。 这不是您遇到的问题的根源、但这是一个需要解决的问题

    最后、由于某种原因、您发送的示波器图片不能变大。 您会注意到、如果您将鼠标悬停在我发送给您的图像、甚至是您的示意图图像上、则光标会变成放大镜、您可以使图像变大。 但是、示波器图像不会出现这种情况、因此它们非常小且难以读取。 如果发布新的示波器快照、您是否可以尝试纠正此问题? 您可以在发布后通过将鼠标悬停在图像上进行确认、如我所述。 然后、如果这不起作用、请尝试使用新图像编辑帖子

    -布莱恩

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

    Lorenzo,


    我没有读过整个线程,但我注意到了一件事。 看起来您将 SPI 设置为错误的模式。 对于 ADS124S06、DIN 应在 SCLK 的下降沿输入。 在这种情况下、数据在 SCLK 的上升沿发生变化、并必须在 SCLK 的下降沿保持稳定。 因此、器件可能无法接收到正确的数据。

    检查 SPI 模式的 CPHA、我认为器件可能正确响应。


    Joseph Wu

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

    尊敬的 Byran 和 Joseph:

    非常感谢您的支持!  

    问题实际上是 CPHA 设置!  

    我已经排除了这可能是 SPI 设置问题的可能性、因为我有其他器件在同一条总线上工作。

    但一旦 CPHA 设置正确,一切工作正常!