第五课--MicroWRT I2C 使用
Shengkai81@gmail.com(讨论 | 贡献)2015年5月31日 (日) 07:55的版本
|
本片教程主要介绍如何添加I2C驱动,在linux系统中,I2C设备的驱动从硬件上可以通过两种方式来实现,一是通过2个GPIO口来模拟I2C总线, 这也是GPIO引脚复用的结果。另外一种是通过I2C控制器来操作I2C设备。这两种驱动的方式也不尽相同。第一种方式的特点是,应用层程序员 要熟悉相关的硬件,在用户层程序中封装I2C消息结构,并完成时序的控制。第二中方式可以充分利用linux i2c子系统的功能,用户不需要知道太多 的硬件信息,通过API来完成对设备的访问。本教程主要介绍第一种方式,来添加I2C驱动。并且分别介绍在kernel和openwrt中配置,添加I2C驱动。 在kernel 中添加I2C 驱动1.本教程中使用MZK-750DHP.dts,打开文件并添加如下代码。 $vim MZK-750DHP.dts
palmbus@10000000 {
... ...
i2c@900 {
compatible = "ralink,mt7620n-i2c", "ralink,rt2880-i2c";
reg = <0x900 0x100>;
resets = <&rstctrl 16>;
reset-names = "i2c";
#address-cells = <1>;
#size-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&i2c_pins>;
status = "okay";
};
... ...
};
2.下面代码是将i2c引脚释放为gpio,因此要将里i2c从ralink,group里去掉。 修改之后的代码如下: pinctrl {
state_default: pinctrl0 {
gpio {
ralink,group = "spi refclk", "rgmii1","wled";
ralink,function = "gpio";
};
};
i2c_pins: i2c {
i2c {
ralink,group = "i2c";
ralink,function = "i2c";
};
};
};
3.在kernel里配置I2C $make kernel_menuconfig 文件:I2c-1.jpg I2C Configuration 文件:I2c-2.jpg I2C Configuration 文件:I2c-3.jpg I2C Configuration 文件:I2c-4.jpg I2C Configuration 为了方便i2c设备的检测,需要配置i2c-tools。如下: 文件:I2c-13.jpg I2C-tools Configuration 4:编译: $make 5:刷新固件 将新固件重新烧写到microWRT上,在microWRT上执行以下操作 $cd /dev $ls 可以看到i2c-0 文件:I2c-11.png I2C Configuration $ls -all i2c-0 文件:I2c-12.png I2C Configuration 添加i2c 驱动成功。 在openWRT里添加I2C1. 在trunk 目录下运行如下命令 $make menuconfig 文件:I2c-7.jpg I2C Configuration 文件:I2c-8.jpg I2C Configuration 文件:I2c-9.jpg I2C Configuration 编译完成后,会生成i2c-dev.ko,用如下命令加载驱动并查看。 $insmod i2c-dev.ko $cd /dev $ls 文件:I2c-11.png I2C Configuration dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。 它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。
|