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.

[参考译文] TCAN4550EVM:Rx FIFO 0溢出错误

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1257199/tcan4550evm-rx-fifo-0-overflow-error

器件型号:TCAN4550EVM
主题中讨论的其他器件:TCAN4550

您好!

我的设置使用一组连接器将 thing53连接到 TCAN4550 EVM。

我按照软件演示代码操作、并成功配置 TCAN4550器件上的所有设置、从而建立了 SPI 通信。

似乎我能够发送和接收 CAN 消息、但在一些随机时间后、我看到 Rx fifo 0溢出且中断停止。

我只使用元件大小64和元件数量64来设置 Rx FIFO 0。 Rx FIFO 1和 Rx 缓冲器都设置为0 (元素数)。

我将 FIFO 0配置为覆盖模式。 当 FIFO 0已满时、我可以看到 RF0F 中断已设置。

我是否需要启用水印设置并确保它从不设置 FIFO 0 完全中断?

达到设置的水线位后、确切的预期是什么?

是否有任何文档可以更详细地解释这一点?

谢谢。

GT

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

    GT、您好!

    听起来接收消息的速度比 MCU 读取和清除 FIFO 的速度快。  MCU 可以轮询新消息、也可以设置 Internet 服务例程以在消息到达时读取并清除这些消息。 您可以监控新消息位以在每次新消息到达时进行响应、也可以监控水印位以允许 MCU 仅在特定数量到达后读取消息。  决定了在读取消息时需要多长时间中断 MCU。  如果使用水线方法、则需要将水线设置得足够低、以便 MCU 有时间从 FIFO 读取和清除消息、然后才能接收到足够的新消息并完全填充 FIFO。  因此、您需要根据您的应用确定这一点。

    您还可以直接检查 FIFO 状态寄存器以确定填充级别和获取/放置地址值并相应地进行响应。

    我将向您介绍两个文档、以了解更多信息。  第一份是 TCAN45xx 软件用户指南 、该指南简要概述了如何配置和使用 TCAN4550器件。  

    第二个文档是 由 Bosch 针对 TCAN4550中包含的 CAN FD 控制器 IP 开发的 M_CAN 用户手册。  并非 TCAN4550数据表中有关 MCAN 控制器的所有信息都可能重复、因此本文档应视为 TI 创建的信息的补充文档。  唯一需要注意的区别是 TCAN4550已为每个与 MCAN IP 关联的寄存器添加了0x1000的偏移量。  例如、在 MCAN 用户手册中、控制寄存器的地址为0x18、在 TCAN4550器件中、该寄存器的地址为0x1018。

    此致、

    乔纳森

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

    尊敬的 Jonathan:

    感谢您的答复。 我会先看一下这份文件、然后也会跟进这里的一些建议。

    我注意到在 TCAN4550 EVM 上有一件事:有一个红色 nINT LED、当我收到中断时它会持续闪烁、当问题发生时它只会保持常亮。 如果我切换开关 S4上的 nINT LED 开关切换、看起来中断会再次开始工作、我能够再次读取 Rx FIFO 0。 不过、我在某个时候运行后以同样的状态结束中断停止(稳定红色)。 所有这些内容的同一个功率周期。

    为什么开关的位置会影响 nINT 线路? 这是预期结果吗? 我只是试图排除任何硬件怀疑在我身边。

    谢谢。

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

    您好、GT:

    此开关只需将 LED 与 TCAN4550器件和 J16接口插头的 nINT 网络隔离开来。  切换它应该对 TCAN4550的中断寄存器没有影响、并且不会清除这些位。  nINT 引脚是所有启用的中断位字段的全局中断引脚、是寄存器0x0820和0x0824 (寄存器0x1050的只读副本)中未屏蔽的所有故障的逻辑或。  

    设置中断位后、nINT 引脚应拉低并保持低电平、直到通过 SPI 总线对位字段进行写入操作将中断位字段清零。  如果同时设置了多个中断位字段、该值可能会保持低电平、只有在所有中断位字段都清零后、该值才会被拉至高电平。

    监控状态寄存器0x000C、中断/诊断标志0x0820、和 MCAN 中断寄存器(0x0824或0x1050)。  MCAN 中断必须通过写入寄存器0x1050而不是0x0824来清除、但是通过在 SPI 读取中将长度字段设置为2、通过对寄存器0x0820和0x0824进行单次双寄存器读取来读取所有中断可能会更加方便。

    写入所有设置的中断位应清除 nINT 引脚、从而允许其再次拉至高电平。

    此致、

    乔纳森

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

    进一步调试后、问题似乎与缓冲区溢出有关、我启用了覆盖寄存器位、一般而言我看不到缓冲区溢出问题。

    但是、我看到有时、即使在清除 MCAN 寄存器并读取 Rx FIFO 0后、我也看不到 nINT 引脚生成的任何中断。 MCAN 中断的频率是否有任何限制。 我感觉即使在清除 MCAN 中断后也可能缺少中断。 发生此问题时、nINT 线路保持低电平(低电平有效)、如果我明确清除 MCAN 中断寄存器、nINT 将再次开始生成中断。 这在低 CAN 总线负载下不会发生、但似乎随着我增加 CAN 总线负载而发生。

    对这里可能发生的情况有什么想法吗?

    谢谢。

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

    nINT 引脚是所有器件中断的逻辑或、因此如果仍设置了一个或多个中断位、该引脚将保持低电平。  因此、如果 CAN 消息速率增加、当您处理消息时、新消息可能已到达、这可能会生成新的中断位、使线路保持低电平。

    在中断服务例程结束时、您应该重新读取 RX FIFO 状态和中断寄存器、以查看是否仍有需要处理和清除的未读消息或中断位。

    MCAN 控制器 IP 允许2条单独的中断线路、您可以为不同的线路分配不同的中断位。 GPO2和 GPIO1引脚可被用作额外的 MCAN 中断线路、此线路将使您能够隔离某些中断位、例如 RX FIFO 新消息位、这样它可被独立监控而不是被分成全局 nINT 线路。

    此致、

    乔纳森