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.

[参考译文] AM62A7:在 Linux 上找不到 soc mcan0实例。

Guru**** 2479845 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1439596/am62a7-soc-mcan0-instance-can-not-found-on-linux

器件型号:AM62A7

工具与软件:

您好、TI 专家:

我想在 Linux 端使用 mcan0器件。 因此、我 在 k3-am62a7-sk.dts 中添加一个新节点  、如下所示:

kernel/arch/arm64/boot/dts/ti/k3-am62a7-sk.dts:

////// Add by mason 2024/11/07 begin ////

别名{
Serial0 =&MCU_uart0;
SERIAL1 =&wkup_uart0;
SERIAL2 =&MAIN_UART0;
mmc0 =&sdhci0;
mmc1 =&sdhci1;
Ethernet0 =&cpsw_port1;
spi0 =对象0 (&O);
CAN0 =&nullmax_CAN;
};


MAIN_mcan0_PINS_DEFAULT:MAIN-mcan0-PINS-DEFAULT{
PINCTL-SINGLE、PINS =<
AM62PX_IOPAD (0x41DC、PIN_INPUT、0)/*(C18) MCAN0_RX */
AM62PX_IOPAD (0x41D8、PIN_OUTPUT、0)/*(B17) MCAN0_TX */
/* AM62PX_IOPAD (0x41D0、PIN_OUTPUT、7)(F14) UART0_CTSn、SOC_CAN0_STBz */
>;
};
Transceiver1: can-phy0 {
兼容="ti、TJA1051TK";
#phy-cells =<0>;
最大比特率=<5000000>;
};
nullmax_can:mason_canfd
状态="正常";
兼容="Bosch、m_can";
pinctrl-names ="默认值";
pinctrl-0 =<&MAIN_mcan0_PINS_DEFAULT>;
phys=<&transceiver1>;
REG =<0x00 0x20701000 0x00 0x200>
<0x00 0x20708000 0x00 0x8000>;
reg-names ="m_can"、"message_ram";
电源域=<&K3_PDS 98 TI_SCI_PD_Exclusive>;
时钟=<&K3_CLKS 98 6>、<&K3_CLKS 98 1>;
时钟名称="hclk"、"cclk";
/*======== GICSS0_COMMON_0_INTERRUPT_MAP TRM 页:1231 =====================
MCAN0_COMMON_0_MCANSS_EXT_TS_ROLLOSS_LVL_INT_0 GICSS0_COMMON_0_SPI_IN_186
MCAN0_COMMON_0_MCANSS_MCAN_LVL_INT_0 GICSS0_COMMON_0_SPI_IN_187
MCAN0_COMMON_0_MCANSS_MCAN_LVL_INT_1、GICSS0_COMMON_0_SPI_IN_188
*/
中断= 、

中断名称="int0"、"int1";
Bosch、MRAM-cfg =<0x0 128 64 64 64 32 32>;
};
////// 添加由 mason 2024/11/07结束////
};

并删除 arch/arm64/boot/dts/ti/k3-am62a-main.dtsi 中的 main_mcan0节点、如下所示:

/*
MAIN_MCAN0:CAN@20701000{
兼容="Bosch、m_can";
REG =<0x00 0x20701000 0x00 0x200>
<0x00 0x20708000 0x00 0x8000>;
reg-names ="m_can"、"message_ram";
电源域=<&K3_PDS 98 TI_SCI_PD_Exclusive>;
时钟=<&K3_CLKS 98 6>、<&K3_CLKS 98 1>;
时钟名称="hclk"、"cclk";
中断= 、

中断名称="int0"、"int1";
Bosch、MRAM-cfg =<0x0 128 64 64 64 32 32>;
状态="已禁用";
};*/

在更新 DTB 并重新启动 Linux 之后。 我找不到 CAN0器件:

我喜欢通过 dmesg 命令出错:

在 MCU1-0中、只能使用 MCU_CAN0和 MCU_CAN1。

SDK 版本:9.2  

能否帮助我分析根本原因?

谢谢。

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

    您好、您使用的是定制电路板还是 TI EVM 电路板?

    如果您的电路板没有板载收发器、则需要应用 MCAN 覆盖文件

    请参阅本文档以执行 CAN 通信:
    https://software-dl.ti.com/processor-sdk-linux/esd/AM62AX/10_00_00/exports/docs/linux/How_to_Guides/Target/How_to_test_MCAN_on_AM62x.html

    此致、
    Aparna

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

    您好、您使用的是定制电路板还是 TI EVM 电路板?

    ---定制板  

      

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

    如果您的电路板没有板载收发器、则需要应用 MCAN 覆盖文件

    --- 我添加了 一个新的收发器器件节点。

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

    您好!

    CAN 收发器支持的兼容驱动器仅如下所示:

    我在 Linux 源代码中找不到"ti、TJA1051TK"。

    TI、TJA1051TK 如何映射到 CAN 驱动器?

    此致、
    Aparna

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

    您好、Aprama.

    感谢您的答复。

    我 通过 修改 transceiver1节点的 兼容性解决了此问题、如下所示:

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

    transceiver1: can-phy1 {
    兼容="ti、tcan1042";
    #phy-cells =<0>;
    最大比特率=<5000000>;
    pinctrl-names ="默认值";
    pinctrl-0 =<&MCU_mcan1_GPIO_PINS_STB>;
    STANDBY-GPIO =<&MCU_GPIO0 23 GPIO_ACTIVE_HIGH>;
    };

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

    现在我可以在 Linux 端找到 CAN0实例:

    但出现了新问题、

    我可以通过 CAN0发送 CAN 帧:

    root@am62axx-evm:/opt/edgeai-gst-apps cansend CAN0 213##311223344
    [ 795.407307] CAN:控制器局域网核心
    [ 795.411774] NET:注册的 PF_CAN 协议系列
    [ 795.431924] CAN:RAW 协议

     我的 升级调试设备(ZLG 的 USBCANFD-200U )可以捕获 Linux 发送的 CAN 电报。  

    但是、当我尝试 通过 CAN0在 Linux 端捕获 CAN 电报时、没有什么要接收的消息:

    root@am62axx-evm:/opt/edgeai-gst-apps candump CAN0

    可以帮帮我吗?

    谢谢你。

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

    您好!

    所使用的 SDK 版本是什么?

    您能否分享您尝试从 ZLG 软件发送的 CAN 帧的快照? 我需要检查位时序配置。

    您是否尝试过所有 CAN 实例? 主域和 MCU 域 CAN 的行为是否有区别?

    此致、
    Aparna

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

    SDK Versin:9.2

    这是连接图:

    注意:通道0和 通道1 外部120欧姆电阻器、并且内部构建120欧姆电阻器是使能的、因此 CAN0和 CAN1总线电阻器为60欧姆。

    只有 MCU_CAN0和 MCU_CAN1由 MCU1-0控制、只有 SOC_CAN0由 Linux 控制。

    SoC_CAN0映射到 Linux 上的 CAN0。 SoC_CAN0由 IP 链接命令设置:

    ip link set CAN0 type CAN 比特率500000采样点0.8 dbitrate 2000000 dsample-point 0.8 berr-reporting on fd on restart ms 1000

    方案。 SoC_CAN0可以正常发送电报。  可以成功捕获 CAND ZLG 软件。

    但是、当 ZLG 向 CAN1发送电报时、 Linux CAN0 不会收到任何消息:

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

    尊敬的 Aparna:

    您对这个主题有什么想法吗?

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

    您好!

    结束该主题、因为很长时间没有响应。 如果您想继续讨论、请随意使用 ping。

    此致

    Ashwani