I2C总线 | I2C总线介绍


  • I2C总线介绍

I2CInter - Intergrated Circuit)总线(也称IICI2C)是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通行控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口少、控制方式简单,器件封装形式少、通信速率高等优点。

I2C有如下特点:

  1. (1)两条总线线路:一条串行数据线SDA),一条串行时钟线SCL:控制时序);

  2. (2)每个连接到总线的器件都可以通过唯一的地址联系主机,同时主机可以作为主机发送器或者主机发送器主机接收器

  3. (3)是一个真正的多主机总线,如果两个或更多的主机同时初始化,数据传输可以通过冲突检测仲裁防止数据被破坏;

  4. (4)串行的8位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s

  5. (5)连接到相同总线的I2C数量只受到总线的最大电容400pF限制。

  • I2C总线术语

发送器:发送数据到总线的器件。

接收器:从总线接收数据的器件。

主机:初始化发送产生的时钟信号和终止发送的器件。

多主机:同时有多于一个主机尝试控制总线但不破坏传输。

仲裁:是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使传输不被破坏的过程。

同步:两个或多个器件同步时钟信号的过程。

  • I2C总线位传输

由于连接到I2C****总线的器件有不同种类的工艺(CMOS、NMOS、双极性),逻辑0(低)和逻辑1(高)的电平是不固定的,它是电源VCC的相关电平决定,每传输一个数据位就产生一个时钟脉冲,数据的有效形如下所示:

SDA线上的数据必须在时钟的高电平周期保持稳定。数据线的高或低电平状态IIC位传输数据的有效性在SCL线的时钟信号是低电平时才能改变。起始和停止条件如下图所示:

起始条件:SCL线是高电平时,SDA线从高电平向低电平切换。

停止条件:SCL线是高电平时,SDA线从低电平向高电平切换。

起始和停止条件一般都是由主机产生,总线在起始条件后被认为是处于忙碌状态,在停止条件的某段时间后总线被认为处于空闲状态。

  • IIC总线数据传输

1.字节格式

发送到SDA线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB),如果从机要完成一些其他的功能后(如一个内部中断服务程序)才能接受或者发送下一个完整的数据字节,可以使时钟线SCL保持低电平,迫使主机进入等待状态,当主机准备好接收下一个数据字节并释放时钟SCL后,数据继续传输。

2.应答响应

数据传输必须带响应位,相关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间发送器释放SDA线(高)。在响应的时钟脉冲期间,接收器必须将SDA线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。通常被寻址的接收器在接收到每个字节后,会产生一个响应。当从机不能响应从机地址时(如它正在执行一些实时函数不能接收或发送),从机必须使数据线保持高电平,主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输。

如果从机接收器响应了从机地址,但是在传输了一段时间后不能接收更多字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示。从机使数据线保持高电平,主机产生一个停止或重复起始条件。

如果传输中有主机接收器,它必须在从机不产生时钟的最后一个字节不产生响应,向从机发送器通知数据结束。从机接收器必须释放数据线,允许主机产生一个停止或重复起始条件。

  • IIC总线寻址方式

1.7位寻址

第一个字节的头七位组成了从机地址,最低位(LSB)是第8位,它决定了普通的和带重复开始条件的7位地址格式方向。第一个字节的最低位是“0”,表示主机会写信息到被选中的从机;“1”表示主机会向从机读信息。当发送一个地址后,系统中的每个器件都在起始条件后将头7位与它的自己的地址进行比较,如果一样,器件会判定它被主机寻址,至于是从机接收器还是从机发送器,都有R/W位决定。

2.10位寻址

10位寻址与7位寻址兼容,而且可以结合使用。

10位寻址采用了保留的1111XXX作为起始条件,或重复起始条件的后第一个字节的头7位。10位寻址不会影响已有的7位寻址,有7位和10位地址的器件都可以连接IIC总线的10位地址格式到相同的IIC总线。它们都能用于标准模式和高速模式系统。

10位从机地址由起始条件或重复起始条件后的头两个字节组成。

第一个字节的头7位是11110XX的组合,其中最后两位XX是10位地址的两个最高位(MSB)。第一个字节的第8位是R/W,决定传输的方向。第一个字节的最低位是“0”,表示主机将写信息到选中的从机,“1”表示主机将向从机读信息。如果R/W位是“0”,则第二字节是10位从机地址剩下的8位;如果R/W位是“1”,则下一个字节是从机发给主机的数据。

  • 快速和高速模式

1.快速模式

快速模式器件可以在400kbit/s下接收和发送。

快速模式可以向下兼容,可以和标准模式器件在0~100kbit/s的IIC总线系统通讯。

2.高速模式

高速模式(Hs模式)可以在高达3.4Mbit/s的位速率下传输信息。

向下兼容快速模式和标准模式器件。

高速模式传输除了不执行仲裁和时钟同步外,与快速模式系统有相同的串行总线协议和数据格式。

