首页 理论教育 Linux驱动程序实例:通过read和write接口进行读写

Linux驱动程序实例:通过read和write接口进行读写

时间:2023-10-19 理论教育 版权反馈
【摘要】:下面来分析i2cdev_write的处理过程。i2cdev_write代码如下:显然,i2cdev_write函数先将用户数据复制到内核空间后,再调用i2c_master_send函数:i2c_master_send函数中填写了struct i2c_msg结构,包含了从机地址、数据、数据长度等信息。i2c_msg结构定义如下:i2cdev_read的过程与i2cdev_write类似,不再赘述。例7.1 I2C通用设备读写实例本例为应用层代码,实现对AT24C02的读写。

Linux驱动程序实例:通过read和write接口进行读写

通过read、write函数读写I2C设备,首先调用IOCTL设置I2C参数:

#define I2C_SLAVE 0x0703/*从设备地址*/

#define I2C_SLAVE_FORCE 0x0706/*强制使用本地址,即使这个地址被其他驱动使用*/

#define I2C_TENBIT 0x0704/*地址长度设置,0表示7bit地址,非0表示10bit地址*/

其次调用read或write函数进行读或者写,读写是分开的。下面来分析i2cdev_write的处理过程。i2cdev_write代码如下:

显然,i2cdev_write函数先将用户数据复制到内核空间后,再调用i2c_master_send函数:

i2c_master_send函数中填写了struct i2c_msg结构,包含了从机地址、数据、数据长度等信息。i2c_master_send函数最后调用了i2c_transfer函数:(www.xing528.com)

__i2c_transfer函数最终调用了adap->algo->master_xfer函数来实现数据收发。master_xfer函数原型如下:

int master_xfer(struct i2c_adapter*adapter,struct i2c_msg*msg,int num)

master_xfer实际上实现了I2C发送数据时序。master_xfer的第二个参数是i2c_msg结构,第三个参数是消息的个数。i2c_msg结构定义如下:

i2cdev_read的过程与i2cdev_write类似,不再赘述。

例7.1 I2C通用设备读写实例

本例为应用层代码,实现对AT24C02的读写。I2C设备读写操作的数据格式要根据具体的芯片确定。AT24C02的读写时序见本章第1节。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