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.
您好!
我的设置使用一组连接器将 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 线路。
此致、
乔纳森