linux 3.18 -- iic,input,misc,三轴加速度设备驱动(一)

三轴加速度设备驱动
i2c体系架构图:
这里写图片描述

一 层次架构:
1. I2C核心层
2. I2C总线驱动层
3. I2C设备驱动层

  1. I2C核心层
    提供了I2C总线驱动和设备驱动的注册和注销方法;
    I2C通信方法(Algorithm)上层的与具体适配器无关的代码;
    探测设备、检测设备地址的上层代码。

  2. I2C总线驱动层
    I2C总线驱动是对I2C硬件体系结构中适配器的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。
    I2C总线驱动主要包括I2C适配器数据结构i2c_adapter;I2C适配器的Algorithm数据结构i2c_algorithm;控制I2C适配器产生通信信号的函数。
    经由I2C总线驱动的代码,我们可以控制I2C适配器以主控方式产生开始位、停止位、读写周期,以及以从设备方式被读写、产生ACK等。

  3. I2C设备驱动
    I2C设备驱动是对I2C硬件体系结构中的设备端的实现,设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据。
    I2C设备驱动主要包含的数据结构i2c_driver和i2c_client,我们需要根据具体设备实现其中的成员函数。

二 i2c相关代码
\kernel\drivers\i2c目录下。
1.i2c-core.c
实现了I2C核心的功能。

2.i2c-dev.c(虚拟I2C设备驱动,便于从用户空间操作I2C外设,通用)
实现了I2C适配器设备文件的功能,每一个I2C适配器都被分配一个设备。通过适配器访问设备时的主设备号都为89,次设备号为0–255。
应用程序可通过“i2c-%d”(i2c-0, i2c-1, …)文件名并使用文件操作接口open(), close(), read(), write(), ioctl()等来访问该设备。
i2c-dev.c并不是针对特定的设备而设计的,只是提供了通用的read(), write(), ioctl()等接口,应用层可以借用这些接口访问挂接在适配器上的I2C设备的存储空间或寄存器,并控制I2C设备的工作方式。

3.busses文件夹(I2C总线驱动,一般由bsp厂商维护)
包含了一些I2C主机控制器的驱动,如i2c-imx.c, i2c-exynos5等(具体到某个厂商cpu的i2C控制器驱动)

4.algos文件夹
实现了一些I2C总线适配器的通信方法。

四 工程师主要工作:
a. I2C总线驱动
1. 提供I2C适配器的硬件驱动。
探测,初始化I2C适配器(如申请I2C的I/O地址和中断号),驱动CPU控制的I2C适配器从硬件上产生各种信号以及处理I2C中断等。
2. 提供I2C适配器的Algorithm。
用具体适配器的xxx_xfer()函数填充i2c_algorithm的master_xfer指针,并把i2c_algorithm指针赋值给i2c_adapter的algo指针。

b. I2C设备驱动
1. 实现I2C设备驱动中的i2c_driver接口。
用具体设备yyy的yyy_probe(), yyy_remove(), yyy_suspend(), yyy_resume()函数指针和i2c_device_id设备ID表赋值给i2c_driver的probe, remove, suspend, resume, id_table指针。
2. 实现I2C设备所对应类型的具体驱动。
i2c_driver只是实现设备与总线的挂接,而挂接在总线上的设备则有各种类型,千差万别。例如:如果是字符设备,就实现文件操作接口,即实现具体设备yyy的yyy_read(), yyy_write(), yyy_ioctl()函数等;如果是声卡,就实现ALSA驱动; 如果是加速度传感器,则实现input驱动。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值