I2C设备驱动程序的层次结构

前言

在这里插入图片描述


一、I2C设备驱动的概述

在这里插入图片描述


二、I2C设备层

在这里插入图片描述

2.1 I2C设备(i2c_client)

在这里插入图片描述
在这里插入图片描述


2.2 I2C设备地址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.3 I2C设备(i2c_client)的其他注意事项

在这里插入图片描述


2.4 I2C设备驱动(i2c_driver)

在这里插入图片描述
在这里插入图片描述


2.5 i2c_driver 和 i2c_client 的关系

在这里插入图片描述


三、I2C总线层

在这里插入图片描述

3.1 I2C总线适配器(i2c_adapter)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


3.2 I2C总线驱动程序(i2c_algorithm)

在这里插入图片描述
在这里插入图片描述

struct i2c_algorithm {
	/* If an adapter algorithm can't do I2C-level access, set master_xfer to NULL. 
	   If an adapter algorithm can do SMBus access, set smbus_xfer. If set to NULL, the SMBus protocol is simulated using common I2C messages */
	/* master_xfer should return the number of messages successfully processed, or a negative value on error */
	int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs, int num);
	int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,
			   unsigned short flags, char read_write,
			   u8 command, int size, union i2c_smbus_data *data);

	/* To determine what the adapter supports */
	u32 (*functionality) (struct i2c_adapter *);
};

3.3 I2C设备层和总线层的关系

在这里插入图片描述


四、写 I2C 设备驱动的步骤

在这里插入图片描述


五、I2C子系统的初始化

在这里插入图片描述

5.1 I2C子系统初始化函数 i2c_init()

在这里插入图片描述


5.2 I2C子系统退出函数 i2c_exit()在这里插入图片描述

在这里插入图片描述


六、适配器驱动程序

在这里插入图片描述

6.1 s3c2440 对应的适配器结构体

在这里插入图片描述

6.1.1 s3c24xx_i2c 适配器

在这里插入图片描述
在这里插入图片描述


6.1.2 I2C消息(i2c_msg)

在这里插入图片描述
在这里插入图片描述


6.2 I2C适配器加载函数 i2c_add_adapter()

在这里插入图片描述

6.3 IDR机制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


6.4 适配器卸载函数 i2c_del_adapter()

在这里插入图片描述


6.5 I2C总线通信方法 s3c24xx_i2c_algorithm 结构体

在这里插入图片描述
在这里插入图片描述

2022-07-21_16h36_40.png
在这里插入图片描述
在这里插入图片描述

6.6 适配器的传输函数 s3c24xx_i2c_doxfer()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


6.6.1 判断总线闲忙状态 s3c24xx_i2c_set_master()

在这里插入图片描述


6.6.2 适配器中断使能函数 s3c24xx_i2c_enable_irq()

在这里插入图片描述
在这里插入图片描述


6.6.3 启动适配器消息传输函数 s3c24xx_i2c_message_start()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


6.7 适配器的中断处理函数 s3c24xx_i2c_irq()

在这里插入图片描述


6.7.1 数据通信方法的调用关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.7.2 中断处理函数 s3c24xx_i2c_irq()

在这里插入图片描述
在这里插入图片描述


6.8 字节传输函数 i2c_s3c_irq_nextbyte()

i2c_s3c_irq_nextbyte() 函数用来传送下一个字节,其代码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


6.9 适配器传输停止函数 s3c24xx_i2c_stop()

在这里插入图片描述
在这里插入图片描述


6.10 中断处理函数的一些辅助函数

在这里插入图片描述


七、I2C设备层驱动程序

本节将详细讲解I2C设备层程序。这个驱动程序中包括模块加载和卸载函数、探测函数、初始化函数等,具体的实现将在本节详细的讲解。


7.1 I2C设备驱动模块加载和卸载

在这里插入图片描述

7.1.1 平台驱动的加载和卸载

在这里插入图片描述


7.1.2 平台驱动 s3c2410_i2c_driver

在这里插入图片描述
在这里插入图片描述


7.2 探测函数 s3c24xx_i2c_probe()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


7.3 移除函数 s3c24xx_i2c_remove()

在这里插入图片描述
在这里插入图片描述


7.4 控制器初始化函数 s3c24xx_i2c_init()

在这里插入图片描述
在这里插入图片描述


7.5 设置控制器数据发送频率函数 s3c24xx_i2c_clockrate()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


八、I2C驱动架构总结示意图

链接地址

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值