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.

[参考译文] TCAN4550-Q1:从 TCAN4550-Q1 读取数据时出现 SPI 通信问题。

Guru**** 2767425 points

Other Parts Discussed in Thread: TCAN4550-Q1

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1615016/tcan4550-q1-spi-communication-issue-while-reading-data-from-an-tcan4550-q1

器件型号: TCAN4550-Q1

尊敬的 Texas:

我在从 SPI 从器件读取数据时遇到 SPI 通信问题。

在传输过程中、我可以清楚地看到 SCLK 和 MOSI 正确切换、MOSI 正在发送有效数据。 不过、在 MISO 线上、我只看到噪声、RX 缓冲器中接收到的数据始终为 0x00 或 0xFF。

以下是我的 SPI 配置详细信息:

SPI 模式:模式 0 (CPOL = 0、CPHA = 0)

位顺序:MSB 优先

波特率:15 Mbps

主模式

观察结果:

1、时钟和 MOSI 在传输期间处于活动状态

MISO 不显示有效数据

RX 缓冲器读取 0x00 或 0xFF

我的问题:

1.这可能是软件配置问题、还是表示硬件/计时问题?

对于可靠的 MISO 采样、15Mbps 是否过高?

3.在什么情况下,从器件主动驱动 MISO 线?

4、硬件部件是否需要修改。

我将分享我的 SPI 驱动器代码以进行审查和原理图。
请让我知道我应该验证或更改的内容。

