服务器总线协议_第一章----I2C总线协议入门

目录

一、概述

二、首先了解一下I2C的I/O结构

三、其次了解一下I2C的时序

第一部分:起始停止信号简介

第二部分:I2C的时序部分要求

第三部分:I2C的一帧数据的格式

四、最终问与答

1)为啥开漏输出就需要加上拉电阻呢 ?

2)那么问题又来了,为啥I2C的IO要配置成为开漏输出模式呢?

3)为什么要求负载电容的要求?

4)I2C总线上拉电阻怎么选?


一、概述

I2C是无论在任何产品,任何单板上都会大量使用的总线,是接触服务器硬件最基础且最简单的总线。
I2C总线我会基于I2C官方协议共分两个章节为大家解惑,主分为一下两部分,本章讲解入门部分。
入门:主要讲解I2C协议是如何通信的,主机和从机之间是如何进行数据读写与传输。
进阶:主要讲解I2C的高级使用,也就是常说的I2C的冒险与竞争,官方名为同步与仲裁。

I2C官方协议可以自行下载:硬件I2C总线协议V2.1-硬件开发文档类资源-CSDN下载

服务器总线协议_第二章----I2C总线协议进阶:https://blog.csdn.net/qq_35341807/article/details/107524532

二、首先了解一下I2C的I/O结构

1.  I2C是两线制总线,也就是一组I2C有两根线,下面表格说明这两根线的作用。

            

2.  明白了这两根线的作用后我们来了解一下它的I/O结构,主要如下图所示:

     

红色方框:

表示I2C主要由SCL和SDA组成。

橙色方框:

可以看出黄色方框中画出了I2C的输入输出的IO结构。

输出: "SCLKN1 OUT" 与 "DATAN1 OUT" 的IO结构为OD输出(开漏输出)。

输入:"SCLK IN" 与 "DATA IN"为输入。

紫色方框:

如上所述,黄色方框中的时钟和数据输出引脚的IO模式为开漏输出模式,因此就需要外加上拉电阻。

这样就导致I2C总线在空闲的时候是高电平

以上讲解了I2C的IO结构,如果大家有问题可以留言或者私信我,常年在线。

三、其次了解一下I2C的时序

不管是什么总线,在它的Spec中都会有时序要求,我们人类交流是通过语言交流,在全世界有很多种不同的语言,在芯片世界,为了让他们也能够进行数据交流,因此诞生了很多不同的总线,时序就像是语法,学会了语法才算是掌握了一门语言,因此学会了总线时序,才算是掌握了总线。


第一部分:起始停止信号简介

在硬件攻城狮面试的时候,99%的面试官以及笔试试题会有让你描述出I2C的起始信号和停止信号,因此这个是必须要会的,那我们先来了解一下起始信号和停止信号,话不多说,先上图:

起始信号:如上图S框所示,上面讲过了,SCL和SDA在空闲的时候是高电平,当SCL是高电平的时候,主机将SDA拉低,这个                      动作便是起始信号。

停止信号:如上图P框所示,当SCL是高电平的时候,主机将SDA由低拉成高,这个动作便是停止信号。


第二部分:I2C的时序部分要求

接下来我们来学习一下I2C的时序部分的要求。

  

此图截取与I2C协议 V2.1的时序部分,所有支持I2C的器件都必须遵守此协议。


先来普及几个常识:

I2C支持3种模式:

标准模式(STANDARD-MODE):时钟频率为100Khz。

快速模式(FAST-MODE) :时钟频率为400Khz。

高速模式(HS-MODE): 时钟频率为3.4Mhz。

建立保持时间定义:

建立时间数据电平跳变时钟上升沿的时间,如果建立时间不够,数据将不能在这个时钟上升沿被稳定的打入触发器。

保持时间时钟上升沿    数据电平跳变 的时间,如果保持时间不够,数据同样不能被稳定的打入触发器

时钟的边沿以采样边沿为准,比如I2C是在数据的上升沿进行采样,那么建立保持时间以上升沿为基准。

VIH和VIL的定义

VIL为IO低电平判定电压值。

VIH为IO高电平判定电压值。


接下来我们主要讲解一下常用的标准模式I2C时序,其他模式类似于标准模式,只是spec要求时间不一样:

1. fSCL:SCL 时钟频率

