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.

[参考译文] TDC1000:MCU 无法通过 SPI 与 TI TCD 器件进行通信

Guru**** 2826855 points

Other Parts Discussed in Thread: MSPM0G3107, TDC1000-Q1, TDC1000, TDC1000-C2000EVM

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1605322/tdc1000-mcu-not-able-to-communicate-with-ti-tcd-device-over-spi

器件型号: TDC1000
主题中讨论的其他器件: MSPM0G3107、、、

TI 团队大家好、

我遇到了 MCU 和 TI TCD 器件之间的 SPI 通信问题。

硬件详细信息:

  • MCU:MSPM0G3107

  • 器件:TDC1000-Q1

  • 电源电压:12V

  • MCU 和 TDC1000 之间的公共接地

SPI 配置:

  • MCU 配置为 SPI 主器件 、TDC1000 作为从器件

  • SPI 模式和 SPI 时钟频率:随附屏幕截图以供参考

  • 数据宽度:8 位

  • CS 为低电平有效、并通过 MCU GPIO 进行控制

  • EN 设置为高电平、在 SPI 访问之前、RESET 切换为低电平→高电平。

    对于 SPI 读取、CS 被拉至低电平、发送寄存器地址、虚拟字节 (0x00) 在时钟沿读取数据。

时钟配置:

  • 连接了 MCU 时钟树配置以供参考。

发现的问题:

  • MCU 无法通过 SPI 与 TDC1000 进行通信。

  • 寄存器读取/写入未按预期运行

  • MCU 无法从 TCD 器件读取有效数据

附件:

SPI 配置详细信息:

image.png

image.png

MCU 时钟树配置:

image.png

MCU–TDC1000 SPI 原理图:

image.pngimage.png

您能否根据数据表确认 TDC1000 的此 SPI 序列和复位/使能时序是否正确?

感谢您的支持。