提前感谢您的支持。    main.c image.png

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

    你好、Vishnu、

    我在原理图中没有看到任何看起来像会阻止 SPI 通信的明显错误的内容。  但是、不清楚在测试期间复位引脚的状态是什么以及它是高电平还是低电平。  在正常运行期间、RST 引脚需要为低电平。  如果该引脚为高电平、则器件将保持在复位状态并阻止 SPI 通信。

    当您尝试通过 SPI 进行通信时、是否可以测量 VSUP、VIO、VCCOUT、FLTR 和 RST 引脚上的电压电平?  所有电源引脚和滤波器引脚上都应有正电压、并且 RST 需要为低电平。  (VSUP = 12V、VIO = 3.3V、VCCOUT = 5V、FLTR = 1.5V、RST = 0V)

    此器件具有失效防护功能、如果器件未配置为正常模式或在上电后 4 分钟内已在寄存器 0x0820 中清除 PWRON(上电)中断位、则此功能将使器件进入睡眠模式。  当器件进入睡眠模式时、SPI 通信被禁用。

    通常情况下、我建议监控 INH 和 NWKRQ 引脚电压以及睡眠模式指示器、但原理图中不使用这些引脚。  因此、监控 VCCOUT 和 FLTR LDO 的电压将指示器件是否已进入睡眠模式。  如果它已进入睡眠模式、您将需要通过 CANH 和 CANL 引脚上的唤醒模式 (WUP) 来唤醒器件、WAKE 引脚上的本地唤醒 (LWU) 脉冲、向 RST 引脚发送高电平脉冲或对 VSUP 电源进行下电上电。

    15Mbps 的 SPI 范围是可以的。

    您能否提供所监控的 4 个 SPI 信号的示波器图或逻辑分析仪图?  如果器件上的所有电压电平都正确、则 SPI 信号格式可能会出现问题。  我在代码或原理图中看不到任何明显的内容、因此观察波形是否存在错误会有所帮助。

    此致、

    Jonathan

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

    您好 Jonathan、



    感谢您发送编修。

    我在尝试 SPI 通信时测量了引脚上的电压电平、读数如下:

    VSUP = 11.72V
    VIO = 3.22V
    VCCOUT = 0V
    FLTR = 0V
    RST = 0V

    CS 引脚在 SPI 传输期间变为低电平、并且 SPI 时钟和 MOSI 波形在示波器上看起来正确。 但是、MISO 线保持在 0V、并且观察到器件没有响应。

    根据您的说明、由于 VCCOUT 和 FLTR LDO 输出均为 0V、因此器件似乎未进入正常模式或可能已经处于睡眠模式

    为了进一步调试、我捕获了 SPI 信号 (CS、SCLK、MOSI 和 MISO) 的示波器图像、并在下面连接了它们。  CS 引脚正常工作。  

    由于 VSUP 在大约 11.72V 时存在、您能帮助我了解 VCCOUT 和 FLTR 为什么仍为 0V 吗? 如何纠正这种情况、使器件进入正常运行或待机模式?

    您还提到了本地唤醒 (LWU) 概念。 您能否更详细地解释 LWU 的工作原理以及应如何在此设置中实现该工作原理? 我是否可以应用此方法而不是 加电顺序。

    请告诉我、这些电压电平是否表明器件仍处于复位或睡眠模式、或者是否有您建议的其他检查。



    此致、
    Vishnu    

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

    尊敬的 Vishnu:

    是的、如果 VCCOUT 和 FLTR 引脚均为 0V、则收发器似乎处于睡眠模式。  建议您阅读 TCAN4550-Q1 数据表(链接)的第 8.4.3 节、了解有关睡眠模式和不同唤醒器件方法的更多信息。

    有多种方法可以唤醒器件。

    - 唤醒模式 (WUP) 在 CAN 总线上检测到显性 — 隐性-显性模式、并使器件转换到待机模式并启用内部 LDO。  

    -一个本地唤醒 (LWU ),这是一个电压脉冲的唤醒引脚,即在您的应用中拉低 WAKE 引脚,因为你有一个上拉电阻到 VSUP 也会导致器件转换到待机模式,并启用内部 LDO。  

    -将 RST 引脚切换为高电平是另一种选择

    -下电上电 VSUP 电压是最后一个选项

    执行上述任何方法后、有一个 4 分钟的计时器会启动、该计时器称为睡眠唤醒错误 (SWE) 计时器、这是器件的失效防护功能、可确保器件在意外唤醒时不会从低功耗系统取电、导致车辆电池电量耗尽。  因此、如果尚未通过 SPI 写入寄存器 0x0800[7:6]将器件配置为正常模式、或者在 4 分钟 SWE 计时器到期之前、尚未通过写入寄存器 0x0820[20]将 PWRON 位清零、则器件将转换到低功耗睡眠模式并禁用内部 LDO。  如果发生这种情况、您将需要执行我之前列出的其中一种唤醒方法。

    因此、您的设置可以将 WAKE 引脚拉至比 VSUP 至少低 3V、以便在该引脚上生成一个低电平、该引脚将被检测为 LWU。

    或者、可以将 RST 引脚发送到 VIO 以创建唤醒功能。

    最后,您可以以显性 — 隐性-显性模式驱动 CAN 总线、或者直接从另一个节点发送 CAN 消息、该节点将具有显性和隐性位、从而满足 WUP 要求。

    器件唤醒并处于待机模式后、您有 4 分钟时间清除 PWRON 标志、或配置器件并将其置于正常模式、然后才能返回睡眠模式。  我建议您第一步始终立即清除 PWRON 标志、这样将终止 SWE 计时器、并留出所需的时间来配置器件、而不必担心器件会返回到睡眠模式。

    数据表的第 8.4.5 节还更详细地讨论了该失效防护功能。

    此致、

    Jonathan

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

    尊敬的 Jonathan:

    非常感谢您的支持—您帮助解决了我的问题。 SPI 通信现在正常工作、我已通过 LWU 序列成功读取器件 ID 确认了这一点。

    但是、我有一个重要的问题。 根据数据表、加电后、器件应进入待机模式。 在本例中、器件似乎正在进入睡眠模式。

    这可能是由于与原理图相关的问题导致的、还是在某些情况下器件默认为睡眠模式? 我希望器件在上电后默认进入待机模式或正常模式。 是否有任何建议的配置或硬件注意事项来实现这一点?

    期待您的指导。

    此致、
    Vishnu