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.

[参考译文] TCAN4551-Q1:CANFD 总线发送和接收帧丢失

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1438271/tcan4551-q1-canfd-bus-transmit-and-receive-frame-loss

器件型号:TCAN4551-Q1

工具与软件:

DSP28335通过 SPI 访问 TCAN4551芯片、以便实现数据发送和接收功能。 SPI 的波特率为5MHZ。CANFD 的仲裁域被配置为500kHz、数据域被配置为2MHz。

5个数据包的数量通过 CANFD 总线与以下帧 ID 和周期向外发送:
0x11B (10ms 周期)、0x12A (20ms 周期)、0x6F7 (10ms 周期)、0x50D (1280ms 周期)、0x6F5 (1280ms 周期)
当总线上没有其他数据时不会丢失帧。 当总线上的加载率达到大约40%时、帧 ID 为0x6F5和0x50D 的数据会更严重地丢失帧。 具有其他帧 ID 的数据也偶尔会丢失帧。

TSMater 工具检查了这些数据、发现了帧丢失情况、如下所示:

CANFD 芯片的一些寄存器的配置或状态参数如下:

寄存器地址

峰值振幅

0x000C

0x00000008

0x8000

0xC80004A0

0x0820

0x00000000

0x0824

0x000901D5

0x1018

0x00000300

0x1040

0x00000000

0x1044

0x000A300F

0x1050

0x000901D5

0x10C4

0x00000000

0x10CC

0x00000001

0x10D8

0x00000001

0x1084

0x000C0000

0x1088

0x00000000

0x10A0

0x80020030

0x10B0

0x000200C0

0x10C0

0x600004F8

0x10C8

0x00000007

0x10F0

0x00000000

请帮助我查看这些寄存器的配置以及读回的状态消息是否有问题。

如果方便跟进、您能通过电子邮件与我沟通吗?

确保安全。

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

    您好、Wang:

    MCAN 中断寄存器0x1050的 RX FIFO 1 FULL 位和 RX FIFO 0 FULL 位(位6和2)。  这意味着器件无法接收新消息、并将覆盖或拒绝新消息、直到 RX FIFO 中有空的缓冲区元素可用。

    您似乎是在尝试接收 CAN 消息的速度快于您的处理器通过 SPI 总线读取和确认这些消息的速度。  您需要确定处理器通过 SPI 总线完全处理从通知接收到新消息到 RX FIFO 确认寄存器(0x10A8和0x10B8)中的最终确认的中断所需的时间。

    如果突发接收到消息、增加 RX FIFO 深度可能会增加一些裕量、但平均而言、固定间隔接收 CAN 消息的速度无法超过 SPI 总线处理这些消息的速度。

    此致、

    Jonathan

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

    感谢您对通信接收的指导。 传输过程中数据丢失的可能原因是什么?

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

    您好、Wang:

    我已经了解了如何配置 MRAM、以及为不同类型(SID/XID 滤波器、RX FIFO 和缓冲器、TX 缓冲器和 TX 事件 FIFO 等)配置了多少个元素、并且我认为您的分配超出了器件中的可用存储器。  某些寄存器值从列表中缺失、因此我不能确定、因此您应该检查配置以确保使用的总字节少于2048。

    看起来您正在尝试启用一个包含32个元素的 TX 队列、每个元素都具有最大64字节的数据字段、这是 MRAM 中的最后一组元素。  当存储器地址超过最大值字段时、器件会自动回绕到 MRAM 地址字段的开头。

    在未直接实现重叠的情况下、也可能会发生存储器段重叠。 对 MRAM 地址空间的读取或写入环绕在 MRAM 的最后一个地址之后的 MRAM 的开始位置。 例如、在 TCAN45xx 上有2KB 的 MRAM、占用地址0x8000到0x87FF。 如果用户尝试读取或写入寄存器0x8800、这与读取或写入0x8000相同。 因此、确保 MRAM 存储器不被过度分配至关重要。

    如果存储器重叠、则会覆盖第一个元素(SID 滤波器、RX 缓冲区等)、这可能导致 RX 和 TX 错误、因此请验证您的 MRAM 分配。

    否则、对于消息传输、器件将遵循 CAN 仲裁协议并尝试随时发送消息、直到成功。  当总线上有大量消息时、具有较低优先级 ID 的消息可能需要更长的传输时间、因为它们将失去对具有较高优先级 ID 的其他节点的仲裁。

    可以监视 TX 缓冲区添加请求传输发生寄存器(0x10D8)以检查 TX 缓冲区中的报文何时发送。  TX 事件 FIFO 也可用于为消息传输创建事件日志、但这需要额外的 MRAM 空间。

    我还注意到您使用的是 TX 队列模式、这将导致器件检查队列中的所有消息 ID、以确定哪个消息的优先级最高。  这还会导致总线负载较高时、优先级较低的消息会延迟、这可能看起来"丢失"、而实际上它们仍在队列中等待发送。

    有关 RX 和 TX 处理的更多详细信息、请参阅 M_CAN 用户手册 (链接)。

    此致、

    Jonathan

x 出现错误。请重试或与管理员联系。