I2C总线 | I2C总线介绍的更多相关文章

  1. linux设备驱动程序-i2c(1):i2c总线的添加与实现

    linux设备驱动程序-i2c(1):i2c总线的添加与实现 (基于4.14内核版本) 在上一章节linux设备驱动程序-i2c(0)-i2c设备驱动源码实现中,我们演示了i2c设备驱动程序的源码实现 ...

  2. linux之i2c子系统架构---总线驱动

    编写i2c设备驱动(从设备)一般有两种方式: 1.用户自己编写独立的从设备驱动,应用程序直接使用即可. 2.linux内核内部已经实现了一个通用的设备驱动,利用通用设备驱动编写一个应用程序(用户态驱动 ...

  3. 乾坤合一~Linux设备驱动之I2C核心、总线以及设备驱动

    我思念的城市已是黄昏 为何我总对你一往情深 曾经给我快乐 也给我创伤 曾经给我希望 也给我绝望 我在遥远的城市 陌生的人群 感觉着你遥远的忧伤 我的幻想 你的忧伤,像我的的绝望,那样漫长,,,,,这是 ...

  4. I2C和SPI总线对比【转】

    转自:http://blog.csdn.net/skyflying2012/article/details/8237881/ 最近2周一直在调试IIC和SPI总线设备,这里记录一下2种总线,以备后忘. ...

  5. Linux I2C核心、总线和设备驱动

    目录 更新记录 一.Linux I2C 体系结构 1.1 Linux I2C 体系结构的组成部分 1.2 内核源码文件 1.3 重要的数据结构 二.Linux I2C 核心 2.1 流程 2.2 主要 ...

  6. 关于I2C和SPI总线协议【转】

    关于I2C和SPI总线协议 IICvs SPI 现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral ...

  7. RS485总线典型电路介绍

    一.RS485总线介绍: RS485总线是一种常见的串行总线标准,采用平衡发送与差分接收的方式,因此具有抑制共模干扰的能力.在一些要求通信距离为几十米到上千米的时候,RS485总线是一种应用最为广泛的 ...

  8. 什么是总线、总线的类型、局部总线、局部总线类型和什么是接口方式?什么是IDE?什么是SCSI?

    在安装电脑系统时,进行内核配置时涉及到各种总线类型,有必要了解一下什么是总线.总线的类型.局部总线.局部总线类型和接口方式. 1)总线总线是一组通信线.在机器内部, 各部件通过总线连接; 对于外部设备 ...

  9. I2c串行总线组成及其工作原理

    采用串行总线技术可以使系统的硬件设计大大简化,系统的体积减小,可靠性提高,同时系统更容易更改和扩充 常用的串行扩展总线有:I2c总线,单总线,SPI总线,以及microwire.Plus等等 I2c总 ...

  10. 串行总线 —— I2C、UART、SPI

    I2C,也叫 IIC,是一种常见的串行总线,它只需要两根线即可在连接于总线上的器件之间传送信息. 0. 电气知识 开漏输出:Open drain output,不输出电压,低电平时接地,高电平时不接地 ...

随机推荐

  1. warning: the `gets' function is dangerous and should not be used.

    LINUX下编译C程序时,出现了:warning: the `gets' function is dangerous and should not be used. 原因:Linux 下gcc编译器不 ...

  2. markdown基本学习

    MarkDown学习 标题(二级标题 ##) 标题 字体 加粗(**文字**) 斜体 (*文字*) 加粗+斜体 (***文字***) 废弃 (~~文字~~) 引用(>文字) 摘抄 分割线(--- ...

  3. elementui中对样式的修改标签

    /deep/ .el-drawer.rtl { -webkit-animation: rtl-drawer-out .3s; animation: rtl-drawer-out .3s; backgr ...

  4. Apache和Nginx有什么区别,如何选择?

    Apache和Nginx都是大名鼎鼎的Web服务器软件. 网上已经有非常多关于apache和nginx区别的文章了,笔者就不从专业技术的角度进行解说,而按照目前比较流行的架构方式进行阐述. 1.安全性 ...

  5. Cesium渲染模块之Command

    1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库,使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,基于Apache2.0许可的开源程序,可以免费用于商业和非商业 ...

  6. UI界面实现SSH登录服务器并执行命令监控

    一.通过paramiko实现SSH远程登录服务器.执行命令并返回信息: 二.通过wxpython实现UI化: 三.代码实现如下: 1)主程序MainUI #coding:utf8 #!/usr/bin ...

  7. 小心golang中的无类型常量

    对于无类型常量,可能大家是第一次听说,但这篇我就不放进拾遗系列里了. 因为虽然名字很陌生,但我们每天都在用,每天都有无数潜在的坑被埋下.包括我本人也犯过同样的错误,当时代码已经合并并发布了,当我意识到 ...

  8. CosineWarmup理论与代码实战

    摘要:CosineWarmup是一种非常实用的训练策略,本次教程将带领大家实现该训练策略.教程将从理论和代码实战两个方面进行. 本文分享自华为云社区<CosineWarmup理论介绍与代码实战& ...

  9. 发布新版博客备份功能:生成 sqlite 数据库文件,vscode 插件可查看

    大家好,最近我们重新开发了园子的博客备份功能,今天发布第一个预览版,欢迎大家试用. 点击博客后台侧边栏的博客备份进入新版博客备份: 点击创建备份按钮创建博客备份任务(目前每天只能创建一次备份),待备份 ...

  10. CSharp linq 的本质

    linq 的本质是扩展方法和委托的结合 链式 linq 和 方法级linq List<int> list = new List<int>() { 3,9,32,7 }; // ...