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.

[参考译文] AM625:CAN 溢出问题

Guru**** 2551110 points
Other Parts Discussed in Thread: SK-AM62-LP, SN65HVD230

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1561905/am625-can-overrun-issue

器件型号:AM625
Thread 中讨论的其他器件:SK-AM62-LPSN65HVD230

工具/软件:

尊敬的专家:

我们使用 SK-AM62-LP 进行了 CAN 通信验证(标准帧,1Mbps)。 验证方法是 使用另一个板连续发送消息。

在初始 SDK9 版本中、主 CAN 和 MCU 有时都可能存在超限错误。

后来,根据 FAE 的建议,我切换到最新的 SDK11.01.05.03(不是 RT-Linux),并且超限错误不再出现。 但是、如果您在此时插入或拔下网络电缆或启动我们的应用程序、则仍会出现超限错误。

主 CAN 测试:μ s

MCU 可以 测试:

更改 RT-Linux 时、插入或拔下网络电缆时也会出现超限。

我们分析了超限错误的原因是内核无法及时删除 CAN 驱动器的 FIFO 中的数据。 是这样吗? 有没有办法解决这个问题?

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

    让我补充一下我们尝试过的一些方法
    1.增加缓存,但没有效果;

    sudo sysctl -w net.core.rmem_default=1048576

    sudo sysctl -w net.core.rmem_max=4194304

    将 MCU 的轮询间隔从 1ms 更改为 0.1ms 已得到改善、但仍然无法完全解决。

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

    期待所有专家的答复!

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

    嗨、Liang

      我正在调试该问题、但遇到了一些问题、当我尝试发送 CAN 帧时、所有 MCAN 接口都会报告总线关闭

      稍等片刻

    --------------------------------

    Root@am62pxx-EVM:~#
    root@am62pxx-EVM:~# ip link set mcu_mcan0 type can bitrate 1000000
    Root@am62pxx-EVM:~#
    root@am62pxx-EVM:~# ip link set mcu_mcan1 type can bitrate 1000000
    Root@am62pxx-EVM:~#
    Root@am62pxx-EVM:~#
    root@am62pxx-EVM:~# ip link set main_mcan0 type can bitrate 1000000
    Root@am62pxx-EVM:~#
    Root@am62pxx-EVM:~#
    Root@am62pxx-EVM:~#
    root@am62pxx-EVM:~# IP link 将 mcu_mcan0 设置为 up
    Root@am62pxx-EVM:~#
    root@am62pxx-EVM:~# IP link 设置 mcu_mcan1 up
    Root@am62pxx-EVM:~#
    root@am62pxx-EVM:~# IP link set main_mcan0 up
    Root@am62pxx-EVM:~#
    Root@am62pxx-EVM:~#
    root@am62pxx-EVM:~# cansend mcu_mcan0 123#F00DCAFE
    [86.394611] CAN:控制器局域网核心
    [86.399103] NET:注册的 PF_can 协议系列
    [86.411660] CAN:原始协议
    [ 86.416435] m_can_platform 4e08000.can mcu_mcan0:总线关闭
    Root@am62pxx-EVM:~#
    root@am62pxx-EVM:~# cansend mcu_mcan1 123#F00DCAFE
    [91.626712] m_can_platform 4e18000.can mcan1:总线关闭
    Root@am62pxx-EVM:~#
    root@am62pxx-EVM:~# cansend main_mcan0 123#F00DCAFE
    [ 98.314561] m_can_platform 20701000.can main_mcan0:总线关闭
    Root@am62pxx-EVM:~#
    Root@am62pxx-EVM:~#

    ----------------------------------------------------

    此致

      Semon

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“315978" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1561905/am625-can-overrun-issue/6012578

    让我补充一下我们尝试过的一些方法
    1.增加缓存,但没有效果;

    sudo sysctl -w net.core.rmem_default=1048576

    sudo sysctl -w net.core.rmem_max=4194304

    将 MCU 的轮询间隔从 1ms 更改为 0.1ms 已得到改善、但仍然无法完全解决

    [/报价]

    嗨、Liang

       我使用 SK-AM62-LP 进行了验证、没有重现此问题、SDK 11.1.5

       Root@am62xx-LP-EVM:~#
    Root@am62xx-LP-EVM:~# uname -A
    Linux am62xx-LP-EVM 6.6.58-ti-01497-ga7758da17c28-Dirty #1 SMP PREEMT 11 月 27 日星期三 13:23:15 UTC 2024 AArch64 GNU/Linux
    Root@am62xx-LP-EVM:~#

      ----------------------------------------

    ip -s -s 链接显示 mcu_mcan0

    Root@am62xx-LP-EVM:~# ip -s -s link show mcu_mcan0
    5:mcu_mcan0: MTU 16 qdisc pfifo_fast 状态 up 模式默认组缺省值 qlen 10
    链接/CAN
    RX:字节数据包错误丢弃了未命中的 mcast
    546417 94999 0 0 0 0
    RX 错误:长度 CRC 帧 FIFO 溢出
    0 0 0 0 0
    TX:字节数据包错误丢弃运营商拼贴
    12 509475 0 0 0 0
    TX 错误:已中止的 FIFO 窗口 heartbt 事务
    0 0 0 0 1
    Root@am62xx-LP-EVM:~#

    ==============

    拔下/插入 CAN 总线后、CAN 帧无下降

    --------------------------------------------------------

    Root@am62xx-LP-EVM:~#
    Root@am62xx-LP-EVM:~# ip -s -s link show mcu_mcan0
    5:mcu_mcan0: MTU 16 qdisc pfifo_fast 状态 up 模式默认组缺省值 qlen 10
    链接/CAN
    RX:字节数据包错误丢弃了未命中的 mcast
    10243447 1780915 0 0 0 0 0
    RX 错误:长度 CRC 帧 FIFO 溢出
    0 0 0 0 0
    TX:字节数据包错误丢弃运营商拼贴
    12 509475 0 0 0 0
    TX 错误:已中止的 FIFO 窗口 heartbt 事务
    0 0 0 0 1
    Root@am62xx-LP-EVM:~# ip -s -s link show mcu_mcan0
    5:mcu_mcan0: MTU 16 qdisc pfifo_fast 状态 up 模式默认组缺省值 qlen 10
    链接/CAN
    RX:字节数据包错误丢弃了未命中的 mcast
    10354133 1800239 0 0 0 0
    RX 错误:长度 CRC 帧 FIFO 溢出
    0 0 0 0 0
    TX:字节数据包错误丢弃运营商拼贴
    12 509475 0 0 0 0
    TX 错误:已中止的 FIFO 窗口 heartbt 事务
    0 0 0 0 1
    Root@am62xx-LP-EVM:~#

    ----------------------------

    从另一个 J722S EVM 板发送:

    root@j722s-evm:~# cangen mcu_mcan0 -g 0 -p 10 -x
    ^Croot@j722s-evm:~#
    root@j722s-evm:~# cangen mcu_mcan0 -g 0 -p 10 -x

    --------------------------------

    拔下/插入以太网计算器后、发生错误、

    ----------------------------------------

    Root@am62xx-LP-EVM:~#
    root@am62xx-LP-EVM:~#[ 2556.944600] am65-cpsw-Nuss 8000000.Ethernet eth0:链路断开
    [2558.992644] am65-cpsw-Nuss 8000000.Ethernet eth0:链路接通 — 1Gbps/full — 流控制 Rx/TX
    [2559.001307] m_can_platform 4e08000.can mcu_mcan0:msg 在 rxf0 中丢失
    [2559.007695] m_can_platform 4e08000.can mcu_mcan0:msg 在 rxf0 中丢失
    [2559.014058] m_can_platform 4e08000.can mcu_mcan0:msg 在 rxf0 中丢失
    [2559.020420] m_can_platform 4e08000.can mcu_mcan0:msg 在 rxf0 中丢失
    [2559.026776] m_can_platform 4e08000.can mcu_mcan0:msg 在 rxf0 中丢失
    [2559.033128] m_can_platform 4e08000.can MCU_mcan0:msg 在 rxf0 中丢失
    [2559.039464] m_can_platform 4e08000.can mcu_mcan0:msg 在 rxf0 中丢失
    [2559.045808] m_can_platform 4e08000.can MCU_mcan0:msg 在 rxf0 中丢失
    [2559.052141] m_can_platform 4e08000.can MCU_mcan0:msg 在 rxf0 中丢失
    [2559.058477] m_can_platform 4e08000.can mcu_mcan0:msg 在 rxf0 中丢失
    [2559.064817] m_can_platform 4e08000.can mcu_mcan0:msg 在 rxf0 中丢失
    [2559.071156] m_can_platform 4e08000.can mcu_mcan0:msg 在 rxf0 中丢失
    [2559.077497] m_can_platform 4e08000.can mcu_mcan0:msg 在 rxf0 中丢失

    ----------------------------

    此致

      Semon

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

    您好、Spatton

      请帮助调查此问题、  

      当启用 main_mcan0 进行接收时、  

      发生了相同的问题、即使 MAIN_mcan0 处于中断模式、

      --------------------------------

    MAIN_mcan0 7E7 [8] 79 0C 4A 30 59 31 17 5B
    main_mcan0 [ 504.345705] m_can_poll 1063、工作 64、配额 64
    ^CF 43 30 FD C0 1E
    [ 504.355499] m_can_platform 20701000.can main_mcan0:msg 在 rxf0 中丢失
    root@am62xx-LP-EVM:~#[ 504.363715] m_can_poll 1063、工作 64、配额 64
    [ 504.370015] m_can_platform 20701000.can main_mcan0:msg 在 rxf0 中丢失
    [ 504.376520] m_can_poll 1063、工作 64、配额 64
    [ 504.380981] m_can_platform 20701000.can main_mcan0:msg 在 rxf0 中丢失
    [ 504.387483] m_can_poll 1063、工作 64、配额 64
    [504.391945] m_can_platform 20701000.can main_mcan0: msg 在 rxf0 中丢失
    [ 504.398455] m_can_poll 1063、工作 64、配额 64
    [ 504.402920] m_can_platform 20701000.can main_mcan0:msg 在 rxf0 中丢失
    [ 504.409422] m_can_poll 1063、工作 64、配额 64
    [504.413885] m_can_platform 20701000.can main_mcan0: msg 在 rxf0 中丢失
    [504.420394] m_can_poll 1063、工作 64、配额 64
    [504.424862] m_can_platform 20701000.can main_mcan0: msg 在 rxf0 中丢失
    [ 504.431364] m_can_poll 1063、工作 64、配额 64
    [504.435829] m_can_platform 20701000.can main_mcan0: msg 在 rxf0 中丢失
    [ 504.442324] m_can_poll 1063、工作 64、配额 64
    [504.446807] m_can_platform 20701000.can main_mcan0: msg 在 rxf0 中丢失
    [504.453306] m_can_poll 1063、工作 64、配额 64
    [504.457773] m_can_platform 20701000.can main_mcan0: msg 在 rxf0 中丢失
    [ 504.464274] m_can_poll 1063、工作 64、配额 64
    [ 504.468742] m_can_platform 20701000.can main_mcan0:msg 在 rxf0 中丢失

    ------------------------------------------------

    问题是 m_can 无法快速接收帧、  

    停止 TX 后、它将从错误中恢复、

    ----------------------------

    此致

      Semon

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

    您好、

    您能说明一下如何设置电路板吗? 您使用的是哪种收发器?

    在 AM62 上、当它接收到帧时、正在使用哪个程序从 CAN 接口读取帧?

    此致、

    Schuyler

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“35205" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1561905/am625-can-overrun-issue/6041873

    您能说明一下如何设置电路板吗? 您使用的是哪种收发器?

    在 AM62 上、当它接收到帧时、正在使用哪个程序从 CAN 接口读取帧?

    此致、

    [/报价]

    嗨、 Schuyler

      将 AM62 main_mcan0(具有 CAN 收发器 SN65HVD230)连接 到 J722S MCU_mcan0(其他电路板也相同)。  

    --------------------------------------------------------------------------------

    使用以下命令从 J722S 发送流量:

    --------------------------------------------------------

     cangen mcu_mcan0 -g 0 -p 10 -x

    ------------------------------------------------

    然后、拔下/插入 SK-AM62x-LP 的 eth0 电缆、将打印以下日志:

    ------------------------------------------------------------

     [ 504.370015] m_can_platform 20701000.can main_mcan0:msg 在 rxf0 中丢失
    [ 504.376520] m_can_poll 1063、工作 64、配额 64
    [ 504.380981] m_can_platform 20701000.can main_mcan0:msg 在 rxf0 中丢失
    [ 504.387483] m_can_poll 1063、工作 64、配额 64
    [504.391945] m_can_platform 20701000.can main_mcan0: msg 在 rxf0 中丢失
    [ 504.398455] m_can_poll 1063、工作 64、配额 64
    [ 504.402920] m_can_platform 20701000.can main_mcan0:msg 在 rxf0 中丢失
    [ 504.409422] m_can_poll 1063、工作 64、配额 64
    [504.413885] m_can_platform 20701000.can main_mcan0: msg 在 rxf0 中丢失
    [504.420394] m_can_poll 1063、工作 64、配额 64
    [504.424862] m_can_platform 20701000.can main_mcan0: msg 在 rxf0 中丢失
    [ 504.431364] m_can_poll 1063、工作 64、配额 64
    [504.435829] m_can_platform 20701000.can main_mcan0: msg 在 rxf0 中丢失

    ------------------------

    如果停止 CAN 流量、AM62x 可以恢复、  

    按照 AM62X 可以测试设置中的步骤进行操作。

    4.1.7.如何在 Linux 中启用 MCAN—Processor SDK AM62x 文档

    此致

      Semon

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

    您好、

    感谢您提供测试设置的数据。

    - AM62a 上是否有一个程序、例如 candump、从 CAN 接口读取帧?

    -如果我正在正确地读取 cangen 命令消息,它们之间没有间隙。 是否可以在此处描述用例? 是否需要这种级别的流量?

    -请注意、没有流量控制方法、因此如果系统正在执行其他操作、并且无法将帧从 CAN 缓冲区中取出、则会发生丢弃帧的情况。  

    此致、

    Schuyler

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“35205" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1561905/am625-can-overrun-issue/6047120

    - AM62a 上是否有一个程序、例如 candump、从 CAN 接口读取帧?

    -如果我正在正确地读取 cangen 命令消息,它们之间没有间隙。 是否可以在此处描述用例? 是否需要这种级别的流量?

    -请注意、没有流量控制方法、因此如果系统正在执行其他操作、并且无法将帧从 CAN 缓冲区中取出、则会发生丢弃帧的情况。  

    [/报价]

    嗨、 Schuyler

        AM62X 上没有运行 candump、  

      2.是 cangen 发送没有间隙,但它不能超过 CAN 最大速度 1M BSP

      3、是的、如果降低发送速度、就不会出现帧丢失、您认为 AM62X 接收帧不能低于 1Mbps 是否合理?

    此致

      Semon