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.

[参考译文] Linux/AM3352:mcp251x CAN 驱动程序集成

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/575233/linux-am3352-mcp251x-can-driver-integration

器件型号:AM3352

工具/软件:Linux

您好!

我们有自己的基于 am3352 处理器的电路板设计、我们使用 TI SDK 03.01.00.06的内核4.4.19

我们还需要集成 mcp251x CAN 驱动器。 请帮助我们了解如何在.dts 文件中进行配置?

任何配置示例都很好。

此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、如果可以帮助我忘记提到我们使用 spi0、cs0和 GPIO2_6作为 CAN 中断。

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

    mcp251x 的驱动程序是.. /drivers/net/can/spi/mcp251x.c
    您应该在内核配置文件中启用 CONFIG_CAN_MCP251X 设置。
    另外、您还可以在以下位置找到 MCP251x 器件树示例:
    。 /Documentation/devicetree/bindings/net/can/microchip、mcp251x.txt

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

    感谢你的帮助。
    我还使用来自 am335的内部 CAN0和 CAN1、因此我添加到了.dts 文件中

    CAN2:CAN@0{
    兼容="微芯片、MCP2515";
    reg =<0>;
    时钟=<16000000>;
    interrupt-parent =<&GPIO2>;
    中断=<6 0x2>;
    };

    当我启动骰子时、我看到已加载 mcp251x 驱动程序
    root@arm:~# lsmod
    模块 使用的大小未被污染
    MUSB DSP 8235 0
    Musb_hdrc 71102 1 musb_dsp
    UDC_CORE 12063 1 musb_hdrc
    子内核 193909 1 musb_hdrc
    PRU_rproc 11582 0
    ECB 1909 0
    PRUSS_INTC 7163 1 PRU_rproc
    SHA256_通用 9503 0
    SND_SoC_simple_card 8001 0
    HMAC 2735 0
    MD5 1897 0
    SHA1_generic 2621 0
    SHA1_ARM_NEON 6261 0
    SHA1_ARM 3862 1 SHA1_ARM_NEON
    OMA_AES_DRIVER 19430 0
    高斯 10892 1 PRU_rproc
    OMAP-SHIM 21513 0
    OMA_Rng 4482 0
    RNG_CORE 7538 1 OMAP-Rng
    C_CAN_platform 6590 0
    C_CAN 9514 1 c_CAN_platform
    SND_SoC_tlv320aic31xx 32164 1.
    MUSB AM335x 1426 0 [永久]
    OMA_WDT 4634 0
    mcp251x 9991 0
    CAN_DEV 12154 2 c_can、mcp251x

    我可以设置片上的内部 CAN0和 CAN1、但不能设置基于外部 mcp251x 的 CAN2

    root@arm:~# ip link set CAN0 type can bitrate 125000
    root@arm:设置 CAN0的~# IP 链路
    [593.216341] c_CAN_platform 481cc000.can CAN0:设置 BTR=1c0b BRPE=0000
    root@arm:~#
    root@arm:~# ip link set CAN1 type can bitrate 125000
    root@arm:设置 CAN1的~# IP 链路
    [604.696594] c_CAN_platform 481d0000.can CAN1:设置 BTR=1c0b BRPE=0000
    root@arm:~#
    root@arm:~# ifconfig
    CAN0 链接地址:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
    正在运行 NOARP MTU:16 Metric:1
    RX 数据包:0错误:0丢弃:0超限:0帧:0
    TX 数据包:0错误:0丢弃:0超限:0载波:0
    冲突:0 txqueuelen:10
    RX 字节:0 (0.0 B) TX 字节:0 (0.0 B)
    中断:165

    CAN1 链接地址:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
    正在运行 NOARP MTU:16 Metric:1
    RX 数据包:0错误:0丢弃:0超限:0帧:0
    TX 数据包:0错误:0丢弃:0超限:0载波:0
    冲突:0 txqueuelen:10
    RX 字节:0 (0.0 B) TX 字节:0 (0.0 B)
    中断:166

    低 链路环状图:本地环回
    iNet addr:127.0.0.1掩码:255.0.0.0
    inet6 addr:::1/128范围:Host
    正在运行 MTU:65536公制:1的上环回
    RX 数据包:0错误:0丢弃:0超限:0帧:0
    TX 数据包:0错误:0丢弃:0超限:0载波:0
    冲突:0 txqueuelen:1
    RX 字节:0 (0.0 B) TX 字节:0 (0.0 B)


    root@arm:~# ip link set CAN2 type can bitrate 125000
    找不到器件"CAN2"

    您能帮助找到我遗漏的内容吗?

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

    我仍在处理此问题、无法从 MCP2515寄存器读取数据。 始终读取0x00。
    我已使用示波器进行检查、SCLK (spi0_SCLK)、cs (spi0_cs0)、MOSI (spi0_d0)和 MISO (spi0_D1)均正常。 当我尝试读取不同的数据寄存器时、我看到来自 MISO 线路上 MCP2515的数据符合预期、但驱动程序始终读取0x00。

    这是我的.dts 配置

    MCP2515_clock:MCP2515_clock{
    兼容="固定时钟";
    #clock-cells =<0>;
    时钟频率=<16000000>;
    };

    CAN2_Pins:pinmux_CAN2_Pins{
    pinctrl-single、pins =<
    0x150 (PIN_OUTPUT | MUX_MODE0)/*(A17) spi0_SCLK.spi0_SCLK */
    0x154 (PIN_OUTPUT | MUX_MODE0)/*(B17) spi0_d0.spi0_d0 */
    0x158 (PIN_INPUT | MUX_MODE0)/*(B16) spi0_D1.spi0_D1 *
    0x15c (PIN_OUTPUT | MUX_MODE0)/*(A16) spi0_cs0.spi0_cs0 *
    0x160 (PIN_OUTPUT | MUX_MODE0)/*(C15) spi0_CS1.spi0_CS1 */
    >;

    spi0{(&S)
    状态="正常";
    pinctrl-names ="default";
    pinctrl-0 =<&CAN2_PINs>;
    TI、pidd-d0-out-d1-in;
    可以@0{
    兼容="微芯片、MCP2515";
    reg =<0>;
    SPI-max-frequency =<5000000>; // 5MHz
    interrupt-parent =<&GPIO2>;//端口2上的中断
    中断=<6 IRQ_TYPE_EDGE_FALLING >;//端口2-6
    时钟=<&MCP2515_clock>;
    };
    };

    请帮帮我们。

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

    最后、我们让它正常工作。 就是这个变化

    0x150 (PIN_INPUT_PULLUGDOWN | MUX_MODE0)/*(A17) spi0_SCLK.spi0_SCLK */

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

    BR
    Tsvetolin Shulev