I2C(Inter-Integrated Circuit)是一种由飞利浦公司开发的二线式串行总线,用于微控制器(MCU)与外围设备(从设备)之间的通讯。I2C总线只需要两根线(数据线SDA和时钟线SCL),因此非常适合连接多个设备。 在Linux系统中,I2C设备通常以/dev/i2c-*的形式出现,例如/dev/i2c-0。以下是关于Linux中i2c-0使用的一些基础概念和...
我们要选择编译/linux-kernel-3.8/drivers/i2c/相关的platform driver和arch/mips/xburst/soc-4775/board//trunk/core/core-misc.c相结合最终生成的固件就会有/dev/i2c0标准接口。 以下是笔者做qn8025FM驱动时写下的通过标准i2c设备文件实现的读写函数:通过这两个读写函数就可以直接读写i2c设备的寄存器实现想用的...
}/*以DEVICE_NAME为名,参考/sys/class/CLASS_NAME在/dev目录下创建一个设备:/dev/DEVICE_NAME*/i2c_test_dev = device_create(i2c_test_cls,NULL,MKDEV(major,0),NULL,DEVICE_NAME);if(IS_ERR(i2c_test_dev)) { class_destroy(i2c_test_cls); unregister_chrdev(major,DEVICE_NAME);returnPTR_ERR(...
static int i2cdev_attach_adapter(struct device *dev, void *dummy) { struct i2c_adapter *adap; struct i2c_dev *i2c_dev; int res; if (dev->type != &i2c_adapter_type) return 0; adap = to_i2c_adapter(dev); i2c_dev = get_free_i2c_dev(adap); if (IS_ERR(i2c_dev)) return PTR...
kernel\drivers\i2c\i2c-dev.c 该函数注册了一个设备文件的功能,也就是注册了一个字符设备驱动程序,可以通过/dev/i2c-0(i2c-0, i2c-1,…, i2c-10,…)找到具体的I2C适配器,这个I2C设备的主设备号为89,次设备号0~255。通过访问这个接口,可以通过open()、 write()、 read()、 ioctl()和 close()等来访...
AT24C02芯片采用I2C总线与主机通信,具体细节参见数据手册。Linux的I2C设备为/dev/i2c-0和/dev/i2c-1,不同的板子可能不一样。使用I2C设备只需要简单的打开文件即可,十分的方便,使用ioctl函数控制I2C总线的一些参数,详见/usr/include/linux/i2c-dev.h头文件中的定义。
include <linux/i2c-dev.h> include <linux/i2c.h> define CHIP "/dev/i2c-1"define CHIP_ADDR 0x50 int main(){ printf("hello, this is i2c tester\n");int fd = open(CHIP, O_RDWR);if (fd < 0){ printf("open "CHIP"failed\n");goto exit;} if (ioctl(fd, I2C_SLAVE_...
static int rk3x_i2c_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; const struct of_device_id *match; struct rk3x_i2c *i2c; struct resource *mem; int ret = 0; int bus_nr; u32 value;
1.I2C协议 2.4412处理器I2C接口说明 3.bus-dev-drv模型(详见文章-Linux下驱动:分层、分离机制学习笔记) 4. linux内核下驱动设计基本知识 一、驱动框架 以4412+linux3.5平台为例,说明Linux下I2C设备驱动程序。 如果一条I2C总线上只连接一个I2C设备,那么只需要以字符型设备驱动框架来写驱动即可(填充file_opreoration...