欢迎光临散文网 会员登陆 & 注册

I2C通信协议:了解I2C Primer、PMBus和SMBus

2023-06-15 18:57 作者:cpetw_com  | 我要投稿

 摘要
    I2C,即Inter-Integrated Circuit,是一种常用的串行通信协议,用于在器件之间——特别是两个或两个以上不同电路之间建立通信。I2C Primer是最常用的I2C。本文将介绍I2C Primer的基本特性和标准,并重点说明在通信实现过程中如何正确使用该协议。从I2C的基本原理出发,我们将介绍其变体子集——系统管理总线(SMBus)和电源管理总线(PMBus)——的可用性及二者的区别。这三种协议各有专门的功能,旨在满足不同的客户需求。
为何重要?
    I2C有利于设计人员在系统的众多节点之间建立简单、双向、灵活的通信。I2C仅使用两条双向线来发送和接收信息,从而降低了复杂性。它还允许设计人员配置多个主节点系统IC之间的通信。I2C对管理系统和电源的开发人员也很有利,让他们能够在尽可能短的时间内创建高质量的产品。“沟通(通信)对那些致力于沟通(通信)的人有用。”—John Powell

    通信协议在组织设备之间通信时扮演着重要角色。它基于系统要求而以不同方式进行设计。此类协议具有明确的、为实现成功通信而协商一致的规则。如果您曾经使用LED显示器、传感器甚至加速度计模块之类的东西构建过系统,那么您很可能已经使用过I2C。I2C支持多个节点连接单个主器件和多个主器件连接多个节点的特性。如果您希望物尽其用,让一个微控制器将数据记录到单个存储卡,或向单个LCD显示文本,则此特性非常有用。

    除了最常用的I2C Primer,I2C还有两个变体,分别专注于系统和电源应用,称为系统管理总线(SMBus)和电源管理总线(PMBus)。根据定义,Inter-Integrated Circuit (I2C)——也称为Inter IC——是一种硬件通信协议,它通过一条多主器件、多节点、串行通信总线进行同步通信。同步通信意味着两个(或两个以上)交换数据的器件共享一条公共时钟线。I2C广泛用于将低速外围IC连接到处理器和微控制器。I2C总线由飞利浦公司设计,它让位于同一电路板上的器件之间可以轻松通信。

I2C Primer
接口
使用一条串行数据(SDA)线、一条串行时钟(SCL)线和一个公共接地来承载所有通信,最大程度地减少连接。

 每个I2C器件有两条线路:

􀁦 SDA是供主器件和节点发送和接收数据的线路。
􀁦 SCL是承载时钟信号的线路。SCL总是由I2C主器件生成。规范
对时钟信号的低相位和高相位有最短周期要求。
I2C总线仅使用两条双向线路:每个器件的SDA和SCL用于简单的IC间通信。

 硬件最重要的注意是在SDA和SCL上加入上拉电阻。I2C器件通过开集或开漏引脚连接到总线,将线路拉低。当没有数据传输时,I2C总线处于高电平空闲状态;线路被被动拉高。要传输数

据,须切换线路,即先拉低再释放(又变为高电平)。数据位在时钟下降沿传输。开漏输出需要一个上拉电阻(图2中的Rp)才能正确输出高电平。上拉电阻连接在输出引脚和高电平所需的输出电压(图2中的VDD)之间。对于VCC和VDD (5 V)的典型值,4700 Ω是最常用的上拉电阻值。作为参考,屏蔽2 AWG双绞线电缆的电容范围为100 pF⁄m至240pF⁄m。因此,I2C链路的最大总线长度约为1米(100 kBaud时)或10米(10 kBaud时)。非屏蔽电缆的电容通常要小得多,但只能用在
以其他方式加以屏蔽的外壳内。

表1总结了I2C的关键特性。

 理论上,寻址模式的最大节点数为27或210,但有16个地址保留用于特殊用途。I2C是同步的,因此位的输出通过主器件和节点之间共享的时钟信号与位的采样同步。时钟信号始终由主器件控制。

保留I2C节点地址

有16个保留I2C地址。这些地址对应于以下两种模式之一:0000XXX或1111 XXX。表2显示了为特殊目的而保留的I2C地址。

I2C工作原理

