设备树
- 硬件电路图如下:
由上图所示硬件使用的是I2C通道5,
2. 查找exnos4412的datasheet 29.6.1节,对应的基地址为0x138B0000。
3. 由上图可知中断引脚复用的是GPX3_3。
4. mpu6050从设备地址为0x68。
根据图1 可知 AD0接地的 值为 0
参考mpu6050的datasheet,如下:
可知从设备地址为0x68;
linux内核中三星已经为I2C控制器和设备节点的编写提供了说明手册:
\Documentation\devicetree\bindings\i2c\i2c-s3c2410.txt
该文档提供了一个具体范例,如下:
Example:
i2c@13870000 {
compatible = "samsung,s3c2440-i2c";
reg = <0x13870000 0x100>;
interrupts = <345>;
samsung,i2c-sda-delay = <100>;
samsung,i2c-max-bus-freq = <100000>;
/* Samsung GPIO variant begins here */
gpios = <&gpd1 2 0 /* SDA */
&gpd1 3 0 /* SCL */>;
/* Samsung GPIO variant ends here */
/* Pinctrl variant begins here */
pinctrl-0 = <&i2c3_bus>;
pinctrl-names = "default";
/* Pinctrl variant ends here */
#address-cells = <1>;
#size-cells = <0>;
wm8994@1a {
compatible = "wlf,wm8994";
reg = <0x1a>;
};
};
注意:三星的exynos4412的i2c控制器驱动仍然沿用了s3c2410的驱动。
综上,最终I2C设备树节点编写如下:
i2c@138B0000 { 基地址是 138B0000
samsung,i2c-sda-delay = <100>;
samsung,i2c-max-bus-freq = <20000>;
pinctrl-0 =<&i2c5_bus>; 通道5
pinctrl-names = "default";
status = "okay";
mpu6050-3-asix@68 {
compatible = "invensense,mpu6050";
reg= <0x68>; 从设备地址
interrupt-parent = <&gpx3>; 中断父节点
interrupts= <3 2>; 中断index=3,中断触发方式:下降沿触发
};
};
其中 外面节点 i2c@138B0000{}是i2c控制器设备树信息,子节点;mpu6050-3-asix@68{}是从设备mpu6050的设备树节点信息。
更多Linux arm信息,请关注公众号 一口Linux