第五课--MicroWRT I2C 使用

来自Microduino Wikipedia
跳转至: 导航搜索

本片教程主要介绍如何添加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里添加I2C

1. 在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系统中使用的外部设备。 它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。