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.

[参考译文] ADS8328:SDO 上的错误数据时序

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1217204/ads8328-incorrent-data-timing-on-sdo

器件型号:ADS8328

您好!

我遇到的问题与 此处 TI 论坛上所讨论的问题相同。 我使用的是运行 Arduino 引导加载程序的 Particle Xenon (nRF52840)。 运行代码以写入 CFR 并读回数据、切换通道、然后读出数据。 提到的问题是、正在读取的数据会向左移动1、例如、当我尝试使用 SPI 模式1 (下降沿)读取 CFR 时、我得到的响应为1111111_1101_111111H_1110 (0xFDFE)、 它实际上是 CFR 的左移默认值(0111_1110_1111111_1111 = 1111111_111111111_1110  >> 1)。 因此、我转而使用 SPI 模式0 (上升沿)读取 CFR、并回读默认值1111H_1110_111_1111。 然后、我使用数字信号分析器探测 SPI 线路:

请注意、传输是通过将 CS 保持为低电平逐字节完成的。 我观察到的是、MISO (SDO)上的数据是在 时钟的下降沿输出(绿色虚线与红色虚线、显示了数据应该发生变化的地方)。 因此、如果我在上升沿(SPI 模式0)而不是下降沿(SPI 模式1)读取数据、该数据会正确读取为11111_111111H_1111。 现在这一切都是 有意义的,除了:

 ADS8328数据通道声称该器件在上升沿推送数据、在下降沿读取(SPI 模式1):

2.如果我使用 SPI 模式0来写入 CFR 寄存器,这会失败,因为当我读回数据时,它会读回默认值。 如果我然后改为使用 SPI 模式1写入 CFR、但在 SPI 模式0下从 CFR 读回、则可以这样做、我读取正确的数据、例如、我发送1110_0110_1111_1101并读回1110_0110_1111_1101 (使用 SPI 模式1时、回读为1110_110_1111_1010、 因此向左移动1、并且违反了时序要求、因此有时数据可能会损坏)。

考虑到所有这一切、看起来器件会在下降沿推出数据、而在下降沿读取数据、这实际上并不是一个标准、因为我需要使用 SPI 模式1从 MCU 写入数据、 但使用 SPI 模式0读回数据。 我会这样做、但由于某种原因、当我尝试更改要从中进行数据采样的通道时、该设置不起作用。 如果我使用 SPI 模式1来选择通道并读回数据、则此操作有效、并且仅对一个通道进行采样(尽管我会丢失一位、因为数据已向左移动!)。 但是、如果我使用 SPI 模式1选择通道、然后使用 SPI 模式0读回数据、即使我在 CFR 手动切换中进行了设置、该模式也会继续交替使用该通道。

我很困惑为什么设备能正常工作、并想听到一些关于如何使用它的建议/指导。 如果有合适的替代芯片、我不介意更换它、尽管我需要2个通道、单基准、16位单端 ADC。

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

    尊敬的 Montvydas:

    欢迎来到我们的 e2e 论坛!  感谢您的观看!  我无法从您发送的屏幕截图中分辨您的 SCLK 速度是多少、但我怀疑它相对较慢。  ADS8328确实希望看到更快的时钟。  SDI/SDO 都应在下降 SCLK 上有效。  ADS8328在内部以一定的固定延迟驱动输出 SDO、因此当以较低的 SCLK 速度运行器件时、输出数据 看起来应在 SCLK 上升沿读取。  您可以加快 SCLK 速度、并验证问题是否用更快的时钟清除?  

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

    您好、Tom、

    图上的速度是4 MHz、但我在没有运气的情况下尝试了8 MHz、16 MHz、32 MHz 和64 MHz。 事实上、如果我理解正确、则时钟速度与之无关、因为根据 您的说法("ADS8328在一些固定延迟下驱动输出 SDO")、  SDO 上的数据 在时钟的下降沿延迟一段时间后发生变化、因此必须能够足够快地读取它才能更改数据、否则您将错过 MSB、是这样吗? 我在 此处检查了 nRF52840何时开始采样 、并得到最小延迟为18ns:

    如果我理解正确、那么 ADS8328的更改速度会快于 MCU 读取数据的速度、因为一切都是在下降沿发生的。 这是否意味着我 不能使用 nRF52840 MCU 在不缺少 MSB 的情况下从此 ADC 读取数据?

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

    您是否具有使用更快 SCLK 的 LA 图?  如果您的处理器存在设置和保持时间限制、我不确定我能为您提供帮助。  修改 I/O 单元的驱动强度对这一点是否有帮助?  我不熟悉  nRF52840的具体细节。  

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

    使用更快的时钟时、LA 图在任何方面都是相同的、直到分析仪的采样速度不够大、无法再捕获时钟。 总之、它在数据表的哪里指定了我需要使用更快的时钟? 我查看了数据表、它指定在给定我的设置的情况下、最大时钟为33MHz。 但是、我可以看到、如果我将时钟用作转换时钟、即使在低至1MHz 的频率下、它也必须能够工作、这意味着、如果我不使用外部时钟作为转换时钟、从理论上讲、我可以使用比1MHz 更小的 SCLK:


    关于设置和保持时间限制、很抱歉、但我不能将这些限制称为。 通常、SPI 不会期望 在数据以相同的时钟沿被推出时立即读取 SDO、否则、负载 电容的轻微增加(例如、由于布线长度增加)会导致完全相同的问题、 如果在读取数据时跳过 MSB 位、甚至更糟、数据读取将不一致。 那么通常的做法是在一个时钟沿读取数据、而在另一个时钟沿送入数据、数据表时序图中指出:

    不过它声称数据是在下降沿泵出、延迟 为 TD (SCLKF-SDOVALID)、最大为16ns、这意味着数据应该在16ns 之后而不是之前读取、因为之前的周期被视为无效:

    因此、假设该器件使用非标准 SPI 模式1协议是否有意义、即必须在下降沿之前读取 SDO 引脚、因为如果在下降沿之后进行读取、MSB 位将丢失、因为不应在无效期间读取数据、 但是、还有一个问题、因为如果您在无效周期之后读取、但在有效周期期间、您将丢失第一个位。

    简单来说、我确实实施了一种权变措施、即在开始 SPI 数据传输之前读取 MSB 位、然后将此 MSB << 15 (向左移15)与其余数据>> 1 (向右移1)相结合:
    数据=数据>> 1 | MSB << 15;

    但这 只起作用、因为我的 MCU 保持时间在 CLK 下降后18ns 开始、然后有效周期已经2ns、即 CLK 下降后16ns 开始。  因此、我不会遇到任何数据问题是合理的、但这也意味着、如果我将 MCU 更改为在16ns 之前对数据进行采样的 MCU、我 可能会/可能会遇到 时序问题、可能不是整个器件系列都有、而是某些器件可能会出现。