这个时序要求为:I2C的SCL时钟的频率要等于100Khz,一个时钟周期的时间要等于10ms。

2. tLOW:SCL 时钟低电平的时间

红色方框已经将tLOW的时序框起来了。

这个时序要求为:SCL的下降沿VIL上升沿VIL的时间。

协议要求大于4.7us。

3. tSU:STA:重复起始信号的建立时间

红色方框已经将tSU:STA的时序框起来了。

这个时序要求为:当发生重复起始信号时,SCL上升沿的VIH到SDA的VIH的时间。

协议要求大于4.7us。

重复信号发生有很多种情况,比如:主机对从机写一个数据读两个数据,在读写切换的时候不需要发送停止信号,主机直接发送重复起始信号就可以重新开始寻址更换读写方向。

4. tHD:STA:起始信号的保持时间

红色方框已经将 tHD:STA的时序框起来了。

这个时序要求为:当I2C主机开始向从机发起数据读写时,起始信号SDA下降沿VIL到SCL下降沿VIH的时间。

协议要求大于4.0us。

5. tSU:DAT:数据信号的建立时间

红色方框已经将tSU:DAT的时序框起来了。

这个时序要求为:SDA的上升沿VIH  or  下降沿VIL到SCL的上升沿VIL的时间。

协议要求大于250ns。

6. tHD:DAT:数据信号的保持时间

红色方框已经将tHD:DAT的时序框起来了。

这个时序要求为:SCL的下降沿VIL到SDA的上升沿VIL or 下降沿VIH的时间。

协议要求大于5.0us。

7. Tr:SCL和SDA上升时间的要求

红色方框已经将Tr的时序框起来了。

这个时序要求为:标准模式下SCL和SDA的上升沿VIL到VIH的时间小于1000ns

8. Tf:SCL和SDA下降时间的要求

红色方框已经将Tf的时序框起来了。

这个时序要求为:标准模式下SCL和SDA的下降沿VIH到VIL的时间小于300ns

9. tSU:STO:结束信号的建立时间

红色方框已经将tSU:STO的时序框起来了。

这个时序要求为:SCL的上升沿的VIH到SDA上升沿VIL的时间。

协议要求时间大于4.0us。

10. tBUF:总线空闲时间

红色方框已经将tSU:STA的时序框起来了。

这个时序要求为:发送一帧数据结束后又开始新的传输,SDA上升沿VIH到SDA下降沿VIH的时间。

协议要求时间大于4.0us。

11. Cb:总线负载电容

这个负载电容的spec限制了一组总线上的从器件数量,负载电容指的是pin脚的寄生电容,PCB Layout走线电容等等。按照经验来说一个从期间的负载电容大概是10pf~30pf左右。

大概时序部分就是这些,在测试I2C的时候我们都需要按照I2C协议中的要求去卡时间,必须满足I2C时序,不然可能会出现读写出错的情况。


第三部分:I2C的一帧数据的格式

在一二部分我们对I2C的时序进行了一下了解,在第三部分我们看下I2C的一帧数据格式以及通信机制是怎么样的,

由于I2C总线时双向的,所以由主机和从机根据实际操作轮流控制总线,细品,你细细品。

先上图:

1. START:首先由主机发送起始信号,这个时候所有从机接收到起始信号,开始准备好通信,此时主机控制总线。

2. ADRESS:主机发完起始信号后,开始进入寻址阶段,主机发送7位I2C地址,此时主机控制总线。

3.R/W_N:主机发送完地址后紧跟着读写位,表明接下来我要进行写操作还是读操作,在发送完读写位后,此时主机释放总线。

4.ACK:这个是从机的应答位,此时总线的控制权由主机切换为从机控制总线,

             当从机接收到主机发来的地址和自己的地址一致后,会将ACK拉低。

             如果主机寻址的地址根本不存在时,由于主机已经释放总线,此时总线会被上拉电阻拉至高电平。

 5.DATA:当主机发出的地址+读写信号由从机应答后。

                写操作的时候此时总线由主机控制,主机发送8位数据。

                读操作的时候此时总线由从机控制,从机发送8位数据。

6.ACK:写操作的时候由从机控制总线发出。

              读操作的时候由主机控制总线发出。