I2C数据在消息中传输,消息被分解为数据帧。读写协议包含地址帧(即节点的二进制地址)和另一个数据帧,后者包含所传输的数据、开始和停止条件、重复起始位、读⁄写位以及每个数据帧之间的应答⁄不应答位。
时序规格表
I2C时序表也很重要,因为工程师利用它可以设计出与总线要求兼容的IC。每个数据速率都有自己的时序规格,主器件和节点必须遵守该规格才能正确传输数据。
表3显示了时序规格表上给出的符号和参数。

编辑 I2C传输子协议
总线上的传输要么是读操作,要么是写操作。读取和写入协议建立在一系列子协议之上,例如起始和停止条件、重复起始位、地址字节、数据传输位和应答⁄不应答位。
起始条件
顾名思义,起始条件总是在传输开始时出现,并由主器件发起。这样做是为了唤醒总线上的空闲节点器件。SDA线从高电平切换到低电平,然后SCL线从高电平切换到低电平。参见图4。
重复起始条件
在不发出停止条件的情况下,起始条件可以在传输期间重复。这是一种特殊情况,称为重复起始,用于改变数据传输方向、重复尝试传输、同步多个IC,甚至控制串行存储器。参见图5。
地址帧
地址帧包含7位或10位序列,具体取决于可用性(参见数据手册)。参见图6。

编辑

 不像SPI,I2C没有节点选择线路,因此它需要另一种方法来让节点知道数据正向其发送,而不是向另一个节点发送。这是通过寻址来实现的。地址帧始终是新消息中起始位之后的第一帧。主器件将其想要与之通信的节点地址发送到其所连接的每个节点。然后,每个节点将主器件所发送的地址与其自己的地址进行比较。如果地址匹配,它便向主器件发送一个低电压ACK位。如果地址不匹配,则节点什么也不做,SDA线保持高电平。

读⁄写位
地址帧的最后一位告知节点,主器件是想要将数据写入其中还是从中接收数据。如果主器件希望将数据发送到节点,则读⁄写位处于低电平。如果主器件请求从节点得到数据,则该位处于高电平。参见图7。
ACK⁄NACK位
消息中的每一帧后面都跟随一个应答⁄不应答位。如果成功接收到一个地址帧或数据帧,则接收器件会向发件者返回一个

ACK位。
图例:在下面的图中,白色框表示节点,蓝色框表示主器件。
参见图8。

数据帧
主器件检测到来自节点的ACK位之后,就准备发送第一数据帧。数据帧总是8位长,并以MSB优先方式发送。每个数据帧之后紧接着一个ACK⁄NACK位,以验证该帧是否已成功接收。主器件或节
点(取决于谁发送数据)必须收到ACK位,然后才能发送下一数据帧。参见图9。
停止条件
发送完所有数据帧之后,主器件可以向节点发送停止条件以停止传输。停止条件是指SCL线上的电压从低电平变为高电平,然后在SCL线保持高电平的情况下,SDA线上的电压从低电平变为高电平。在SCL线从低电平切换到高电平后,SDA线从低电平切换到高电平。参见图10。
I2C传输步骤:写入有关写入单个数据的I2C传输的示例,请参见图11。
第1步
主器件将SDA线从高电平切换到低电平,然后将SCL线从高电平切换到低电平,以将起始条件发送到每个相连的节点。

第2步
主器件将其想要与之通信的节点的7位或10位地址以及写操作位发送给每个节点。
例如,7位地址为0x2D,加上写操作位(相当于0),结果将是0x5A。
第3步
每个节点将主器件所发送的地址与其自己的地址进行比较。如果地址匹配,节点便将SDA线拉低一位的时间,以返回一个ACK位。如果来自主器件的地址与节点自己的地址不匹配,则节点让SDA线保持高电平不变。在SCL的第九个脉冲期间拉低SDA线路可以发送ACK位,保持浮空高电平则为NACK。
第4步
主器件发送或接收数据帧。
第5步
传输完每个数据帧之后,接收器件再向发送者返回一个ACK位,以确认成功接收该帧。
第6步
若要停止数据传输,主器件应将SCL切换为高电平,然后将SDA切换为高电平,从而发送停止条件。

 USB TO I2C(上海同旺电子):  https://shop220317387.taobao.com/


I2C通信协议:了解I2C Primer、PMBus和SMBus的评论 (共 条)

分享到微博请遵守国家法律