第14章IIC设备驱动程序分解.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第14章 IIC设备驱动程序 IIC设备是一种通过IIC总线直接连接的设备,由于其简单性,被广泛引用于电子系统中。在现代电子系统中,有很多的IIC设备需要进行相互之间的通信。为了提高硬件的效率和简化电路的设计,PHILIPS公司开发了IIC总线。IIC总线可以用于设备间的数据通信。本章将对IIC设备及其驱动进行详细的讲解。 14.1 IIC设备的总线及其协议 IIC总线是由PHILIPS公司开发的两线式串行总线,用于连接微处理器和外部IIC设备。IIC设备产生于20世纪80年代,最初专用于音频和视频设备,现在在各种电子设备中都有广泛的应用。 14.1.1 IIC总线的特点 IIC总线有两条总线线路:一条是串行数据线(SDA),一条是串行时钟线(SCL)。SDA负责数据传输,SCL负责数据传输的时钟同步。IIC设备通过这两条总线连接到处理器的IIC总线控制器上。 与其他总线相比,IIC总线有许多重要的特点。在选择一种设备来完成特定功能时,这些特点是选择IIC设备的重要依据。下面对IIC设备的主要特点进行简要的总结。 14.1.2 IIC总线的信号类型 IIC总线在传输数据的过程中有3种类型的信号:开始信号、结束信号和应答信号。这些信号由SDA线和SCL线的电平高低变化来表示。 14.1.3 IIC总线的数据传输 在分析IIC总线的数据传输前需要知道主机和从机的概念: 1.主机和从机 IIC总线中发送命令的设备称为主机,对于ARM处理器来说,主机就是IIC控制器。接受命令并响应命令的设备称为从机。 2.主机向从机发送数据 主机通过数据线SDA向从机发送数据。当总线空闲时,SDA和SCL信号都处于高电平。 14.2 IIC设备的硬件原理 在写设备驱动程序之前,应该先了解一下IIC设备的硬件原理。S3C2440处理器中集成了一个IIC控制器,本节将对这个控制器的硬件结果进行详细的讲解。S3C2440中集成了一个IIC控制器,用来管理IIC设备,实现设备的数据接收和发送功能。 14.3 IIC设备驱动程序的层次结构 因为IIC设备种类丰富,如果为每一个IIC设备写一个驱动程序,那么Linux内核中关于IIC设备的驱动就将非常庞大。这不设计方式不符合软件工程中的代码复用规则,所以需要对IIC设备驱动中的代码进行层次化组织。 14.3.1 IIC设备驱动的层次结构 这里简单的将IIC设备驱动的层次分为:设备层,总线层。理解这两个层次的重点是理解4个数据结构,这4个数据结构是:i2c_driver、i2c_client、i2c_algorithm、i2c_adapter。i2c_driver、2c_client属于设备层;i2c_algorithm、i2c_adapter属于总线层。 14.3.2 IIC设备层 IIC设备层由IIC设备和对应的设备驱动程序组成,分别用数据结构i2c_client和i2c_driver表示。 14.3.3 i2c_driver和i2c_client的关系 结构体i2c_driver和i2c_client的关系较为简单,其中i2c_driver表示一个IIC设备驱动程序,i2c_client表示一个IIC设备。这两个结构体之间通过指针连接起来,其关系如图所示: 14.3.4 IIC总线层 IIC总线层由总线适配器和适配器驱动程序组成,分别用数据结构i2c_adaptert和i2c_algorithm表示。 14.3.5 IIC设备层和总线层的关系 大体上,IIC设备驱动程序可以分为设备层和总线层。设备层包括一个重要的数据结构i2c_client。总线层包括两个重要的数据结构,分别是i2c_adapter和i2c_algorithm。一个i2c_client结构表示一个物理的IIC设备;一个i2c_adapter结构对应一个物理上的适配器;一个i2c_algorithm结构表示适配器对应的传输数据的方法。这三个数据结构的关系如图所示: 14.3.6 写IIC设备驱动的步骤 IIC设备层次结构较为简单,但是写IIC设备驱动程序却相当的复杂。当工程师拿到一个新的电路板时,面对复杂的Linux IIC子系统,应该如下下手编程呢?首先需要思考的是哪些工作需要自己完成,哪些工作内核已经提供了。这个问题的答案如图所示: 14.4 IIC子系统的初始化 在启动系统时,需要对IIC子系统进行初始化。这些初始化函数包含在i2c-core.c文件中。该文件中包含IIC子系统中的公用代码,驱动开发人员只需要用它,而不需要修改它。下面对这些公用代码的主要部门进行介绍。 14.4.1 IIC子系统初始化函数i2c_init() IIC子系统是作为模块加载到系统中的。在系统启动中的模块加载阶段,会调

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档