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_...
I2c-dev.c 实现了 i2c 适配器字符设备接口。每次系统注册一个i2c_adapter的时候,会通过 bus notifier的方式通知i2c-dev.c 模块,i2c-dev.c模块收到注册通知后,会为该 i2c_adapter 创建一个名字为"i2c-xx" 字符设备,主设备号为89,次设备号为i2c_adapter的总线编号xx。i2c-dev.c并不是针对特定的设备而设计的...
打开i2c总线节点 file=open("/dev/i2c-0",O_RDWR);if(file<0){fprintf(stderr,"failed to open i2c bus\n");return-1;} 设置器件地址 I2C_SLAVE_FORCE 表示即使该地址的i2c设备已经有驱动程序,也强制其可用 ret=ioctl(file,force?I2C_SLAVE_FORCE:I2C_SLAVE,0x50);if(ret<0){fprintf(stderr,"failed...
36. module_exit(i2c_dev_exit); 首先注册了i2cdev_fops操作函数集,接着注册了一个名为”i2c-dev”的class,然后又注册了一个i2cdev_notifier,i2cdev_notifier如下 1. static struct notifier_block i2cdev_notifier = { 2. .notifier_call = i2cdev_notifier_call, 3. }; 4. int i2cdev_notifier_call(...
#define DRIVER_NAME "i2c" #define DRIVER_VER "1.0" #define BUF_SIZE 256 struct data { struct i2c_client *i2c_cli; uint8_t read_addr; uint8_t base_addr; }; struct data *g_data; static ssize_t i2c_getreg_show(struct device *dev, struct device_attribute *attr, char *buf) ...
\kernel\drivers\i2c\i2c-core.c 这个文件实现了 I2C 核心的功能以及/proc/bus/i2c*接口。同时对I2C底层的收发函数进行封装。会调用i2c_transfer ,里面实现了adap->algo->master_xfer(adap, msgs, num) kernel\drivers\i2c\i2c-dev.c 该函数注册了一个设备文件的功能,也就是注册了一个字符设备驱动程序,可以通...
一、i2c-dev驱动分析 1.1、设备驱动注册 分析这个驱动,还是从module_init()和module_exit()开始,程序如下: 点击(此处)折叠或打开 static int __init i2c_dev_init(void) { int res; printk(KERN_INFO "i2c /dev entries driver\n"); res = register_chrdev(I2C_MAJOR, "i2c", &i2cdev_fops); ...
使用Linux自带的i2c-dev操作EEPROM Linux系统自带了I2C总线的子系统,没有了解这个I2C的子系统是如何工作的不过既然系统提供了这个功能就可以使用文件操作的方式直接使用I2C总线了。说到I2C总线第一个想到的还是EEPROM存储芯片,例如AT24C02这个芯片有256字节的存储空间,使用范围较广。
里面保存I2C设备驱动相关的文件,如下图所示,比如m41t00,就是RTC实时钟 4) i2c-core.c 这个文件实现了I2C核心的功能(I2C总线的初始化、注册和适配器添加和注销等相关工作)以及/proc/bus/i2c*接口。 5) i2c-dev.c 提供了通用的read( ) 、 write( ) 和ioctl( ) 等接...
Linux中的I2C驱动讲解-I2C协议是在开发中使用非常频繁的一种协议,相信大家在学习单片机的时候经常会用到支持I2C协议的模块,I2C 总线仅仅使用 SCL、SDA 这两根信号线就实现了设备之间的数据交互,极大地简化了对硬件资源和 PCB 板布线空间的占用。因此,I2C 总线被非常广泛