分享

I2C 总线规范学习笔记

 liukai007 2008-12-26

I2C 总线规范学习笔记

作者:未知   时间:2007-10-12 20:54:38  来自:网上转载  浏览次数:1024  文字大小:【】【】【

1、I2C 总线术语的定义
    术语      描述
    发送器  发送数据到总线的器件
    接收器  从总线接收数据的器件
    主机     初始化发送产生时钟信号和终止发送的器件
    从机     被主机寻址的器件
    多主机  同时有多于一个主机尝试控制总线但不破坏报文
    仲裁     是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使报文不被破坏的过程
    同步     两个或多个器件同步时钟信号的过程

2、I2C 总线上数据传输的过程
    I2C 总线是一个多主机的总线,这就是说可以连接多于一个能控制总线的器件到总线。由于主机通常是微控制器,让我们考虑以下数据在两个连接到I2C 总线的微控制器之间传输的情况。这突出了I2C 总线的主机--从机和接收器--发送器的关系。
    应当注意的是这些关系不是持久的,只由当时数据传输的方向决定。
    传输数据的过程如下:
    1)假设微控制器A 要发送信息到微控制器B
       --微控制器A 主机寻址微控制器B 从机
       --微控制器A 主机发送器发送数据到微控制器B 从机接收器
       --微控制器A 终止传输
    2)如果微控制器A 想从微控制器B 接收信息
       --微控制器A 主机寻址微控制器B 从机
       --微控制器A 主机接收器从微控制器B 从机发送器接收数据
       --微控制器A 终止传输,甚至在这种情况下主机微控制器A 也产生定时而且终止传输
3、I2C 总线的仲裁
    连接多于一个微控制器到I2C 总线的可能性意味着超过一个主机可以同时尝试初始化传输数据。为了避免由此产生混乱,发展出一个仲裁过程。它依靠线与连接所有I2C 总线接口到I2C 总线。如果两个或多个主机尝试发送信息到总线,在其他主机都产生“0” 的情况下,首先产生一个“1”的主机将丢失仲裁。仲裁时的时钟信号是用线与连接到SCL 线的主机产生的时钟的同步结合。
    在I2C 总线上产生时钟信号通常是主机器件的责任,当在总线上传输数据时每个主机产生自己的时钟信号。主机发出的总线时钟信号只有在以下的情况才能被改变:慢速的从机器件控制时钟线并延长时钟信号,或者在发生仲裁时被另一个主机改变。
4、I2C 总线的配置
    SDA 和SCL 都是双向线路,都通过一个电流源或上拉电阻连接到正的电源电压。当总线空闲时,这两条线路都是高电平。连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能。I2C 总线上数据的传输速率在标准模式下可达 100kbit/s,在快速模式下可达 400kbit/s,在高速模式下可达 3.4Mbit/s 。连接到总线的接口数量只由总线电容是 400pF 的限制决定。
    1)数据的有效性:SDA 线上的数据必须在时钟的高电平周期保持稳定。数据线的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变。
    2)起始和停止条件:在I2C 总线中唯一出现的是被定义为起始S 和停止P 条件的情况。其中一种情况是在SCL 线是高电平时,SDA 线从高电平向低电平切换这个情况表示起始条件;当SCL 是高电平时,SDA 线由低电平向高电平切换表示停止条件。
    起始和停止条件一般由主机产生。总线在起始条件后被认为处于忙的状态,在停止条件的某段时间后总线被认为再次处于空闲状态。如果连接到总线的器件合并了必要的接口硬件,那么用它们检测起始和停止条件十分简便。但是没有这种接口的MCU,在每个时钟周期至少要采样SDA 线两次来判别有没有发生电平切换。
    Hs 模式器件的系统的物理I2C 总线配置:主机器件的SDA 和SCL 管脚只在速度混合的总线系统中使用,在只有Hs 模式的系统中不需要连接。此时这些管脚有其他功能。
    可选的串连电阻RS 保护I2C 总线器件的I/O 级,防止总线上高电压的毛刺影响I/O 级并将振荡和干扰减到最小。
    上拉电阻Rp 使SDAH 和SCLH 线在总线空闲的时侯保持高电平,并确保信号在要求的上升时间内从低电平变成高电平。对于电容负载很高>100pF 的总线线路,为了符合上升时间的要求,可以用外部上拉电流源代替Rp 。除非跟着一个响应位,Hs 模式传输的SCLH 时钟脉冲上升时间被激活主机的内部电流源上拉电路MCS 缩短。
5、I2C 总线的电平兼容
    I2C 总线器件的电气规范和连接到它们的总线线路特性:有1.5V 和3V 固定输入电平的 I2C 总线器件每个都有它们自己相应的电源电压上拉电阻必须连接到一个5V +-10% 的电源。输入电平连接到VDD 的I2C 总线器件必须有一条公共的电源线连接到上拉电阻。当有固定输入电平的器件与输入电平连接到VDD 的器件混合使用时,后者必须连接到一条公共的5V +-10% 电源线,而且必须连接上拉电阻到SDA 和SCL 管脚。
    如何将电压不同的器件通过连接到电源电压线的上拉电阻连接到相同的总线?尽管上述是最简单的解决方法,但低电压的器件必须能容忍5V, 这将使它们的生产更昂贵。
    通过使用双向电平转换器,可以将电源电压和逻辑电平不同的两部分I2C 总线连接起来。“低电压”部分有上拉电阻,而且器件连接到3.3V 的电源电压;“高电平”部分有上拉电阻,器件连接到5V 电源电压。两部分的器件都有与逻辑输入电平相关的电源电压和开漏输出配置的I/O。
    每条总线线路的电平转换器是相同的,而且由一个分立的N通道增强型MOS-FET 管、串行数据线SDA 的TR1 和串行时钟线SCL 的TR2 组成。门极g 要连接到最电源电压VDD1,源极s 连接到“低电压”部分的总线线路,而漏极d 则连接到“高电压”部分的总线线路。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多