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.

[参考译文] TDC7201-ZAX-EVM:在进行一次测量后、在进行另一次测量之前、需要做什么?

Guru**** 2564565 points
Other Parts Discussed in Thread: TDC7201-ZAX-EVM, TDC7201

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/640095/tdc7201-zax-evm-what-is-necessary-to-do-after-one-measurement-before-taking-another

器件型号:TDC7201-ZAX-EVM
主题中讨论的其他器件: TDC7201

我在 Raspberry Pi 3B + TDC7201-ZAX-EVM 系统中看到了一些奇怪的 SPI 行为。 第一次测量似乎是完美的;我得到脉冲或超时、校准运行(我打开了 CONFIG1/FORCE_CAL、以便我可以测试校准)、我可以读取所有寄存器、数字看起来合理、我可以进行 ToF 计算。 但是、当我尝试使用完全相同的代码运行第二次测量时、SPI 接口无法正常工作。 尝试读取 CONFIG1和 CONFIG2会获取两次读取的 CONFIG1值、尝试读取 INT_STATUS 和 INT_MASK 会获取两次读取的 CONFIG2值等 它的运行方式就像地址字节被向右移动1位一样、因此地址0和1都计数为0、地址2和3都计数为1等。

这可能有许多原因。 Raspberry Pi 3硬件中的一些东西。 内核驱动程序中的某个东西。 spidev 库中的内容。 我自己的代码中有什么东西。 tdc7201或 EVM 中的一些东西。 但是、在我将兔子洞深入谷粒空间之前、有人能解释一下在测量之后以及开始另一次测量之前、需要采取哪些步骤来清理 tdc7201状态吗? 在这一点上、文档内容有些模糊。 我尝试向相应的 INT_STATUS 位写入1以将其清除、但它不起作用、可能是由于地址移位改编。

对整个系统进行电源循环(包括重新启动 RPi)可以解决问题、以便获得一个测量值、但它会再次运行。

更改 SPI 时钟速度绝对没有影响。 在50kHz 至16MHz 范围内也会发生同样的情况。

我在测量期间不执行任何 SPI 操作。 我只是坐在那里等待 INTB1像一个好男孩一样下降。

谢谢、

   霍华德

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

    在完成测量后再开始新测量之前、实际上没有任何步骤来清理 TDC7201。 只需设置"Start New Measurement (开始新测量)"位即可处理所有事项。

    我认为在 SPI 通信的其他地方可能会发生怪异的事情。 不过、如果您尝试多周期平均、我很好奇它是否能够正常工作。 尝试执行2个或更多周期、并查看第二组测量完成后是否会为您提供良好的值。

    在重新启动 RPi 时、您是否有任何方法可以让 TDC7201保持通电状态? 如果您可以在测量之间重新启动 RPi、但它工作正常、这可能有助于缩小范围。

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

    我终于找到了这个问题,男孩是一个狂热的人。 我在 tdc7201.compute_TOFs 例程中有一行代码,用于检查我们所处的测量模式:

    self.mode =(self.reg1[self.config1]& self._cf1_MEAS_mode)>> 1. 

    它应该从芯片的第1侧获取(之前读取和保存的) CONFIG1寄存器的值、逻辑值、并且针对测量模式位(获取2)使用屏蔽0x06、然后将其右移一位(获取1、表示测量模式2)。 您可能会问、这可能会对 SPI 接口产生什么影响? 它甚至不能与 SPI 通信、因此它应该无法通信。 实际上,compate_TOFs()中没有任何内容与 SPI 通信,因此我很难相信问题可能在其中。 但是...

    几乎可以说、Python 2.7.9将此>>运算符解释为不是位移、而是对文件的写入、因此尝试将整数2写入器件1、无论这是什么。 此软管用于连接 SPI 接口。 相同的代码行、但在末尾没有移位、不会连接 SPI 接口。

    Python 2 >>运算符会像 C++中一样过载、因此它可能意味着移位或写入、具体取决于上下文。 Python 3不允许将>>用作文件写入、因此无法在其中发生此错误。 更喜欢 Python 3的另一个原因。 也许我会在其他类似的东西之前转换我的所有代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没关系,它甚至比它更愚蠢。 SpiDev 类具有一个名为"mode"的变量、用于控制极性和相位。 当我分配给 self.mode 时、我正在单步执行它。 这种行为之所以截然不同、是因为为其分配2会使极性反转、这意味着当我向寄存器写入时、所有位都被反转、 但当我读回它们时、它们再次被反转、因此看起来正常(即使寄存器中存储的值错误)。 但是、当我向它写入1时、时钟相位会反转、因此一切都发生了故障。

    将"self.mode"更改为"self.meas _mode"修复了所有问题。 我现在连续运行多个测量(查找2个 STOP 脉冲),并查看软件生成的脉冲之间的时间,大约为3.9到8.6us (使用 GPIO.output()来驱动 STOP 信号的高-低-高-低)。 令我惊讶的是、这种传播非常广泛、但看起来我可能很快就准备好尝试真实的信号了。