没有合适的资源?快使用搜索试试~ 我知道了~
首页Linux_I2C总线驱动分析(主要是probe的方式)
资源详情
资源评论
资源推荐
/* If an adapter algorithm can't do I2C-level access, set master_xfer
to NULL. If an adapter algorithm can do SMBus access, set
smbus_xfer. If set to NULL, the SMBus protocol is simulated
using common I2C messages */
/* master_xfer should return the number of messages successfully
processed, or a negative value on error */
int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs,
int num);
int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,
unsigned short flags, char read_write,
u8 command, int size, union i2c_smbus_data *data);
/* To determine what the adapter supports */
u32 (*functionality) (struct i2c_adapter *);
};
/*
* i2c_adapter is the structure used to identify a physical i2c bus along
* with the access algorithms necessary to access it.
*/
struct i2c_adapter {
struct module *owner;
unsigned int id;
unsigned int class; /* classes to allow probing for */
const struct i2c_algorithm *algo; /* the algorithm to access the bus */
void *algo_data;
/* data fields that are valid for all devices */
u8 level; /* nesting level for lockdep */
struct mutex bus_lock;
int timeout; /* in jiffies */
int retries;
struct device dev; /* the adapter device */
int nr;
char name[48];
struct completion dev_released;
};
Linux 的 I2C 体系结构分为 3 个组成部分:
1·I2C核心:
I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(即“algorithm”)
上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。这部分是
与平台无关的。
2·I2C总线驱动:
I2C总线驱动是对I2C硬件体系结构中适配器端的实现。I2C总线驱动主要包含了I2C适配器
数据结构i2c_adapter、I2C适配器的algorithm数据结构i2c_algorithm和控制I2C适配
器产生通信信号的函数。经由I2C总线驱动的代码,我们可以控制I2C适配器以主控方式产
生开始位、停止位、读写周期,以及以从设备方式被读写、产生ACK等。不同的CPU平台
对应着不同的I2C总线驱动。
总线驱动的职责,是为系统中每个I2C总线增加相应的读写方法。但是总线驱动本身并不
会进行任何的通讯,它只是存在在那里,等待设备驱动调用其函数。
这部分在MTK 6516中是由MTK已经帮我们实现了的,不需要我们更改。
3· I2C设备驱动:
I2C设备驱动是对I2C硬件体系结构中设备端的实现。设备一般挂接在受CPU控制的I2C适
配器上,通过I2C适配器与CPU交换数据。I2C设备驱动主要包含了数据结构i2c_driver和
i2c_client,我们需要根据具体设备实现其中的成员函数。在Linux内核源代码中的
drivers目录下的i2c_dev.c文件,实现了I2C适配器设备文件的功能,应用程序通过“i2c-
%d”文件名并使用文件操作接口open()、write()、read()、ioctl()和close()等来访问这
个设备。应用层可以借用这些接口访问挂接在适配器上的I2C设备的存储空间或寄存器并
控制I2C设备的工作方式。
设备驱动则是与挂在I2C总线上的具体的设备通讯的驱动。通过I2C总线驱动提供的函数,
设备驱动可以忽略不同总线控制器的差异,不考虑其实现细节地与硬件设备通讯。
这部分在MTK 6516中是由具体的设备实现的。(比如camera)
struct i2c_client:
代表一个挂载到 i2c 总线上的 i2c 从设备,该设备所需要的数据结构,其中包
括该 i2c 从设备所依附的 i2c 主设备 struct i2c_adapter *adapter 该 i2c 从
设备的驱动程序 struct i2c_driver *driver 作为 i2c 从设备所通用的成员变量,
比如 addr, name 等 该 i2c 从设备驱动所特有的数据,依附于 dev-
>driver_data 下
struct i2c_adapter:
代表主芯片所支持的一个 i2c 主设备。
struct i2c_algorithm *algo:
是该 i2c 主设备传输数据的一种算法,或者说是在 i2c 总线上完成主从设备间数据通信的一
种能力。
Linux的i2c子系统新、旧架构并存。主要分为旧架构(Legacy)也有人称
之为adapter方式,和新的架构new-style的方式。
这俩者的区别主要在于设备注册和驱动注册的不同。对于Legacy的设备注册是在驱动运行的时候动
态的创建,而新式的new-style则是采用静态定义的方式。
注:MTK在Android2.1版上用的是Legacy的架构,而在Android2.2版上用的是new-style的架构。(在这
里我就只说明Android2.2的new-style的实现方法)
剩余11页未读,继续阅读
flywind
- 粉丝: 8
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论3