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:tcan4x5x spi2.1 CAN1:在 rxf0中丢失 MSG

Guru**** 2540720 points
Other Parts Discussed in Thread: TCAN4550

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1017350/tcan4550-q1-tcan4x5x-spi2-1-can1-msg-lost-in-rxf0

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

尊敬的:

我们在 Tegra 平台中使用 TCAN4550。

我们尝试接收的数据少于10ms、但收到错误:"tcan4x5x spi2.1 CAN1:MSG 在 rxf0中丢失"。

我们的 DTS 配置为:SPI-max-frequency =<10000000>;

Bosch、MRAM-cfg =<0x0 0 0 32 0 1 1>;
内核版本:4.9.140-Tegra
tcan4550的驱动程序从 ti: git.ti.com/gitweb 中导入
我检查了数据表、该错误表示 FIFO 0已满、但我不知道为什么会发生这种情况、您能帮助解决这个问题吗?

BRS、

斯蒂芬

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

    您好 Stephen、

    此错误消息表示 RX FIFO 已满、并且没有可用于存储新传入消息的元素、因此新消息被丢弃和丢失。  由于您在小于10ms 的间隔内正常通信、这可能表示您的处理器未在<10ms 窗口内读取并确认消息。  您将需要缩短消息间隔以支持的时间、或者减少从处理器接收新消息中断到该消息的最终确认的开销时间、从而释放 FIFO 元素以接收新消息。

    两个 RX FIFO 可被配置成存储多达64个单元(消息)。  根据消息过滤器、传入的消息被定向到这些 FIFO 中的一个、一个专用的 RX 缓冲元件、或者被拒绝。 当一条消息被存储时、一个中断状态位被置位以通知 MCU 新消息。  MCU 读取消息后、必须确认已读取消息、这将释放 FIFO 或缓冲区中的元件以接收新消息。

    如果 MCU 读取并确认消息的速度快于消息到达速度、则 FIFO 和缓冲区将最终填充、从而导致消息丢失。  SPI 数据速率、消息中数据有效载荷的长度、在突发读取中读取消息数据(在单个 SPI 事务中读取多个字的数据以防止重复地址标头产生额外开销)、 处理器在接收到中断后读取和确认消息的效率等

    我不知道如何配置 FIFO 和消息滤波器元件、但一些从 TCAN4550器件级别改进的一般建议是:

    • 使用可能的最大支持 SPI 数据速率。
    • 使用猝发读取和写入来与 MRAM 之间发送或接收多个连续字的数据、而无需额外的地址标头。  请注意、如果多条消息位于连续的存储器位置、也可以在单个 SPI 事务中从 MRAM 空间中读取它们。
    • 将 GPIO1或 GPO2引脚配置为专用中断、并提升优先级以获得更快的响应。
    • 尽可能减少 MCU 中的开销、以减少 MCU 在此过程中执行其他功能的延迟
    • 设置过滤器可过滤掉不需要的消息、并根据优先级或类型将消息定向到不同的位置、而不是将每个消息放置在一个 FIFO 中
    • 减小 RX 消息元素数据大小以匹配消息的最大数据大小、从而避免在 SPI 总线上传输额外的虚拟数据。  例如、如果最大消息数据字段为8字节、则没有为64字节数据字段设置 RX 消息元素。
    • 增加 FIFO 的深度、以便它可以在填满前保存更多消息。  但是、如果消息的到达速度快于确认速度、则这不是一种长期解决方案。  但它确实有助于适应突发消息。
    • 降低总线上 RX 消息的频率

    我在器件级别支持 TCAN4550、我不确定您是否可以遵循 Linux 驱动程序中的所有建议、例如 SPI 突发读取或专用 GPIO 中断引脚等  但希望这能为您提供一些关于如何改进结果的建议。

    此致、
    Jonathan