CAN控制器芯片MCP2510调试记录

本文详细记录了在ARM平台上配置CAN控制器MCP2510的过程,包括内核选项设置、设备树DTS修改、代码初始化和SPI通信调试。遇到的问题如接口启动错误、收发包问题通过逐步排查,最终解决于电压不匹配导致的SPI速率降低。

CAN控制器芯片MCP2510调试记录

配置CAN内核选项

配置CAN相关的内核选项,将下面几项配置添加到defconfig中:

kernel/arch/arm/configs/xxx_defconfig
CONFIG_CAN=y
CONFIG_CAN_RAW=y
CONFIG_CAN_BCM=y
CONFIG_CAN_GW=y
CONFIG_CAN_DEV=y
CONFIG_CAN_CALC_BITTIMING=y
CONFIG_CAN_MCP251X=y

在defconfig添加了配置后就不用手动配置了。要手动配置可以进入kernel目录,打开menuconfig配置。

make ARCH=arm menuconfig
进入这个路径配置can相关配置:Networking support ---> CAN bus subsystem support

修改驱动配置

有两种改法,选其一即可。

  1. 设备树DTS文件中修改
&spi2 {
	status = "okay";

	can@0 {
		compatible = "microchip,mcp2510";
		reg = <0>;
		clocks = <&xin16m>;

		// GPIO中断
		interrupt-parent = <&gpio3>;
		interrupts = <10 GPIO_ACTIVE_LOW>; // CAN_INT [21]

		// 不同电压支持的SPI最大速率不同,SPI: VDD = 3.0V to 4.5V, 2.5MHz
		spi-max-frequency = <2500000>;

		pinctrl-names = "default";
		pinctrl-0 = <&can_pin_ctrl &can_int>;

		// SPI的极性与相位 默认是0,0
		//spi-cpha = <1>;
		//spi-cpol = <1>;
	};
};

&pinctrl {
	can {
		can_int: can-int {
			rockchip,pins = <3 10 RK_FUNC_GPIO &pcfg_pull_up>; // CAN_INT [21]
		};

		can_pin_ctrl: can-pin-ctrl {
			rockchip,pins = <4 27 RK_FUNC_GPIO &pcfg_pull_none>, // CAN_STB [21]
						<3 17 RK_FUNC_GPIO &pcfg_pull_up>, // CAN_RST [21]
						<3 11 RK_FUNC_GPIO &pcfg_pull_none>, // CAN_RXB0 [21]
						<3 12 RK_FUNC_GPIO &pcfg_pull_none>, // CAN_RXB1 [21]
						<3 13 RK_FUNC_GPIO &pcfg_pull_up>, // CAN_TXB0 [21]
						<3 14 RK_FUNC_GPIO &pcfg_pull_up>, // CAN_TXB1 [21]
						<3 15 RK_FUNC_GPIO &pcfg_pull_up>; // CAN_TXB2 [21]
		};
	};
};

/ {
	// 这里是配置MCP2510使用的外部时钟,16MHz
	xin16m: xin16m {
		compatible = "fixed-clock";
		clock-frequency = <16000000>;
		clock-output-names = "xin16m";
		#clock-cells = <0>;
	};
};
  1. 代码中初始化结构体
    不想改设备树文件,可以直接改代码,找到驱动文件drivers/net/can/spi/mcp251x.c,在文件中添加:“static

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值