If the system supports hardware / software i2c and if the i2c-dev modules properly installed, the i2c devices appear in /dev .
for a system with four i2c buses :
for a system with four i2c buses :
crw-rw---T 1 root i2c 89, 0 Jan 1 1970 /dev/i2c-0
crw-rw---T 1 root i2c 89, 1 Jan 1 1970 /dev/i2c-1
crw-rw---T 1 root i2c 89, 2 Jan 1 1970 /dev/i2c-2
crw-rw---T 1 root i2c 89, 3 Jan 1 1970 /dev/i2c-3
note: the following configs are required in the kernel config
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_SUNXI=y (for allwinner devices)
There are some very useful diagnostic tools in i2c-tools package, so make sure that they are installed:
There are some very useful diagnostic tools in i2c-tools package, so make sure that they are installed:
sudo apt-get -y install i2c-tools python-smbus
with the device plugged into the i2c bus, first discover (and make sure it responds ) using i2c-detect.
This is a very good test to see if the device responds and the address.
The following is a response from a device at address 0x34 in /dev/i2c-0 :
root@BP-A20:~# i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
reading in python : (reading 8 bytes )
import smbus
import time
i2c = smbus.SMBus(0)
address = 0x34
status = i2c.read_i2c_block_data(address, 0x00, 8)
print status
reading and wrting in c :
#include <stdio.h>
#include <linux/types.h>
#include <linux/i2c-dev.h>
#include <fcntl.h>
int main (int argc, char *argv[])
{
int i, fd;
__u8 address = 0x34;
__u8 write_array[16] = {0};
fd = open("/dev/i2c-2", O_RDWR);
ioctl(fd, I2C_SLAVE, address);
if (read(fd, values,32) !=32)
printf("failed to read 32 bytes \n");
write_array[0] = 0x81;
write_array[1] = 0x00;
write(fd,write_array,2);
close (fd);
}
No comments:
Post a Comment