此致、
Lovi Jain

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

    尊敬的 Lovi:

    感谢您发布到传感器论坛!

    尝试 SPI 通信时、您是否能够分享数字逻辑波形的捕获结果? 这将有助于确定信号是否存在潜在问题。

    关于您的 SPI 时钟信号、SCK 引脚在不通信时是否默认保持高电平或低电平?

    此致、

    ~Alicia

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

    尊敬的 Alicia:

    感谢您的答复。

    请找到随附的逻辑分析仪捕获结果屏幕截图以供您参考。  捕获包括 CS、SCLK、MOSI 和 MISO SPI 通信尝试期间发出信号。  每次定期执行 SPI 寄存器读取 250ms 与主循环分离。

    请查看随附的波形、如果您根据 TDC1000 SPI 要求、在 SPI 时序、时钟极性/相位或信号行为方面存在任何问题、请告诉我。

    请告诉我是否需要我本人提供任何其他信息或特定捕获。

    此致、
    Lovi Jain

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

    尊敬的 Lovi:

    可以肯定的是、在您进行正确通信时、VIO 和 VDD 已通电? 下面链接的用户指南中的 EVM 原理图应该是一个很好的参考、可确保您的原理图正常。

    TDC1000-C2000EVM 用户指南 — 章节 8 原理图

    根据您的信号、就像单次传输一样、时钟在 8 位后停止。 您是否可以尝试将帧大小增加到 16 位、看看这样是否有用?  

    我举例说明了如何从 TDC1000-C2000EVM 读取寄存器 0x03:

    EVM + GUI 用于时钟极性的设置为 CPOL = 0(在运行时时时,时钟为低电平)、时钟相位为 CPHA = 0(数据在时钟前沿有效)。

    此致、

    ~Alicia

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

    尊敬的 Alicia:

    我无法在 EVM 板 MCU 中找到 TDC 芯片选择引脚。 此外、我还检查了您建议但仍然显示相同行为的所有其他配置。

    您能否提供 SPI 线路以及 TDC 复位和使能线路的引脚详细信息?

    此致、

    洛维

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

    尊敬的 Lovi:

    我已经突出显示了 EVM 上 SPI 线路在下图中的位置:

    • 黄色框表示与 TDC 片选引脚 (R16) 的连接。
    • 红色框是 MISO (R29)
    • 蓝色框为 MOSI (R47)
    • 蓝色框为 SCLK (R43)
    • 黄圈为 TDC EN (TP12)
    • 绿色圆圈表示 TDC RESET (R32)

    此致、

    ~Alicia

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

    尊敬的 Alicia:

    我将 TDC1000 与 MSPM0G3107 连接。

    当前设置:

    • 外部时钟:8MHz(在 CLKIN 上进行验证)

    • EN 引脚= 3.3V

    • 已验证 SPI 通信(寄存器读取与写入匹配)

    • MCU 生成的 TRIG 脉冲((10µs 脉冲)

    但是、在应用 TRIG 之后、TX1 不会生成突发脉冲。

    配置 TDC1000 寄存器和上电详细信息:

      //上电
      TDC_RESET_HIGH ();
      DELAY_ms (1);
      TDC_RESET_LOW ();
      DELAY_ms (1);
      TDC_EN_LOW ();
      DELAY_ms (1);
      TDC_EN_HIGH ();
      DELAY_ms (1);
    SPIWrite (CONFIG_0、   0x45);
      SPIWrite (CONFIG_1、   0x41);
      SPIWrite (CONFIG_2、   0x00);
      SPIWrite (CONFIG_3、   0x03);
      SPIWrite (CONFIG_4、   0x1F);
      SPIWrite(超时,0x19)   ;  

    预期行为:
    TX1 应在下降沿后输出突发。

    观察到的行为:
    无 TX1 活动。

    问题:

    1. 在 TRIG 之前是否需要其他条件?

    2. 是否需要最短 TRIG 低电平时间?

    3. TDC1000 在首次触发之前是否需要特定的复位序列?

    4. 如果未检测到 STOP、是否有任何内部状态机条件会阻止 TX1?

    如果可能、您能告诉我配置的正确工作流程吗?

     随附:

    • TRIG 波形

    • SPI 波形

    谢谢、

    Lovi Jain

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

    尊敬的 Lovi:

    抱歉漏掉您的问题、此主题在标记为已解决后标记为已关闭、因此我没有意识到 与此主题相关的一些未决项目。

    使用 TDC1000-C2000EVM 的相同设置、我能够在触发器的 START 和 TX1 引脚上观察到脉冲、请参阅下图:

    我注意到触发脉冲与 GUI 生成的脉冲之间的一个区别是 GUI 的脉冲为 2.85μs、而您的脉冲为 11.1μs。 此外、在触发脉冲之后、您还应该在开始引脚上看到一个脉冲。

    此外、该器件确实要求系统必须等待确定的时间、然后才能在器件复位后发送下一个触发信号。  典型的复位至触发等待时间为 3 ×T1 +(50ns)。 请参阅第 8.4.5.2 TX/RX 测量时序和时序部分。

    此致、

    ~Alicia

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

    您好:

    我正在使用 TDC1000 超声波 AFE 指定 带有单个换能器的脉冲回波模式

    硬件设置

    • CLKIN = 8MHz

    • 换能器谐振频率≈ ±μ A 100kHz

    • 中: 水/DEF 溶液

    • 传感器和反射器≈之间的距离 35 毫米

    水的预期 ToF 应该在附近 ~ó n 47µs

    不过、我的 MCU 始终会测量 ~12–13 个计时器周期 (~1.5µs)

    观察结果

    • TX1 输出在~1MHz 时显示正确的突发。

    • RX 路径在 TX 突发之后立即检测脉冲。

    • 测得的起始/终止值通常为:

    START_TIME≈4500(每个周期更改)
    STOP_TIME≈4512 (每个周期更改)
    TOF 节拍≈12–13(但这始终是不同的)  

    这时会发生这种情况 在水中和 DEF 中 和值不会更改。

    附加测试

    • 断开换能器→ 未生成 STOP 脉冲

    • 增加 NUM_TX = 15 Δ V→略有增加至 ~23–24 个节拍

    • 逻辑分析仪显示 TX 突发后立即出现的 RX 脉冲。

    这使我怀疑器件正在检测到 TX 振铃、而非实际回波

    电流寄存器配置

    CONFIG_0 = 0x45
    CONFIG_1 = 0x41
    CONFIG_2 = 0x00
    CONFIG_3 = 0x03
    CONFIG_4 = 0x1F
    TIMEOUT = 0x60
    CLOCK_RATE = 0x00

    模拟前端

    • TX1 通过连接到换能器 串联电阻器 (200E/0805)

    • RX 输入通过耦合 ~330 pF 电容器

    问题

    1. 公式 ~700kHz 传感器 ,什么是建议的 NUM_TX 突发长度

    2. 事件 消隐时间配置 来避免检测 TX 振铃?

    3. 330 pF RX 耦合电容器 适合该频率?

    4. 200  TX1 上的 Ω Ω 串联电阻器 正确还是应该使用不同的值?

    5. 其他 阻尼电阻器或滤波元件 建议在 TX/RX 和换能器之间?

    6. 如果测量值始终为 12-13 个刻度 、是否表示系统正在检测 TX 突发耦合、而非回波

    7. 将会是什么 脉冲回波模式下~700kHz 传感器的建议寄存器配置

    有关的任何建议 AFE 元件值或寄存器配置 非常感谢。

    谢谢您、

    Lovi Jain

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

    尊敬的 Lovi:

    查看您的设置、似乎您已启用 FORCE_SHORT_TOF 、这意味着该器件配置为短 TOF 测量。 此外、考虑到您的当前设置、您似乎已将器件配置好足够长的监听时间来捕获完整的采样窗口(这就是您看到如此短的监听窗口的原因)。

    在配置测量窗口时、需要考虑的是测量范围。 根据具体的覆盖范围、您需要确定侦听应用所需的最短时间(以捕获最小的预期范围)以及最长侦听时间(以捕获最大的预期范围)。  

    您在使用 短程 ToF 测量时、看看图 8-23。 短 TOF 测量、应用所需的最短时间将由 Transmit + Mask 窗口确定。 例如、如果应用所需的最短时间为 37μs、则传输+屏蔽窗口需要总计 37μs 。 但是、我们需要避免的是 通过过度增加 NUM_TX 脉冲而使传输窗口过长。 因此、最好通过调整 SHORT_TOF_BLANK_PERIOD 来增加屏蔽窗口。

    如下所示:

    • 将 NUM_TX 设置为 5 个脉冲、这样会得到一个 5μs 的发送窗口(假设 CLKIN 为 8MHz、使得<xmt-block2> 1μs</xmt-block>)。 1μs。  
    • 综上所述、我们需要设置  SHORT_TOF_BLANK_PERIOD、使屏蔽窗口至少为 32μs long。 这意味着 SHORT_TOF_BLANK_PERIOD 应设置为 256 ×T0(假设 CLKIN 为 8MHz 且 CLOCKIN_DIV=1、从而使<xmt-block2> T0</xmt-block> =<xmt-block3> 0.125μs</xmt-block>)。 T0。</s> 0.125μs

    为了说明器件需要侦听的最长时间、您需要考虑 Transmit + Mask + Echo Listen 窗口。 例如、如果所需的最大侦听时间为 69μs(传输+掩码= 37μs)、则需要将回波侦听窗口设置为 32μs。

    如下所示:

    • 将 TOF_TIMEOUT_CTRL 设置为 256 ×T0 (假设 CLKIN 为 8MHz 且 CLOCKIN_DIV=1、从而使<xmt-block2> T0</xmt-block> =<xmt-block3> 0.125μs</xmt-block>)</s> T0 0.125μs

    使用上述设置、您应该具有 37μs 到 69μs 的侦听周期范围、这将允许您捕获预期的~47μs ToF。

    此外、鉴于当前主题偏离了解决初始 SPI 通信问题的原始主题、 您是否可以考虑打开一个新主题来帮助保持 E2E 组织有序、以便其他工程师在未来可以轻松找到类似信息? 您可以单击网站右上角的橙色“提出相关问题“按钮、创建自动链接到此主题的新主题

    此致、

    ~Alicia

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

    尊敬的 Alicia:


    非常感谢您的帮助!

    此致、

    洛维