


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
花点时间让你彻底搞懂I2C总线前言经常在论坛上看到有网友在咨询I2C的问题,这里就I2C总线做一个给比较全面的总结,感兴趣的网友可以耐心的看下去,相信对你会有帮助。【1. 基础知识】1.1. 关于口线电平在I2C总线中有2个口线,SDA和SCL。这两个口线对为OC输出。什么是OC呢?相对OC还有什么输出呢?OC就是开漏输出(Open Collector)的简称,有时候也叫OD输出(Open-Drain),OD是对mos管而言,OC是对双极型管而言,在用法上没啥区别。相对于OC输出,另一种输出叫推挽输出(Push-Pull),一般的MCU管脚输出可以设置这两种模式。这里分别介绍下这两种输出的不同点。推挽输出:可以输出高、低电平连接数字器件,推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.开漏输出: 输出端相当于三极管的集电极未接任何电平,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。对于MCU的开发者来讲,简单的这样理解就可以了。如果管脚设置成推挽输出模式,输出高时,IO口相当于VCC, 输出低时IO口相当于接地。如果管脚设置成开漏输出模式,输出高时,IO口的电平会和与其相连的口线进行与操作,如果都为高,才会被上拉拉成高电平,输出为低时,也相当于接地。I2C总线要实现线与的功能,所以SDA和SCL口线都必须设置为开漏输出模式。我们使用MCU的硬件I2C接口时,口线会被自动设置成开漏。但有时候我们会使用IO口来模拟I2C总线,这个时候我们如何设置口线呢?这里要分两种情况,如果MCU的口线支持开漏输出模式,则可以直接把SDA和SCL设置成开漏输出。例如Silicon 的C8051系列MCU,它的口线就支持开漏和推挽输出。如果MCU不支持开漏输出那怎么办呢?例如MSP430。在网上我们看到很多的例程代码都是直接设置IO口的高低电平,这样做其实是不太合理的。因为我们只满足了I2C总线在自己这端的时序要求。而没有考虑到连接在总线上的其他器件。如果总线上其他器件的电平和MCU输出的电平一致,这样做是没问题的,如果两边的电平不一致时,这样做就有一定风险造成IO的损坏。当你输出高时,相当于IO口连接到VCC,如果对方这是恰好输出的是低电平,那就相当于短路了。当然如果软件做的合理,是可以避免这样的事情的,但总线上的很多器件都不是由你能控制的,如何设计出更合理的软件来避免这样的问题发生呢?对于不支持开漏输出MCU,我们最合理的做法是,当设置口线电平为高时,我们把口线设置成输入状态,然后利用口线上的上拉电阻来把口线拉高。这样即使是两边电平不一致时,也不会造成IO口的损坏。I2C 电平组合.JPG (64.99 KB)2012-2-29 10:441.2. 关于总线口线 大家都知道I2C是由SDA、SCL两个口线组成的。这两个口线的高低电平组合、上升下降边沿组合就形成了总线的各种时序。这里我们先做一个枚举,看下两个口线能组合出什么样的时序出来。上表中灰色部分不是I2C总线关心的,9,10分别被定义为I2C的START和STOP信号。I2C数据总线SDA是在时钟为高时有效,在时钟SCL为高期间,SDA如果发生了电平变化就会终止或重启I2C中线,所以我们在数据传输过程中,要在SCL为低的时候去更改SDA的电平。1.3. 关于I2C总线的时序在上一节中我讲到了由SDA和SCL能形成的各种电平组合,那么这些组合如何在I2C总线上得到应用的呢?在这一节,我们一步一步的来分析I2C总线的逻辑时序。首先是I2C的START信号。 START信号是在SCL位高电平时,SDA从高电平变成低电平。大家想一下为什么是这样设计呢?这个和I2C的多主性能有一定关系。因为I2C的总线是开漏输出的,总线上接上上拉电阻后,SCL和SDA就变成了高电平,这个时候挂接在总线上的任意一个I2C主机口可以把SDA拉低,即产生了一个START信号,挂接在总线上的其他I2C主机检测到这个信号后就不能去操作I2C总线了,否则会发生冲突。直到检测到一个STOP信号为止。 表2.JPG (11.18 KB)2012-3-7 09:27STOP的信号是在SCL口线为高时,SDA产生一个上升沿。STOP信号之后,I2C总线恢复到初始状态表3.JPG (10.74 KB)2012-3-7 09:27那么这两个时序如何在在我们软件中实现呢? 这里我以MSP430为例,探讨下如何合理的实现这样的代码. 首先,我们需要把SDA和SCL的口线都设置成输入模式(前面讲了为什么),当口线设置成输入模式时,PXOUT寄存器的值是用来设置口线是上拉还是下拉,PXOUT需要设置成上拉。(想一下为什么?)因为如果你设置成下拉的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 压疮患者护理试题题库及答案解析
- 多人合伙开店协议书
- 车辆移交协议书
- 与公司借款协议书
- 2025年墓地购置合同(含墓碑设计、施工及墓园管理)
- 2025的购销合同范本
- 2025年麻醉科麻醉药物应用模拟测试答案及解析
- 中美协议书关系
- 基金从业考试考啥及答案解析
- 海洋渔业品牌故事挖掘传播与营销活动创新创业项目商业计划书
- 工业污水处理基础设施建设项目可行性研究报告
- 2025 种植护理术中配合技巧课件
- 《组织行为学》课件-第1章 组织行为学概述
- 高炉大修总结课件
- 畜禽粪污资源化利用培训
- 2024年大学试题(政治学)-比较政治制度考试近5年真题集锦(频考类试题)带答案
- 建筑物拆除场地清理垃圾外运施工方案
- 国家开放大学《Web开发基础》形考任务实验1-5参考答案
- 断亲协议书模板
- 中秋国庆假期安全教育
- GB/T 19808-2005塑料管材和管件公称外径大于或等于90mm的聚乙烯电熔组件的拉伸剥离试验
评论
0/150
提交评论