到底什么是I2C适配器?
看了篇讲LINUX I2C体系的书,说是主要的硬件有2个:一个client,一个adapter,I2C体系结构围绕她俩展开。
可是,到底什么是adapter?是I2C控制器么?如果是的话,I2C控制器不就几个寄存器么,还搞这么复杂作甚?
比如,单片机里的I2C控制器,好歹搞她两下她就干活了
不甚理解这儿的I2C adapter。
wmmy2008 发表于 2010-07-31 17:35
i2c adapter 是一个struct, 用来抽象一个物理i2c bus ,而且还和linux 设备驱动架构柔和在一起..
SK|fisker 发表于 2010-07-31 18:34
[i=s] 本帖最后由 SK|fisker 于 2010-07-31 18:36 编辑 [/i]
我是指的硬件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的驱动
打字挺多,不知道说清楚了没有
诚心希望各位看到帖子的分享下看法
wmmy2008 发表于 2010-07-31 20:02
[b]回复 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=7280820&ptid=1168450]3#[/url] [i]SK|fisker[/i] [/b]
如果只说硬件的话,就是在CPU内部集成的一个I2C控制器( I2C总线的一个接口而已,不过这个接口是用来控制SCL线的 )(提供给用户的就是那几个register),硬件上并没的所谓的adapter,client这些东东,,adapter和client都是linux驱动软件抽象出来的东西 ,不晓得说清楚没的? -- 这句话很正确
SK|fisker 发表于 2010-07-31 21:48
[b]回复 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=7280841&ptid=1168450]4#[/url] [i]wmmy2008[/i] [/b]
看了嵌入式精华区的几篇I2C的文章,知道怎么回事了
其实I2C的驱动也完全可以绕过client这个东西,直接访问/dev/i2c-x
不过所谓“adapter”确实还是有的,不过一个概念而已——那几个register控制的东西是也。-- 这样理解也没有错
唉,钻牛角尖了。
linux初学三月 发表于 2010-07-31 22:32
一个具体的I2C设备驱动需要实现两个方面的接口,一个是对I2C core层的接口,用以挂接I2C adapter层来实现对I2C总线及I2C设备具体的访问方法,包括要实现attach_adapter,detach_client,command等接口函数。另一个是对用户应用层的接口,提供用户程序访问I2C设备的接口,包括实现open,release,read,write以及最重要的ioctl等标准文件操作的接口函数。
linux初学三月 发表于 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功能的底层实现 --- 非常正确
0vk0 发表于 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总线具体的访问方法;对用户应用层的接口则是方便应用程序开发,实现设备特定功能的必不可少的部分。
readkernel 发表于 2010-08-03 08:58
i2c adapter是软件上抽象出来的i2c总线控制器接口
物理上一条i2c总线可以挂接多个硬件设备(slave),一个CPU可以挂接多条i2c总线(想象一下PCI总线)
i2c总线控制器就是CPU访问I2C总线的硬件接口,也就是你说的那几个寄存器 --- 正确
Linux I2C框架搞那么复杂是为了通用性及为了符合Linux内核驱动模式而制定的。
单片机软件做多了不习惯也是自然的。
star316 发表于 2010-08-05 15:17
简单点了, 你的开发板上有几个I2C接口,就有几个adapter , 也就是有几条I2C bus , I2C CLIENT 对应的就是你的外围I2C 设备,有几个就有几个CLIENT , 把这些设备插入开发板, 对应其中的一条BUS, 那么相应的就对应了其中的一个ADAPTER , 接下来的就是 CLIENT 与 ADAPTER 勾搭成对了, 后面就是做该做的事了 -- 通俗易通
看了篇讲LINUX I2C体系的书,说是主要的硬件有2个:一个client,一个adapter,I2C体系结构围绕她俩展开。
可是,到底什么是adapter?是I2C控制器么?如果是的话,I2C控制器不就几个寄存器么,还搞这么复杂作甚?
比如,单片机里的I2C控制器,好歹搞她两下她就干活了
不甚理解这儿的I2C adapter。
wmmy2008 发表于 2010-07-31 17:35
i2c adapter 是一个struct, 用来抽象一个物理i2c bus ,而且还和linux 设备驱动架构柔和在一起..
SK|fisker 发表于 2010-07-31 18:34
[i=s] 本帖最后由 SK|fisker 于 2010-07-31 18:36 编辑 [/i]
我是指的硬件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的驱动
打字挺多,不知道说清楚了没有
诚心希望各位看到帖子的分享下看法
wmmy2008 发表于 2010-07-31 20:02
[b]回复 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=7280820&ptid=1168450]3#[/url] [i]SK|fisker[/i] [/b]
如果只说硬件的话,就是在CPU内部集成的一个I2C控制器( I2C总线的一个接口而已,不过这个接口是用来控制SCL线的 )(提供给用户的就是那几个register),硬件上并没的所谓的adapter,client这些东东,,adapter和client都是linux驱动软件抽象出来的东西 ,不晓得说清楚没的? -- 这句话很正确
SK|fisker 发表于 2010-07-31 21:48
[b]回复 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=7280841&ptid=1168450]4#[/url] [i]wmmy2008[/i] [/b]
看了嵌入式精华区的几篇I2C的文章,知道怎么回事了
其实I2C的驱动也完全可以绕过client这个东西,直接访问/dev/i2c-x
不过所谓“adapter”确实还是有的,不过一个概念而已——那几个register控制的东西是也。-- 这样理解也没有错
唉,钻牛角尖了。
linux初学三月 发表于 2010-07-31 22:32
一个具体的I2C设备驱动需要实现两个方面的接口,一个是对I2C core层的接口,用以挂接I2C adapter层来实现对I2C总线及I2C设备具体的访问方法,包括要实现attach_adapter,detach_client,command等接口函数。另一个是对用户应用层的接口,提供用户程序访问I2C设备的接口,包括实现open,release,read,write以及最重要的ioctl等标准文件操作的接口函数。
linux初学三月 发表于 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功能的底层实现 --- 非常正确
0vk0 发表于 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总线具体的访问方法;对用户应用层的接口则是方便应用程序开发,实现设备特定功能的必不可少的部分。
readkernel 发表于 2010-08-03 08:58
i2c adapter是软件上抽象出来的i2c总线控制器接口
物理上一条i2c总线可以挂接多个硬件设备(slave),一个CPU可以挂接多条i2c总线(想象一下PCI总线)
i2c总线控制器就是CPU访问I2C总线的硬件接口,也就是你说的那几个寄存器 --- 正确
Linux I2C框架搞那么复杂是为了通用性及为了符合Linux内核驱动模式而制定的。
单片机软件做多了不习惯也是自然的。
star316 发表于 2010-08-05 15:17
简单点了, 你的开发板上有几个I2C接口,就有几个adapter , 也就是有几条I2C bus , I2C CLIENT 对应的就是你的外围I2C 设备,有几个就有几个CLIENT , 把这些设备插入开发板, 对应其中的一条BUS, 那么相应的就对应了其中的一个ADAPTER , 接下来的就是 CLIENT 与 ADAPTER 勾搭成对了, 后面就是做该做的事了 -- 通俗易通