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

2023-05-16

目录

一、概述

二、首先了解一下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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务器总线协议_第一章----I2C总线协议入门 的相关文章

  • VS code配置latex美赛模板

    VS code配置latex美赛模板 首先要知道安装的latex版本是miktex还是texlive Miktex 我的是2 9的 解压模板文件 xff1a 用VScode打开上面红圈里的文件即可进行编辑 Texlive 打开 Tex Li
  • OkHttpUtils (OkHttpUtil工具类)

    public class OkHttpUtil static OkHttpUtil okHttpUtil private OkHttpClient Builder builder private Request Builder reques
  • C++经典类库(C++开发必看)

    现实中 xff0c C 43 43 的库门类繁多 xff0c 解决的问题也是极其广泛 xff0c 库从轻量级到重量级的都有 本文为你介绍了十一种类库 xff0c 有我们常见的 xff0c 也有不常见的 xff0c 一起来看 AD xff1a
  • libcurl第九课 Content-Length的添加机制

    场景 lt DOCTYPE HTML PUBLIC 34 W3C DTD HTML 4 01 EN 34 34 http www w3 org TR html4 strict dtd 34 gt lt HTML gt lt HEAD gt
  • 英伟达NX上使用 Python 硬解码ip摄像头h264视频流

    问题 用另一篇博客rtsp拉流的方法 xff0c 当单独拉流时 xff0c 不会出现任何问题 可是如果将拉流和检测算法结合 xff0c 就会出现断流 xff0c 花屏 xff0c 跳帧 xff0c 播放延迟 xff0c 播放速度卡顿等问题
  • http库

    当我们使用 Go 语言进行 Web 开发时 xff0c 不可避免地要使用到 http 包 该包提供了 HTTP 客户端和服务器的实现 xff0c 可以轻松地编写 HTTP 服务器和客户端 在本节中 xff0c 我们将学习如何使用 Go 语言
  • CMake链接静态库

    set CMAKE CXX STANDARD 14 include directories CMAKE SOURCE DIR include include directories CMAKE SOURCE DIR include rtk
  • 清晰解读C语言中的位域、字节序、比特序、大小端

    一 比特序 位序 比特序表示一个字节中8个比特位 xff08 bit xff09 之间的顺序问题 分为LSB 0 位序和MSB 0 位序 LSB least significant bit xff1a 数据的最低位存放在字节的第0位 MSB
  • swiper轮播图代码实例

    lt span class hljs constant DOCTYPE span html gt lt html gt lt head gt lt meta charset 61 span class hljs string 34 UTF
  • Ubuntu编译安装Node.js

    编译安装nodejs 1 wget c https nodejs org dist v6 9 1 node v6 9 1 tar gz 2 tar zxvf node v6 9 1 tar gz 3 cd node v6 9 1 4 con
  • node.js的post和get简单取值

    span class hljs reserved var span http 61 span class hljs built in require span span class hljs string 39 http 39 span s
  • php 判断是移动端还是pc端访问web页面

    function is mobile span class hljs variable user agent span 61 span class hljs variable SERVER span span class hljs stri
  • mongodb的where条件

    mongodb的where条件 1 比较条件 等于 db tian find span class hljs string 39 name 39 span span class hljs symbol span class hljs str
  • ZED相机的使用

    下面简要说明一下ZED双目相机的使用 1 开发环境搭建 首先zed的相机必须要nvidia显卡支持 xff0c 没有的同学可以洗洗睡了 xff0c 或者你可以拿来当普通相机用 首先安装cuda xff0c 再去zed官网下载对应cuda版本
  • libcurl第十一课 使用以及注意事项

    经验 1 xff09 配合Postman能够快速的生成例子代码 2 xff09 curl global init初始化 如果调用curl库函数的时候 xff0c 没有调用curl global init进行curl全局变量的初始化 xff0
  • 基于ROS的hector-slam使用Kinect V1建图

    距离值在ROS中被称为scan xff0c 并且姿态 xff08 位置 43 方向 xff09 信息会根据相对坐标关系而改变 xff0c 因此被称为tf xff08 transform xff09 一 建图实际操作 下载源码测试源码 xff
  • 下载Fiddler后不知从何下手?来看看怎么抓包抓接口吧

    1 Fiddler简介 Fiddler是位于客户端和服务器之间的一个代理 xff0c 类似于生活中厂家和客户之间的代理商或微商 2 Fiddler抓包实战 当打开Fiddler时 xff0c 便会自动开启代理服务器 xff0c 监听端口号抓
  • socket、select、poll、epoll实现TCP并发处理

    网络通信 常用网络通信接口大概四种 xff0c socket select poll epoll 使用socket实现服务器的并发处理 优点 xff1a 代码框架简单 缺点 xff1a 碍于内存的限制 xff0c 并发量不会大 xff0c
  • find_package opencv

    1 find package OpenCV 3 REQUIRED 通过OpenCV DIR变量寻找OpenCVConfig cmake文件 xff0c 默认在 usr share OpenCV中 set OpenCV DIR 34 34 指
  • 工业通讯领域的总线、协议、规范、接口、数据采集与控制系统

    一 工控安全 工控 xff0c 指的是工业控制自动化 xff0c 主要利用电气 机械 软件组合的方式实现 xff0c 即是工业控制系统 xff0c 或者是工厂自动化控制 工控安全指的是工业控制系统的数据 网络和系统安全 随着工业信息化的迅猛

随机推荐