免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 14234 | 回复: 15
打印 上一主题 下一主题

到底什么是I2C适配器? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-30 23:05 |只看该作者 |倒序浏览
看了篇讲LINUX I2C体系的书,说是主要的硬件有2个:一个client,一个adapter,I2C体系结构围绕她俩展开。
可是,到底什么是adapter?是I2C控制器么?如果是的话,I2C控制器不就几个寄存器么,还搞这么复杂作甚?
比如,单片机里的I2C控制器,好歹搞她两下她就干活了

不甚理解这儿的I2C adapter。

论坛徽章:
0
2 [报告]
发表于 2010-07-31 17:35 |只看该作者
i2c adapter 是一个struct, 用来抽象一个物理i2c bus ,而且还和linux 设备驱动架构柔和在一起..

论坛徽章:
0
3 [报告]
发表于 2010-07-31 18:34 |只看该作者
本帖最后由 SK|fisker 于 2010-07-31 18:36 编辑

我是指的硬件i2c adapter~
对硬件不大熟
(啊,其实对软件也不大熟)

刚稍微看了一下s3c2410的adapter相关的代码,发现核心其实就是读写那几个i2c控制寄存器。从头到尾没有见到有操作其他的硬件。
难道说是这样——s3c2410内部集成了i2c adapter, 但是对它的操作接口是那几个i2c的寄存器,我们根本不用关心所谓的adapter硬件细节。
但是如果这样理解的话,又有了一个新问题:那为什么在adapter驱动之外,还要搞一个client(slave)的驱动?!照说来adapter与slave相连之后,cpu直接读写adapter(/dev/i2c-0)不就完了吗,因为cpu, adapter和slave是这种关系:
    cpu----adapter----slave
实在搞不懂为什么还搞一个slave的驱动

打字挺多,不知道说清楚了没有
诚心希望各位看到帖子的分享下看法

论坛徽章:
0
4 [报告]
发表于 2010-07-31 20:02 |只看该作者
回复 3# SK|fisker


    如果只说硬件的话,就是在CPU内部集成的一个I2C控制器(提供给用户的就是那几个register),硬件上并没的所谓的adapter,client这些东东,,adapter和client都是linux驱动软件抽象出来的东西 ,不晓得说清楚没的?

论坛徽章:
0
5 [报告]
发表于 2010-07-31 21:48 |只看该作者
回复 4# wmmy2008

看了嵌入式精华区的几篇I2C的文章,知道怎么回事了
其实I2C的驱动也完全可以绕过client这个东西,直接访问/dev/i2c-x
不过所谓“adapter”确实还是有的,不过一个概念而已——那几个register控制的东西是也。
唉,钻牛角尖了。

论坛徽章:
0
6 [报告]
发表于 2010-07-31 22:32 |只看该作者
一个具体的I2C设备驱动需要实现两个方面的接口,一个是对I2C core层的接口,用以挂接I2C adapter层来实现对I2C总线及I2C设备具体的访问方法,包括要实现attach_adapter,detach_client,command等接口函数。另一个是对用户应用层的接口,提供用户程序访问I2C设备的接口,包括实现open,release,read,write以及最重要的ioctl等标准文件操作的接口函数。

论坛徽章:
0
7 [报告]
发表于 2010-07-31 22:33 |只看该作者
对I2C core层的接口函数的具体功能解释如下:

      attach_adapter:I2C driver在调用I2C_add_driver() 注册时,对发现的每一个I2C adapter(对应一条I2C 总线)都要调用该函数,检查该I2C adapter是否符合I2C driver的特定条件,如果符合条件则连接此I2C adapter,并通过I2C adapter来实现对I2C总线及I2C设备的访问。

      detach_client:I2C driver在删除一个I2C device时调用该函数,清除描述这个I2C device的数据结构,这样以后就不能访问该设备了。

      command:针对设备的特点,实现一系列的子功能,是用户接口中的ioctl功能的底层实现

论坛徽章:
0
8 [报告]
发表于 2010-07-31 22:35 |只看该作者
一个I2C设备驱动的开发过程。实现的关键分为两个部分,1. 对I2C core的接口,必须实现 struct i2c_drvier数据结构中的几个特定的功能函数。这些函数是I2C驱动与I2C总线物理层(I2C控制器)和I2C设备器件之间通信的基础。2. 对用户应用层的接口,必须实现struct file_operation数据结构中的一些特定功能的函数,如 open ,release , read ,write,lseek等函数。以上两类接口中,对I2C core的接口是对I2C设备访问的基础,实现对I2C总线具体的访问方法;对用户应用层的接口则是方便应用程序开发,实现设备特定功能的必不可少的部分。

论坛徽章:
0
9 [报告]
发表于 2010-08-03 08:58 |只看该作者
i2c adapter是软件上抽象出来的i2c总线控制器接口
物理上一条i2c总线可以挂接多个硬件设备(slave),一个CPU可以挂接多条i2c总线(想象一下PCI总线)
i2c总线控制器就是CPU访问I2C总线的硬件接口,也就是你说的那几个寄存器

Linux I2C框架搞那么复杂是为了通用性及为了符合Linux内核驱动模式而制定的。

单片机软件做多了不习惯也是自然的。

论坛徽章:
0
10 [报告]
发表于 2010-08-05 15:17 |只看该作者
简单点了, 你的开发板上有几个I2C接口,就有几个adapter , 也就是有几条I2C bus ,  I2C CLIENT 对应的就是你的外围I2C 设备,有几个就有几个CLIENT , 把这些设备插入开发板, 对应其中的一条BUS, 那么相应的就对应了其中的一个ADAPTER , 接下来的就是  CLIENT 与 ADAPTER 勾搭成对了, 后面就是做该做的事了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP