i2c驱动

来源:互联网 发布:mac梦幻西游连接失败 编辑:程序博客网 时间:2024/05/16 07:18
  i2c驱动现在一般用子系统的框架来做,如果用直接写寄存器的方式写代码会比较简单,但这些寄存器对于不同的厂家的arm芯片,有不同的定义,这就降低了驱动的可移植性,而另一方面用子系统的方式则提高了i2c驱动的可移植性
 
2 linux下I2C驱动程序的分析
2.1 Linux 系统下的I2C 驱动程序从逻辑上可以分为3 个部分:
 
1. I2C 总线的驱动 I2C core :实现对I2C 总线、I2C adapter 及I2C driver 的管理。
2. I2C 控制器的驱动 I2C adapter :针对不同类型的I2C 控制器,实现对I2C 总线访问的具体方法。
3. I2C 设备的驱动 I2C driver :针对特定的I2C 设备,实现具体的功能,包括read, write 以及ioctl 等对用户层操作的接口。
 
2.2 I2C 总线驱动 I2C core
I2C core 是Linux 内核用来维护和管理的I2C 的核心部分,其中维护了两个静态的List,分别记录系统中的I2C driver 结构和I2C adapter 结构。I2C core 提供接口函数,允许一个I2C adatper,I2C driver 和I2Cclient 初始化时在I2C core 中进行注册,以及退出时进行注销。同时还提供了I2C 总线读写访问的一般接口(具体的实现在与I2C 控制器相关的I2C adapter 中实现),主要应用在I2C 设备驱动中。
2.3 I2C 控制器的驱动 I2C adapter
I2C adapter 是针对不同类型I2C 控制器硬件,实现比较底层的对I2C 总线访问的具体方法。I2C adapter 构造一个对I2C core 层接口的数据结构,并通过接口函数向I2C core 注册一个控制器。
I2C adapter 主要实现对I2C 总线访问的算法,iic_xfer() 函数就是I2C adapter 底层对I2C 总线读写方法的实现。同时I2C adpter 中还实现了对I2C 控制器中断的处理函数。
2.4 I2C 设备的驱动 I2C driver
I2C driver 中提供了一个通用的I2C 设备的驱动程序,实现了字符类型设备的访问接口,对设备的具体访问是通过I2C adapter 来实现的。I2C driver 构造一个对I2C core 层接口的数据结构,通过接口函数向 I2C Core注册一个I2C 设备驱动。同时I2C driver 构造一个对用户层接口的数据结构,并通过接口函数向内核注册为一个主设备号为89 的字符类型设备。
I2C driver 实现用户层对I2C 设备的访问,包括open,read,write,ioctl,release 等常规文件操作,我们可以通过open 函数打开 I2C 的设备文件,通过ioctl 函数设定要访问从设备的地址,然后就可以通过 read和write 函数完成对I2C 设备的读写操作。
 
通过 I2C driver 提供的通用方法可以访问任何一个I2C 的设备,但是其中实现的read,write及ioctl 等功能完全是基于一般设备的实现,所有的操作数据都是基于字节流,没有明确的格式和意义。为了更方便和有效地使用I2C 设备,我们可以为一个具体的I2C 设备开发特定的I2C 设备驱动程序,在驱动中完成对特定的数据格式的解释以及实现一些专用的功能。
 
3 I2C 设备驱动程序的一般结构
一个具体的 I2C 设备驱动需要实现两个方面的接口,一个是对I2C core 层的接口,用以挂接I2C adapter 层
来实现对I2C 总线及I2C 设备具体的访问方法,包括要实现attach_adapter,detach_client,command
等接口函数。另一个是对用户应用层的接口,提供用户程序访问I2C 设备的接口,包括实现open,release,read,write 以及最重要的ioctl 等标准文件操作的接口函数。
 
对 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 功能的底层实现。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 刚拿驾照不敢上路怎么办 雅思考试作文格式写错了怎么办 英国银行卡注销后钱怎么办 本科毕业有毕业证没有学位证怎么办 莫名收到平安一账通验证码怎么办 新车没带行驶证怎么办 深圳行驶证副本丢了怎么办 新车行驶证是怎么办的 新车怎么办牌和行驶证 b本扣12分了怎么办 车的绿本丢了怎么办 车辆落户查不到购车发票怎么办 扣车凭证丢了怎么办 三轮车驾驶证被扣了怎么办 违章12分不够扣怎么办 忘记带行驶证了怎么办 开车不带行驶证怎么办 屏幕没碎黑屏了怎么办 三星s6屏幕不亮怎么办 苹果手机掉水里屏幕黑屏怎么办 三星s6电池不耐用怎么办 台式电脑显示屏坏了怎么办 三星笔记本电脑不显示韩文怎么办 三星s6开不开机怎么办 电脑显示屏显示检测信号线怎么办 三星s8屏幕坏了怎么办 手机挤压漏液了怎么办 三星显示器跳白色线条怎么办动 三星s6屏幕漏液怎么办 三星电视曲面屏碎了怎么办 平板摔了花屏怎么办 新手机开不了机怎么办 三星a9屏幕漏液怎么办 小米note后面玻璃碎了怎么办 换手机微信钱包怎么办 内外屏一体手机屏幕碎了怎么办 苹果手机显示屏坏了怎么办 华为手机屏裂了怎么办 乐视手机屏坏了怎么办 红米手机触屏失灵怎么办 小米4排线断了怎么办