1. #include
2. #include
3. #include
4. #include
5. #include
6. #include
7. #include
8. #include
9. #include
10.
11. #defineI2C_FILE_NAME "/dev/i2c-1"
12. #defineI2C_ADDR 0x40
13.
14. intfd;
15.
16. inti2c_open()
17. {
18. fd = open(I2C_FILE_NAME, O_RDWR);
19. if(fd < 0){
20. perror("Unable to open i2c controlfile");
21. return 1;
22. }
23. }
24.
25. inti2c_write(int fd, unsigned char dev_addr, unsigned char reg_addr, unsigned charval)
26. {
27. int ret;
28. unsigned char buf[2];
29. struct i2c_rdwr_ioctl_data data;
30. struct i2c_msg messages;
31.
32. buf[0] = reg_addr;
33. buf[1] = val;
34. messages.addr = dev_addr; //device address
35. messages.flags = 0; //write
36. messages.len = 2;
37. messages.buf = buf; //data address
38.
39. data.msgs = &messages;
40. data.nmsgs = 1;
41. if(ioctl(fd, I2C_RDWR, &data) < 0){
42. printf("write ioctl err\n");
43. return 1;
44. }
45. usleep(1000);
46.
47. return 1;
48. }
49.
50. inti2c_read(int fd, unsigned char addr, unsigned char reg, unsigned char *val)
51. {
52. int ret;
53. struct i2c_rdwr_ioctl_data data;
54. struct i2c_msg messages[2];
55.
56. messages[0].addr = addr; //device address
57. messages[0].flags = 0; //write
58. messages[0].len = sizeof(reg);
59. messages[0].buf = ® //data address
60.
61. messages[1].addr = addr; //device address
62. messages[1].flags = I2C_M_RD; //read
63. messages[1].len = sizeof(val);
64. messages[1].buf = val;
65.
66. data.msgs = messages;
67. data.nmsgs = 2;
68. if(ioctl(fd, I2C_RDWR, &data) < 0){
69. printf("read ioctlerr\n");
70. return 1;
71. }
72.
73. return 0;
74. }
75.
76. intmain()
77. {
78. int i;
79. unsigned char buf[4];
80. unsigned char val[] = {0x04, 0x05, 0x06,0x07};
81.
82. i2c_open();
83.
84.
85. for(i =0; i< 4; i++)
86. i2c_write(fd, I2C_ADDR, i, val[i]);
87.
88.
89. memset(buf, 0x00, sizeof(buf));
90. for(i = 0; i < sizeof(buf); i++){
91. if(i2c_read(fd, I2C_ADDR, i,&buf[i])){
92. printf("Unable to getregister!\n");
93. }
94. }
95.
96. for(i=0; i< 4;i++)
97. printf("buf[%d]=%d\n",i,buf[i]);
98.
99.}