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.

[参考译文] AM3356:即使 CPU 负载较高、如何在没有任何下降或溢出的情况下接收 CAN 数据

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1340965/am3356-how-to-receive-can-data-without-any-drop-or-overrun-even-if-cpu-load-is-high

器件型号:AM3356
主题中讨论的其他器件: WL1837

您好专家

当我们在高 CAN 总线负载下接收 CAN 数据时(例如每 ms 3或4帧)
而在 CPU 负载平均值较高的情况下(例如1.8或更高)、我们会收到有关数据丢失、溢出或帧顺序更改的错误。

即使没有运行任何 CAN 数据接收进程、也会出现这些错误。
我们使用命令`ip --details link show` except frame-ordering-changing (帧顺序更改)对其进行监控,该操作由某个过程完成。

过程如下:

$ ip link set can0 type can restart-ms 100
$ ip link set can0 type can bitrate 500
$ ip link set can0 up
Some can-data-receive-process runs or not

即使 CPU 负载较高、是否有办法防止或减少这些误差?
例如、提升 CAN 设备驱动程序的优先级等。

谢谢

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

    您好!

    请告诉我有关申请的更多信息。 例如:

    • 假设是 Linux、它是 RT Linux 吗? (这将回答有关提高优先权的问题)
    • 处理器速度是多少?
    • AM335x 是否正在发起流量?

    此致、

    舒耶勒

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

    您好、Schuyler

    感谢您的答复。

    假设是 Linux,是 RT Linux 吗? (这将回答有关提高优先级的问题)

    不是、正常的 Linux。
    我希望 RT Linux 成为最后的手段。
    由于该产品正在大规模生产,并改为 RT Linux,因此这是一个很大的优势。

    处理器速度是多少?

    最大速度为800MHz 和"按需"。

    AM335x 是否正在发起流量?

    否、其他设备正在发起。
    几个器件在上电后开始发送 CAN 数据、
    我们的 AM3356产品开始接收 CAN 数据。

    此致、
    胜山市

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

    Katsuyama、您好!

    您所描述的是大量的帧、就像开机时一样。 这是否意味着在所有设备上电至稳定状态后、帧速率会降至可管理的速率、而不会出现丢包的情况?

    是否至少可以尝试性能设置而不是按需设置、以确定转换到最大速度所需的时间是否会导致丢包问题? 然后、在达到稳定状态后、或许能将处理器按要求缩放至待机状态?

    非 RT 内核仍可以设置调度策略和任务优先级、但它不如 RT 内核有效。  切换到 RT 内核将始终使处理器处于最佳性能状态。

    据我所知、CANbus 受丢帧影响、因为它们不是流控制方法。   

    此致、

    舒耶勒

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

    您好、Schuyler

    感谢您的答复。

    您所描述的是一堆帧,就像一种加电情况。 这是否意味着在所有设备加电至稳定状态后,帧速率会降至可管理的速率,而不会出现丢包的情况?

    我们不仅在通电后而且在稳定状态下看到丢弃的数据包。

    是否至少可以尝试性能设置而不是按需设置来确定转换到最大速度所需的时间是否导致丢包问题? 然后、在达到稳定状态后、或许可以将处理器缩放到按需模式?

    我们尝试了具有"性能"调速器模式的800MHz (最大速度)。
    结果减少了帧下降。
    但鉴于电流消耗和温度、我的客户想要使用"按需"模式。
    因此、我将尝试将"up_threashold"值更改为较小的值、以便时钟快速调整。

    非 RT 内核仍然可以设置调度策略和任务优先级,但它不如 RT 内核有效。  切换到 RT 内核将始终使处理器达到最高性能。

    我稍微尝试了 RT 内核。
    对于抢占模型的"完全可抢占内核(RT)"、当启用了 WL1837的 WiFi 时、操作系统会锁定。
    如果是"可抢占内核(基本 RT)"、则在引导2秒后出现内核严重错误。
    对于"可抢占内核(低延迟桌面)"、内核似乎运行良好。
    我将在下周执行实际的 CAN 接受测试。

    CANBUS 在我的知识是受丢帧的影响,因为它们不是流控制的方法。

    是的、我同意您的观点。 但我的客户希望获得最小的帧丢失。

    谢谢。
    胜山市

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

    您好、Schuyler

    今天我尝试了 RT Linux 内核5.10。
    结果不好。
    插入和拔下以太网电缆时 以及 WiFi 通信期间发生压降。


    会议:
    - CPU 时钟800Mhz (固定)
    -低 CPU 负载
    -没有 CAN 接收流程

    是否应该提高 CAN IRQ 优先级?
    如果是、我该怎么做?

    顺便说一下、我有两款使用 AM3356的产品。
    一个有4.19内核版本,另一个有5.10内核版本。
    这一次我尝试了5.10。
    我发现没有"完全可抢占内核(RT)"和"可抢占内核(基本 RT)"
    5.10的 menuconfig 中的选择。  (仅限"可抢占内核(低延迟台式机)")

    此致、
    胜山市

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

    您好!

    您是否下载了适用于 AM335x 的 TI RT SDK? 或者正在尝试修补内核树?  
    命令 uname -a 在响应中是否有此 preempt_rt?

    此致、

    舒耶勒

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

    您好、Schuyler

    `uname -a result`的结果如下所示:
    Linux am335x-evm5.10.100-rt62+#1 preempt_rt 星期五3月29日08:27:08 UTC 2024 armv7l GNU/Linux

    抢占模型为"完全可抢占内核(RT)"。
    在我的最后一篇文章中,我说内核5.10没有"完全可抢占内核(RT)"。
    但事实并非如此。 完整模型是可用的。

    我制作 RT Linux 的方法如下:
    1.$ export ARAGO_RT_ENABLE=1
    2.$ bitbake linux-ti-staging -rt
    3.从复制内核源代码
    ".../tisdk/build/arago-tmp.../work-shared/am335x-evm/kernel-source "至工作目录。
    4.应用我的自定义增补程序。
    5.将我的.config 文件复制到工作目录。
    6.在工作目录中输入$ make menconfig。
    7.$制造
    8.在目标板上部署内核和模块。

    似乎有些中断会导致 CAN 帧丢失。

    我想提高 CAN 的优先级。

    此致、
    胜山市

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

     Katsuyama、您好!

    有几个问题、您是否使用 TI 分期分支来构建 RT 内核? 您是否  对5.10使用 git.ti.com/.../ti-linux-kernel 诊断树?

    至于提高 CAN 优先级,您将使用 chrt 命令来设置优先级和调度策略。 请附加 ps 命令和命令 cat /proc/interrupts.的结果

    此致、

    舒耶勒

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

    您好、Schuyler

    您是否正在使用 TI 分期分支来构建 RT 内核?

    >您是否正在使用 git.ti.com/.../ti-linux-kernel 树中的5.10?

    我正在使用 git.ti.com/.../ti-linux-kernel (不使用 cgit,因为 URL 错误)

    对于4.19内核版本、我把 ksoftirq 的优先级更改为99、然后我就能获得非常好的
    结果不仅适用于 RTLinux、也适用于正常的 Linux、但除外。
    普通 Linux 的效果略小于 RTLinux 的效果、但似乎可以接受。
    感谢您发送编修。

    但是、帧顺序更改仍然发生在4.19和5.10内核中。
    所以,我的下一个评价是这个。
    我找到了有关此内容的下一个 URL。
    e2e.ti.com/.../4630486

    这是硬件或设备驱动程序的问题吗?
    有没有解决这个问题的办法?


    如何更改优先级:
    我也感谢你的下一篇文章。
    e2e.ti.com/.../linux-am4379-how-to-change-interrupt-priority-for-ethernet

    然后我就这样做了。

    $ cat /proc/interrupts
    CPU0
    16:20637 INTC 68 LEVEL gp_TIMER
    18:0 INTC 3级 ARM-PMU
    19:1个 INTC 78级 wkup_m3_txev
    ...
    41:0 INTC 52电平 CAN0
    42:0 INTC 55电平 CAN1
    ...
    73:4 4804c000.GPIO 29边缘 wl18xx
    74:0 icm20648-dev1边缘 icm20648_consumer1
    ERR:0

    $ ps -A | grep IRQ
    PS -A | grep IRQ
    9? 00:00:00 ksoftirqd/0
    49? 00:00:00 IRQ/55-TI-am335
    50? 00:00:00 IRQ/60-4803C000
    51? 00:00:00 IRQ/59-4803C000
    52? 00:00:00 IRQ/35-4802A000
    53? 00:00:00 IRQ/36-4819c000
    54? 00:00:00 IRQ/62-48060000
    818? 00:00:00 IRQ/74-icm20648
    1467? 00:00:00 IRQ/73-wl18xx

    $ chrt -p 99 9
    根@AM335x-EVM:~支持
    $ chrt -p 9
    PID 9的当前调度策略: SCHED_RR
    PID 9的当前调度优先级: 99

    谢谢

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

    您好、Schuyler

    以下是否有任何更新?

    但是、帧顺序更改仍然发生在4.19和5.10内核中。
    所以,我的下一个评价是这个。
    我找到了有关此内容的下一个 URL。
    e2e.ti.com/.../4630486

    这是硬件或设备驱动程序的问题吗?
    有没有解决这个问题的办法?

    [/报价]

    此致、
    胜山市