您的当前位置:首页正文

Linux CAN通讯(MCP2515)开发记录

来源:九壹网

回顾一下Linux平台下外挂MCP2515实现CAN通讯

Linux内核本身就已经包含MCP2515器件的驱动,因此只需要简单配置一下相关的硬件接口即可,如SPI接口,中断接口。并使能驱动即可。

mcp2515硬件介绍:

kernel/drivers/net/can/spi/mcp251x.c

以RK3399平台为例,设备树配置如下:

mcp251x_clk: mcp251x-clk {
        compatible = "fixed-clock";
        #clock-cells = <0>;
        clock-frequency = <20000000>;
    };

&spi1 {
    status = "okay";
    max-freq = <48000000>;

	mcp2515_2: can@0 {
		status = "okay";
		compatible = "microchip,mcp2515";
		reg = <0x00>;
		clocks = <&mcp251x_clk>;
        pinctrl-names = "default";
		pinctrl-0 = <&can1_pins>;
		interrupt-parent = <&gpio2>;
		interrupts = <24 IRQ_TYPE_EDGE_FALLING>;//GPIO2_D0
		spi-max-frequency = <2000000>;
		poll_mode = <0>;
		enable_dma = <1>;
        vdd-supply = <&vcc3v3_sys>;
        xceiver-supply = <&vcc3v3_sys>;
	};
};

需要注意的问题点:

1、CAN波特率无法达到1M

需要提高MCP2515的晶振频率,8M无法实现,推荐20M.

2、在高速通讯时报,No buffer space available

需要修改发送缓冲区大小,默认为10 ,可以根据需要扩大,如1000

在static int mcp251x_can_probe(struct spi_device *spi)中添加:

net->netdev_ops = &mcp251x_netdev_ops;
net->flags |= IFF_ECHO;
net->tx_queue_len=1000;

因篇幅问题不能全部显示,请点此查看更多更全内容

Top