Linux CAN通讯(MCP2515)开发记录

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

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

mcp2515硬件介绍:

使用的接口主要是
  INT 中断线  --->   GPIOA(10)
  SCK 时钟线  --->   SPI0_CLK
  SI         --->   SPI0_MOSI
  SO         --->   SPI0_MISO
  CS         --->   SPI0_CS0
  GND        --->   GND
  VCC        --->   3.3v
对应的驱动文件目录:

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;

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值