设备树中的特殊节点

设备树用来描述一个平台上的设备信息,不仅包括SOC上的设备,还可以添加一个外设信息,简单记录一下设备树中的特殊节点的理解

地址信息

设备树中的地址信息一般用#address-cells和 #size-cells来修饰,address表示地址由几个单元组成,一个单元是一个32位的值(在32位系统上),size-cells表示地址的长度由几个单元组成,比如

    aips2: aips-bus@02100000 {
		compatible = "fsl,aips-bus", "simple-bus";
		#address-cells = <1>;
		#size-cells = <1>;
		reg = <0x02100000 0x100000>;
		ranges;

		i2c1: i2c@021a0000 {
			#address-cells = <1>;
			#size-cells = <0>;
			compatible = "fsl,imx6ul-i2c", "fsl,imx21-i2c";
			reg = <0x021a0000 0x4000>;
			interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&clks IMX6UL_CLK_I2C1>;
			status = "disabled";
		};
    }

一定要注意的是address-cells和size-cells描述的是子节点的信息,比如上面的节点中,i2c1是aips2的子节点,在aips2中指定#size-cells = <1>,#address-cells = <1>,所以在i2c1节点中的地址reg中的第一个单元0x021a0000就表示i2c1寄存器的地址,第二个单元0x4000表示地址长度,

如果是下面这样

    aips2: aips-bus@02100000 {
		compatible = "fsl,aips-bus", "simple-bus";
		#address-cells = <2>;
		#size-cells = <1>;

		i2c1: i2c@021a0000 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x021a0000 0x022a0000  0x4000>;

		};
    }

父节点中的#address-cells = <2>,#size-cells = <1>,那么在子节点i2c1中的地址reg中,就是第一个单元0x021a0000 和第二个单元0x022a0000共同组成开始地址,第三个单元0x4000表示地址长度

i2c节点内的#address-cells和#size-cells影响的是自己的子节点的表达形式,找到i2c1的子节点

&i2c1 {
	clock-frequency = <100000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c1>;
	status = "okay";

	ap3216c@1e {
		compatible = "alientek,ap3216c";
		reg = <0x1e>;
	};
};

 i2c1子节点ap3216c中,地址表示reg = <0x1e>,和上面对应起来,只有一个单元表示开始地址,没有地址长度的表示单元

不过,在i2c外设中,reg表示的就是不再是外设的起始地址了,而是外设的i2c地址,具体的表示含有根据具体的代码而定。

 

 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页