linux之IIC驱动

参考:https://blog.csdn.net/W1107101310/article/details/79871029

iic总线框架:

IIC设备分为三层,分别是:iic核心层core   iic总线层(也叫控制器层)  iic设备层

i2c总线驱动层:

  该层在通信中起主机的作用通过该层对下面的从机进行开始,结束,应答等相关的控制。而该层要根据不同的SOC(片上系统)有不同的总线驱动,而这些SOC的驱动由各个生产厂家提供。而在本文中我们所用到的是i2c-s3c2410.c(drivers\i2c\busses)该文件专门为S3C2410所提供(而因为我们的S3C2440与S3C2410十分相似,而可以直接使用)。在该层中,我们主要做的是:
 

    1. 填充i2c的适配器(adapter),并将其使用i2c核心层的函数注册。

    2. 做片上系统上与i2c主机相关的初始化。

    3. 将该适配器通过i2c总线核心层的函数注册到内核中。

i2c核心层:

  该层在整个i2c驱动框架中起到了中间层的作用,通过该层连接i2c总线驱动层和i2c设备驱动层。而在该层中所有的操作是与芯片或者说与设备无关的,所以在该层中的文件是不用改动的我们直接使用就好。而他主要提供的功能为:

   1. 为i2c总线驱动层提供注册函数,使适配器注册到内核中的适配器链表中

    2. 使用i2c_probe实现主机对从机检测,检测存在调用处理函数

    3. 使用i2c_transfer函数实现,驱动程序中实现主从数据传输

    4. 使用i2c_register_driver实现将i2c设备驱动层注册到内核中

i2c设备驱动层:

        该层在通信中起从机作用,而该层也是我们要自己根据不同的i2c从机设备所写层。而在本文中我们使用的是AT24C08芯片所以我们主要写与其相关的设置。而在该层中我们的主要工作是: 

i2c设备驱动层:(重点关注)

        该层在通信中起从机作用,而该层也是我们要自己根据不同的i2c从机设备所写层。而在本文中我们使用的是AT24C08芯片所以我们主要写与其相关的设置。而在该层中我们的主要工作是:

    1. 实现主机对从机的检测

    2. 检测到后注册i2c_client结构体,并做相应的设置,

    3. 实现i2c从机通信相关的设置

    4. 使用i2c总线核心层的函数将自己添加到内核驱动链表中
 

 

上电:iic总线驱动和设备驱动关联起来以及注册到内核流程

用户空间访问iic设备的流程

各数据结构的关系

iic驱动编写流程

发布了135 篇原创文章 · 获赞 112 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/shenlong1356/article/details/89212234