I2C操作

使能设备树节点

&i2c0 {
        status = "okay";

        ns2009: ns2009@48 {
                compatible = "nsiway,ns2009";
                reg = <0x48>;
        };
        sht21: sht21@40 {
                compatible = "sht21";
                reg = <0x40>;
        };
        atmel_mxt_ts@4a {
                compatible = "atmel,atmel_mxt_ts";
                reg = <0x4a>;
                /*interrupt-parent = <&pio>;
                interrupts = <6 5 IRQ_TYPE_LEVEL_LOW>;*/ //省引脚,使用轮训方式
        };
};

使用i2c-tools

root@LicheePi:~# i2cdetect -l     #查看系统使能的i2c总线,这里只有i2c0一个
i2c-0   i2c         mv64xxx_i2c adapter                 I2C adapter
root@LicheePi:~# i2cdetect -r -y 0  //检测总线上的设备。-y表示省去交互式
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: 40 -- -- -- -- -- -- -- UU -- 4a -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

这里的40,48,4a 分别是sht21温湿度传感器,ns2009电阻式触摸传感器,mxt336T电容式触摸传感器。

i2c上读写数据:

i2cset -y 1 0x40 0x00 0x13
i2cget -y 1 0x40 0x00

sht21 传感器使用

insmod sht21.ko
echo sht21 0x40 > /sys/bus/i2c/devices/i2c-0/new_device
ls /sys/class/hwmon/hwmon0
    device           name   subsystem    uevent
    humidity1_input  power  temp1_input
cat /sys/class/hwmon/hwmon0/temp1_input
    25201       #毫摄氏度,即25.201摄氏度
cat /sys/class/hwmon/hwmon0/humidity1_input
    58872       #毫百分之1,即58.872%RH

参考文档

https://blog.dbrgn.ch/2017/2/6/read-sht21-sensor-from-linux-raspberry-pi/
http://www.360doc.com/content/14/1008/11/7775902_415207889.shtml

http://blog.csdn.net/AJ_chenrui/article/details/51202689