ALPHA开发板修改CAN的设备树节点信息

一. 简介

上一篇文章通过查看 CAN硬件原理图知道了 CAN1接口对应的IO。文章地址如下:

ALPHA开发板中CAN硬件图-CSDN博客

通过ALPHA开发板上的 CAN接口的硬件原理图知道,CAN1_TX 和 CAN1_RX 是 I.MX6ULL的 FlexCAN1 的发送和接收引脚,分别对应 I.MX6ULL 的 UART3_CTS 和 UART3_RTS 这两个引脚。

二.  ALPHA开发板修改CAN的设备树节点信息

NXP 原厂提供的设备树已经配置好了 FlexCAN 的节点信息 (FlexCAN1 FlexCAN2) ,但是,我们还是要来看一下如何配置 I.MX6ULL CAN1 节点。
首先看一下 I.MX6ULL FlexCAN 设备树绑定文档。
打开 Documentation/devicetree/bindings/net/can/ fsl-flexcan.txt ,此文档描述了FlexCAN 节点下的相关属性信息,这里就不做介绍了,大家自行查阅。

1FlexCAN1 引脚节点信息

注意:这里开发板使用的 Nand-Flash版ALPHA开发板。所以,对应的设备树文件为 imx6ull-alientek-nand.dts,而 imx6ull-alientek-nand.dts调用了imx6ull-14x14-evk.dts设备树文件。

首先肯定是 CAN1 引脚配置信息,打开 imx6ull-14x14-evk.dts ,找到如下所示内容:
    pinctrl_flexcan1: flexcan1grp{
			fsl,pins = <
				MX6UL_PAD_UART3_RTS_B__FLEXCAN1_RX	0x1b020
				MX6UL_PAD_UART3_CTS_B__FLEXCAN1_TX	0x1b020
			>;
		};
3 和第 4 行将 UART3_RTS UART3_CTS 这两个引脚分别复用为 FlexCAN1 RX 和 TX ,电气属性都设置为 0x1b020

2. FlexCAN1 控制器节点信息

打开 imx6ull.dtsi 文件,找到名为 “ flexcan1 ” 的节点,内容如下:
			flexcan1: can@02090000 {
				compatible = "fsl,imx6ul-flexcan", "fsl,imx6q-flexcan";
				reg = <0x02090000 0x4000>;
				interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
				clocks = <&clks IMX6UL_CLK_CAN1_IPG>,
					 <&clks IMX6UL_CLK_CAN1_SERIAL>;
				clock-names = "ipg", "per";
				stop-mode = <&gpr 0x10 1 0x10 17>;
				status = "disabled";
			};
上面的代码 中的 flexcan1 节点不需要我们修改,这里只是告诉大家 FlexCAN1 完整节点信息。
根据第 2 行的 compatible 属性就可以找到 I.MX6ULL FlexCAN 驱动源文件, 驱动文名为 drivers/net/can/flexcan.c
9 行的 status 属性为 disabled ,所以 FlexCAN1 默认关闭 的。

imx6ull-14x14-evk.dts 中添加使能 FlexCAN1 的相关操作,这里 "&flexcan1"的意思是在 "flexcan1"设备节点上进行添加信息的意思。找到如下所示代码:
&flexcan1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_flexcan1>;
	xceiver-supply = <&reg_can_3v3>;
	status = "okay";
};
3 行,指定 FlexCAN1 所使用的 pinctrl 节点为 pinctrl_flecan1,也就是上面 pinctrl_flexcan1 这个引脚节点信息 : pinctrl 节点。
4 行, xceiver-supply 属性指定 CAN 收发器的电压为 3.3V
5 行,将 flexcan1 节点的 status 属性改为 “ okay ”,也就是使能 FlexCAN1

3.  关闭 FlexCAN2 相关节点

I.MX6ULL 带有两个 CAN 控制器:FlexCAN1 FlexCAN2NXP 官方的 EVK 开发板这两个 CAN 接口都用到了,因此,NXP 官方的设备树将这两个 CAN 接口都使能了。

但是,正点 原子的 I.MX6U-ALPHA 开发板将 FlexCAN2 IO 分配给了 ECSPI3,所以正点原子的 I.MX6ULL-ALPHA 开发板就不能使用 CAN2,否则的话, ECSPI3 外设就无法使用。

所以,关闭 FlexCAN2 节点很简单,在 imx6ull-14x14-evk.dts 文件中找到名为 “flexcan2” 的节点,然后将其屏蔽掉即可。 如下:

/*
&flexcan2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_flexcan2>;
	xceiver-supply = <&reg_can_3v3>;
	status = "okay";
};
*/

重新编译设备树,进入 kernel内核源码(NXP官方的Kernel源码)的根目录下,运行如下命令:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga$ make dtbs
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: “include/generated/mach-types.h”已是最新。
  CHK     include/generated/bounds.h
  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  DTC     arch/arm/boot/dts/imx6ull-14x14-evk.dtb
  DTC     arch/arm/boot/dts/imx6ull-14x14-evk-btwifi.dtb
  DTC     arch/arm/boot/dts/imx6ull-14x14-evk-emmc.dtb
  DTC     arch/arm/boot/dts/imx6ull-14x14-evk-gpmi-weim.dtb
  DTC     arch/arm/boot/dts/imx6ull-alientek-nand.dtb
  DTC     arch/arm/boot/dts/imx6ull-14x14-evk-usb-certi.dtb
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga$ 

可以看出,设备树文件 imx6ull-alientek-nand.dtb重新编译并生成。接下来将开发板上电后加载设备树文件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值