I2C的玩法

来自WRTnode Wiki
跳转至: 导航搜索
其他语言:
English • ‎中文(中国大陆)‎

驱动配置配置

make menuconfig 
Kernel modules  --->   I2C support  --->  <*> kmod-i2c-gpio-custom.

I2c-gpio.png

打patch

这个patch是为了解决卸载驱动后无法再次加载的问题(如果不再次加载,可以忽略)

--- a/package/kernel/i2c-gpio-custom/src/i2c-gpio-custom.c	2014-07-01 11:30:31.149861607 +0000
+++ b/package/kernel/i2c-gpio-custom/src/i2c-gpio-custom.c	2015-07-28 08:15:20.000000000 +0000
@@ -96,7 +96,7 @@
static void i2c_gpio_custom_cleanup(void)
{
    int i;
    for (i = 0; i < nr_devices; i++)
        if (devices[i])
-           platform_device_put(devices[i]);
+           platform_device_unregister(devices[i]);
}
 static int __init i2c_gpio_custom_add_one(unsigned int id, unsigned int *params)

为i2c-gpio做准备

默认WRTNODE.dts:gpio#1作为复位键, gpio#38作为led
如果你需要用到这两个gpio作为i2c的引脚,则需要在dts中去掉这两个gpio的占用,例如,我使用gpio#1和gpio#2作为i2c的引脚,则我需要去掉gpio#1的注册
修改WRTNODE.dts这个文件: (在两端添加注释符号,将gpio#1的注册注释掉)
vim WRTNODE.dts

+/*
  gpio-keys-polled {
         compatible = "gpio-keys-polled";
         #address-cells = <1>;
         #size-cells = <0>;
         poll-interval = <20>;
         reset {
             label = "reset";
             gpios = <&gpio0 1 1>;
             linux,code = <0x198>;
         };
 };
+*/

编译、刷新固件

点击参考如何刷新WRTnode的固件

加载模块

在编译好固件之后,进入系统,需要加载相应的模块才能加载i2c设备,使用命令:

insmod i2c-dev
  1. 如果是 WRTnode1 系列的板子,请使用
insmod i2c-gpio-custom bus0=0,1,2  
  1. 如果是 WRTnode2 系列的板子,请使用
insmod i2c-gpio-custom bus0=0,5,4
  1. GPIO与引脚的对应关系,请参考 GPIO资源

其中,i2c-gpio-custom的参数顺序为为:busx=<id>,<sda>,<scl>(x可以为0~3,表示一共做多可以有4个控制i2c-gpio控制器)
<id> ID to used as device_id for the corresponding bus (required)
<sda> GPIO pin ID to used for SDA (required)
<scl> GPIO pin ID to used for SCL (required)

$cd /dev
$ls 

I2c6.png