设备树中的特殊节点

设备树用来描述一个平台上的设备信息,不仅包括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地址,具体的表示含有根据具体的代码而定。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值