树莓派之I2C编程

一、启动I2C

  • 使用: ls /dev/命令可以查看I2C设备是启动。
  • 如果没有启动执行 sudo raspi-config选择 interfacing Options->I2C->yes启动i2c内核驱动。
  • 使用 lsmod 命令可以看到i2c_bcm2708,并且/dev目录下可以看到i2c设备。

二、I2C编程

(1)、包含头文件

#include < linux/i2c-dev.h>
#include

(2)、ioctl函数

查看include/linux/i2c-dev.h,里面包含了i2c-dev支持的所有命令。 (注;版本比较高的linux内核,命令放在include/uapi/Linux/i2c-dev.h内)


#define I2C_RETRIES 0x0701 /* number of times a device address should be polled when not acknowledging */

#define I2C_TIMEOUT 0x0702  /* set timeout in units of 10 ms */

/* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses  
 * are NOT supported! (due to code brokenness)  
 */  
#define I2C_SLAVE   0x0703  /* Use this slave address */  

#define I2C_SLAVE_FORCE 0x0706  /* Use this slave address, even if it
                   is already in use by a driver! */  
#define I2C_TENBIT  0x0704  /* 0 for 7 bit addrs, != 0 for 10 bit */

#define I2C_FUNCS   0x0705  /* Get the adapter functionality mask */

#define I2C_RDWR    0x0707  /* Combined R/W transfer (one STOP only) */

#define I2C_PEC     0x0708  /* != 0 to use PEC with SMBus */

#define I2C_SMBUS   0x0720  /* SMBus transfer */

例如:

1. 打开一个i2c从机 ioctl(fd, I2C_SLAVE, addr);
fd是i2c设备的文件标志符
I2_SLAVE是命令
addr是我们要访问的i2c设备的地址

(3)、两种通信方式

  1. 一种是使用操作普通文件的接口read()和write(),这两个函数间接调用了i2c_master_recv和i2c_master_send

2.一种是使用Ioctl的命令I2C_RDWR来实现。

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