嵌入式爱好者

查看: 83308|回复: 6

[Linux] 扩展CAN芯片MCP2515的驱动移植问题

[复制链接]

2

主题

4

帖子

18

积分

扫一扫,手机访问本帖
发表于 2021-6-15 14:12:15 | 显示全部楼层 |阅读模式
本帖最后由 bolin123 于 2021-6-15 14:15 编辑

Hi,
    我们用在飞凌A40i_C核心板扩展了一路CAN接口,是用SPI2总线连接MCP2515芯片。
我看到内核已经支持该芯片的驱动,但是需要修改内核设备树文件。
飞凌有个2410里面好像用的也是这个扩展芯片,能否提供一下MCP2515驱动设备树文件,或者移植方案。
下面是我们的硬件设计,用的是SPI2,中断管脚是G20_SPI2_CS1


微信截图_20210615141333.png
BR.
回复

使用道具 举报

0

主题

1173

帖子

2203

积分

发表于 2021-6-15 15:41:57 | 显示全部楼层
以下为例子,设备树linux-3.10/arch/arm/boot/dts/sun8iw11p1-OKA40i_C.dts里把cs换成2515就行
&spi2 {
      status = "okay";

      mcp2515_2:mcp2515_2@0 {
                 #address-cells=<1>;
                 #size-cells=<1>;
                 compatible = "microchip,mcp2515_2";
                 pinctrl-names = "default";
                 reg=<0>;
                 spi-max-frequency = <5000000>;
                 clocks = <&mcp251x_clock>;
                 interrupt-parent = <&pio>;
                 interrupts = <27 0>;
     };
/*
     spidev_cs0:spi2_cs0@0{
                 #address-cells=<1>;
                 #size-cells=<1>;
                 compatible = "spidev";
                 spi-max-frequency = <1000000>;
                 reg               = <0>;
                 mode=<0>;
     };
*/
};
点评回复 支持 反对

使用道具 举报

0

主题

2

帖子

22

积分

A40i/T3/T507/T527通行证

发表于 2021-7-4 16:27:50 | 显示全部楼层
您好,MCP2515的设备树配置,有两点不明白,clocks = <&mcp251x_clock>;这个时钟在哪
点评回复 支持 反对

使用道具 举报

0

主题

1173

帖子

2203

积分

发表于 2021-7-5 08:34:48 | 显示全部楼层
您需要在驱动中寻找这个时钟
点评回复 支持 反对

使用道具 举报

0

主题

2

帖子

22

积分

A40i/T3/T507/T527通行证

发表于 2021-7-10 17:05:35 | 显示全部楼层
想同时驱动两个mcp2515,设备树这个配置可行吗

        clocks {
                mcp251x_clock:mcp251x_clock{
                        compatible = "fixed-clock";
                        #clock-cells = <0>;
                        clock-frequency = <8000000>;
                };
        };       



&spi1 {
      status = "okay";

          mcp2515:mcp2515@0 {
                 #address-cells=<1>;
                 #size-cells=<1>;
                 compatible = "microchip,mcp2515";
                                 pinctrl-names = "default";
                                 reg=<0>;
                 spi-max-frequency = <1000000>;
                 clocks = <&mcp251x_clock>;
                                 interrupt-parent = <&pio>;
                                 interrupts = <8 0>;
        };
};

&spi2 {
      status = "okay";

          mcp2515_1:mcp2515@1 {
                 #address-cells=<1>;
                 #size-cells=<1>;
                 compatible = "microchip,mcp2515";
                                 pinctrl-names = "default";
                                 reg=<0>;
                 spi-max-frequency = <1000000>;
                 clocks = <&mcp251x_clock>;
                                 interrupt-parent = <&pio>;
                                 interrupts = <23 0>;
        };

};

时钟用同一个没问题吧,这样能生成can0和can1吗
点评回复 支持 反对

使用道具 举报

0

主题

158

帖子

385

积分

LS1012A通行证LS1043A\46A通行证A40i/T3/T507/T527通行证i.MX8MM通行证RK3399通行证LS1028A通行证AM5718通行证Hi3519A通信证AM335x通行证i.MX6UL通行证i.MX RT通行证i.MX6Q通行证XX18通行证TCU通行证FDU产品通行证FCU1401通行证FCU1301通行证FCU11xx通行证FCU1201通行证FCU2301/FCU2302通行证FCU2401通行证5G转接卡通行证

发表于 2021-7-14 08:46:33 | 显示全部楼层
2401上做的是两路can,配置如下:
&spi1 {
      status = "okay";

      mcp2515_1:mcp2515_1@0 {
                 #address-cells=<1>;
                 #size-cells=<1>;
                 compatible = "microchip,mcp2515_1";
                 pinctrl-names = "default";
                 reg=<0>;
                 spi-max-frequency = <2000000>;
                 clocks = <&mcp251x_clock>;
                 interrupt-parent = <&pio>;
                 interrupts = <22 0>;
     };
};

&spi2 {
      status = "okay";

      mcp2515_2:mcp2515_2@0 {
                 #address-cells=<1>;
                 #size-cells=<1>;
                 compatible = "microchip,mcp2515_2";
                 pinctrl-names = "default";
                 reg=<0>;
                 spi-max-frequency = <2000000>;
                 clocks = <&mcp251x_clock>;
                 interrupt-parent = <&pio>;
                 interrupts = <27 0>;
     };
/*
     spidev_cs0:spi2_cs0@0{
                 #address-cells=<1>;
                 #size-cells=<1>;
                 compatible = "spidev";
                 spi-max-frequency = <1000000>;
                 reg               = <0>;
                 mode=<0>;
     };

点评

interrupts = ; 这个接收中断指的是哪个管脚,PA27吗? 如果我把中断管脚换成SPI2_CS1 -- PB13应该是哪个数值?  详情 回复 发表于 2021-8-9 10:10
点评回复 支持 反对

使用道具 举报

2

主题

4

帖子

18

积分

 楼主| 发表于 2021-8-9 10:10:08 | 显示全部楼层
tanglu 发表于 2021-7-14 08:46
2401上做的是两路can,配置如下:
&spi1 {
      status = "okay";

interrupts = <27 0>;
这个接收中断指的是哪个管脚,PA27吗?
如果我把中断管脚换成SPI2_CS1 -- PB13应该是哪个数值?
点评回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2025-1-9 06:01

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表