ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:4.54MB ,
资源ID:2088989      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2088989.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(I2C驱动培训文档.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

I2C驱动培训文档.docx

1、I2C驱动培训文档I2C驱动 1、协议I2C 总线是一种用于IC器件之间连接的双向二线制总线I2C总线有两根信号线,一根为SDA(数据线),一根为SCL(时钟线)。可发送和接收数据。任何时候时钟信号都是由主控器件产生。I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发

2、出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。 基本概念 主机 初始化发送,产生时钟信号和终止发送的器件 从机 被主机寻址的器件 发送器 发送数据到总线的器件 接收器 从总线接收数据的器件 多主机 同时有多于一个主机尝试控制总线 但不破坏报文 仲裁 是一个在有多个主机同时尝试控制总线,但只允许其中一个控制总线并使报文不被破坏的过程 同步 两个或多个器件同步时钟信号的过程主机发送数据流程(1)主机在检测到总线为“空闲状态”(即 SDA、SCL 线均为高电平)时,发送一个启动信号“S”,开始一次通信的开始(2)主机接着发

3、送一个命令字节。该字节由 7 位的外围器件地址和 1 位读写控制位 R/W组成(此时 R/W=0)(3)相对应的从机收到命令字节后向主机回馈应答信号 ACK(ACK=0)(4)主机收到从机的应答信号后开始发送第一个字节的数据(5)从机收到数据后返回一个应答信号 ACK(6)主机收到应答信号后再发送下一个数据字节(7)当主机发送最后一个数据字节并收到从机的 ACK 后,通过向从机发送一个停止信号P结束本次通信并释放总线。从机收到P信号后也退出与主机之间的通信注意:主机通过发送地址码与对应的从机建立了通信关系,而挂接在总线上的其它从机虽然同时也收到了地址码,但因为与其自身的地址不相符合,因此提前退

4、出与主机的通信; 主机的一次发送通信,其发送的数据数量不受限制。主机是通过 P 信号通知发送的结束,从机收到 P 信号后退出本次通信; 主机的每一次发送后都是通过从机的 ACK 信号了解从机的接收状况,如果应答错误则重发。总线空闲状态 I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。启动信号 在时钟线SCL保持高电平期间,数据线SDA上的电平被拉低(即负跳变),定义为I2C总线总线的启动信号,它标志着一次数据传输的开始。启动信号是一种电平跳变时序信号,而不是一个电平信号

5、。启动信号是由主控器主动建立的,在建立该信号之前I2C总线必须处于空闲状态。重启动信号 在主控器控制总线期间完成了一次数据通信(发送或接收)之后,如果想继续占用总线再进行一次数据通信(发送或接收),而又不释放总线,就需要利用重启动Sr信号时序。重启动信号Sr既作为前一次数据传输的结束,又作为后一次数据传输的开始。利用重启动信号的优点是,在前后两次通信之间主控器不需要释放总线,这样就不会丢失总线的控制权,即不让其他主器件节点抢占总线。停止信号 在时钟线SCL保持高电平期间,数据线SDA被释放,使得SDA返回高电平(即正跳变),称为I2C总线的停止信号,它标志着一次数据传输的终止。停止信号也是一种

6、电平跳变时序信号,而不是一个电平信号,停止信号也是由主控器主动建立的,建立该信号之后,I2C总线将返回空闲状态。插入等待时间 如果被控器需要延迟下一个数据字节开始传送的时间,则可以通过把时钟线SCL电平拉低并且保持,使主控器进入等待状态。一旦被控器释放时钟线,数据传输就得以继续下去,这样就使得被控器得到足够时间转移已经收到的数据字节,或者准备好即将发送的数据字节。带有CPU的被控器在对收到的地址字节做出应答之后,需要一定的时间去执行中断服务子程序,来分析或比较地址码,其间就把SCL线钳位在低电平上,直到处理妥当后才释放SCL线,进而使主控器继续后续数据字节的发送。总线封锁状态 在特殊情况下,如

7、果需要禁止所有发生在I2C总线上的通信活动,封锁或关闭总线是一种可行途径,只要挂接于该总线上的任意一个器件将时钟线SCL锁定在低电平上即可。总线竞争的仲裁 总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况,这种情况叫做总线竞争。I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位的比较,从而确保了

8、竞争仲裁的可靠性。由于是利用I2C总线上的信息进行仲裁,因此不会造成信息的丢失。时钟信号的同步 在I2C总线上传送信息时的时钟同步信号是由挂接在SCL线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不能影响SCL线的状态,于是这些器件将进入高电平等待的状态。当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉

9、成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。i2c的有关图例:参考博客:二、iomux I OMUXC指IO多路复用控制器。由于imx6集成了很多的功能模块,BGA封装容纳不了那么多引脚,所以就想到用IOMUXC的方式来解决此问题,也即一个功能模块的引脚,通过n选1的多路开关,把需要的外设连接到该引脚上。要使用哪个功能,就需要配置引脚参数。在实际开发中,具体的配置是通过IOMUXC_SW_MUX_CTL_PAD_(BGAcontact NAME,比如UART3_RXD)寄存器来实现,然后通过配套的

10、寄存器IOMUXC_SW_PAD_CTL_PAD_(PAD NAME, 比如UART3_RXD)来配置管脚的驱动电压,回转率,驱动强度,开漏,上拉, DDR 类型等等。下面通过一个具体实例,来让大家有个认识: 在linux或android系统中,假如我们要配置飞思卡尔IMX6处理器的GPIO管脚,比如是GPIO_19这个管脚,那么要像这样:cpp view plaincopy1 #define MX6Q_PAD_GPIO_19_GPIO_4_5 2 (_MX6Q_PAD_GPIO_19_GPIO_4_5 | MUX_PAD_CTRL(NO_PAD_CTRL) 其中_MX6Q_PAD_GPIO_

11、19_GPIO_4_5定义为:cpp view plaincopy3 #define _MX6Q_PAD_GPIO_19_GPIO_4_5 4 IOMUX_PAD(0x0624, 0x0254, 5, 0x0000, 0, 0) 这个IOMUX_PAD宏是定义GPIO的关键宏,其原型为:cpp view plaincopy5 #define IOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _sel_input_ofs, 6 _sel_input, _pad_ctrl) IOMUX_PAD宏有6个参数,每个参数的意思是:参数含义_pad_ct

12、rl_ofs 控制寄存器的偏移地址(16进制)_mux_ctrl_ofsMUX控制寄存器的偏移地址(16进制), 用于选择引脚的功能_mux_modeMUX模式,bit03,围07_select_input_ofs SELECT_INPUT寄存器偏移地址(16进制)_select_input Daisy Chain模式, bit01,围03_pad_ctrlbits to be set in register _pad_ctrl_ofs for configuration selection具体的含义要结合IMX6数据手册【Chapter 36 IMOUX Controller(IOMUXC)

13、】的容。下面看下IOMUX_PAD(0x0624, 0x0254, 5, 0x0000, 0, 0)中参数的在数据手册中的位置,请看截图。1、_pad_ctrl_ofs从图中可以看到_pad_ctrl_ofs=0624h2、_mux_ctrl_ofs、_mux_mode 如上图,_mux_ctrl_ofs取值为0x254,_mux_mode围为000110只有_mux_mode = 0时,_select_input_ofs和_select_input才有效,其余时候_select_input_ofs和_select_input 都为0。I2c2的复用 结合上边对iomux的介绍,参考原理图,T

14、ianqian在Iomux工具中ball中查看U5再查看下图标记部分看完原理图,结合iomux工具,再参考数据手册,配置把U5复用为i2c2_scl功能参考博客: 3、驱动基本知识在 Linux核源代码中的 drivers 目录下包含一个 i2c 目录,而在 i2c 目录下又包含如下文件和文件夹。 (1)i2c-core.c。 这个文件实现了 I2C 核心的功能以及/proc/bus/i2c*接口。 (2)i2c-dev.c实现了 I2C 适配器设备文件的功能,每一个 I2C 适配器都被分配一个设备。通过适配器访问设备时的主设备号都为89,次设备号为0255。应用程序通过“i2c-%d” (i

15、2c-0, i2c-1, i2c-10,)文件名并使用文件操作接口 open()、write()、read()、ioctl()和 close()等来访问这个设备。 i2c-dev.c 并没有针对特定的设备而设计,只是提供了通用的 read()、write()和 ioctl()等接口,应用层可以借用这些接口访问挂接在适配器上的 I2C 设备的存储空间或寄存器,并控制 I2C 设备的工作方式。 (3)busses 文件夹。 这个文件中包含了一些 I2C 总线的驱动,如针对 S3C2410、S3C2440 和 imx等处理器的I2C 控制器驱动为 i2c-imx.c。 (4)algos 文件夹。 实现了一些 I2C 总线适配器的 algorithm。 核中的 i2c.h 这个头文件对 i2c_driver、i2c_client、i2c_adapter 和 i2c_algorithm 这 4

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1