1 查看I2C设备是否启动,使用命令 ls /dev |grep i2c
2 如果I2C设备没有启动,需要先使能树莓派I2C, sudo raspi-config 选择 interfacing Options->I2C->yes启动i2c内核驱动。
注: 也可以通过编辑/boot/config.txt文件,加入一下一行内容:
dtparam=i2c1=on
dtparam=i2c_arm=on
3 使用 lsmod 命令可以看到i2c bcm2835
4 插上I2C设备,检查是否可以读到设备,可以通过I2C工具
5 C语言编程
三种方式可以实现对I2C操作,分别是:
方式一:使用bcm2835驱动模块,通过引入头文件: #include <bcm2835.h>
方式二:基于wiringPi库的驱动库,相关头文件:
- #include <wiringpi.h>
- #include <wiringpii2c.h>
方式三:sysfs方式,个人比较推荐,比较linux
i2c设备驱动的头文件, 位于 /usr/include/linux/i2c-dev.h :
#include < linux/i2c-dev.h>
例子:
#include <linux i2c-dev.h> #include <errno.h> #define I2C_ADDR 0x20 #define LED_ON 0xEF #define LED_OFF 0xFF int main (void) { int value; int fd; fd = open("/dev/i2c-1", O_RDWR); if (fd < 0) { printf("Error opening file: %s\n", strerror(errno)); return 1; } if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) { printf("ioctl error: %s\n", strerror(errno)); return 1; } while(1) { if(value == LED_ON)value = LED_OFF; else value = LED_ON; if( write( fd , &value, 1 ) != 1) { printf("Error writing file: %s\n", strerror(errno)); } usleep(1000000); } return 0; }