7. STOP:在传输完一帧数据后,主机发送停止信号,停止总线的数据传输,停止信号发出后,总线处于空闲状态

四、最终问与答


1)为啥开漏输出就需要加上拉电阻呢 ?


:通常在IO内部简化为一个NMOS管,

       当栅极输入高时,由于漏极悬空,导致无法输出高电平,因此就需要外加上拉电阻用于驱动高电平(1)的输出。

       当栅极输入低时,MOS管导通,漏极和源极导通,等效于漏极接地,因此漏极电平为低电平(0)。

       因此就可以知道I2C是通过外部上拉电阻来驱动高电平的。


2)那么问题又来了,为啥I2C的IO要配置成为开漏输出模式呢?


:开漏输出模式可以实现一个逻辑功能,就是 “  线与  ” 。在IO结构图中可以看出,在I2C总线上画有两个从设备,实际上I2C可以挂很多从设备,从设备的数量主要受总线负载电容小于400pf的限制。线与就是当I2C总线上下挂很多从设备,只要有一个从设备将总线拉低,那么总线就处于被占用的状态,也就是为了使用更高级的功能,在下一章节:《 服务器总线协议_第二章----I2C总线进阶 》我会给大家重点讲解I2C是如何使用线与,在此继续向下讲解。

服务器总线协议_第二章----I2C总线协议进阶:https://blog.csdn.net/qq_35341807/article/details/107524532


3)为什么要求负载电容的要求?


答:负载电容会影响信号的上升时间,因为I2C协议对于SCL和SDA的信号上升下降时间是有要求的,因此电容不能超过spec要    求的400pf,如果想要在一路I2C下挂很多器件,可以通过使用增加Switch的方式,例如常用的PCA9548,可以通过一路I2C控制8路输出。


4)I2C总线上拉电阻怎么选?


答:I2C spec如下图所示:

在Spec中有对最大输出低电平的要求,要求IO口的灌电流最大为3mA,在3mA的电流驱动下,I/O输出的最大电压为0.4V,因此可以通过下面这个公式计算链路并联等效电阻最大值。注意:是一条I2C链路的并联等效电阻!

{\color{Red} \mathbf{Rp(max) = ( VDD - 0.4 ) \div 3}}

我们经常使用的上拉电阻通用为3.3V,所以并联等效电阻最大值为967Ω。在平常使用时候要注意一下尽量使等效电阻大于IK。

由于Device有负载电容,与上拉电阻形成RC等效链路,所以导致电阻如果选择过大会导致信号上升时间增大,所以上拉电阻也不宜选择过大,通常将一条链路的等效电阻设计为4.7K。


————————————————
版权声明:本文为CSDN博主「菜狗攻城狮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35341807/article/details/107393874

  • 30
    点赞
  • 140
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
IEC 61375-3-1-2012是一种列车网络标准,也称为MVB(Multifunction Vehicle Bus)总线协议。MVB总线协议是用于列车上各个系统之间进行通信和数据传输的一种标准。它定义了一套协议和规范,确保不同系统可以互相连接并高效地进行通信。 MVB总线协议使用总线结构,即多个设备通过同一根总线连接在一起。每个设备都有一个唯一的地址,可以通过这个地址进行识别和通信。这种结构可以简化列车上各个系统之间的连接,减少线缆数量和复杂度。 MVB总线协议支持多种通信方式,包括点对点通信和发布/订阅通信。在点对点通信模式下,发送方通过设备地址直接发送数据给接收方。而在发布/订阅通信模式下,发送方将数据发送到一个共享数据区域,其他设备可以订阅该数据并接收更新。 MVB总线协议还定义了数据传输的时序和规则。数据通过消息格式进行传输,每个消息包含了数据的类型、长度、发送和接收设备的地址等信息。消息可以按照优先级进行发送,以确保重要数据的及时和可靠传输。 MVB总线协议还包括了一些数据诊断和错误处理的机制。它能够监测和诊断网络中的故障,并提供报警和错误信息。同时,它还具备容错能力,能够自动进行误码纠正和恢复。 总之,IEC 61375-3-1-2012 MVB总线协议是一种用于列车网络的标准。它定义了一套通信和数据传输的规范,使得列车上的各个系统可以互相连接并高效地进行通信。这种标准化的协议有助于提高列车系统的可靠性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值