I2C总线简介 - 立创社区 (szlcsc.com)

简介

NXP半导体(原Philips半导体)于20多年前发明了一种简单的双向二线制串行通信总线,这个总线这个总线被称为IIC、Inter-IC或者I2C总线。目前I2C总线已经成为业界嵌入式应用的标准解决方案,被广泛地应用在各式各样基于微控器的专业、消费与电信产品中,作为控制、诊断与电源管理总线。多个符合I2C总线标准的器件都可以通过同一条I2C总线进行通信,而不需要额外的地址译码器。由于I2C是一种两线式串行总线,因此简单的操作特性成为它快速崛起成为业界标准的关键因素。

协议

2条双向串行线,一条数据线SDA,一条时钟线SCL。

SDA传输数据是大端传输,每次传输8bit,即一字节。

支持多主控(multimastering),任何时间点只能有一个主控。

总线上每个设备都有自己的一个地址,共7个bit,广播地址全0.

系统中可能有多个同种芯片,为此地址分为固定部分和可编程部份,细节视芯片而定。

常见术语

主机:启动数据传送并产生时钟信号的设备;

从机:被主机寻址的器件;

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

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

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

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

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

主机发送数据流程

● 主机发送一个启动信号“S”,开始一次通信的开始。

● 接着主机发送命令字节该字节由7位的外围器件地址和1位读写控制位R/W 组成(此时是写 R/W=0)。

● 相对应的从机收到命令字节后向主机回馈应答信号ACK(ACK=0)

● 主机收到从机的应答信号后开始发送第一个字节的数据

● 从机收到数据后返回一个应答信号ACK

● 主机收到应答信号后再发送下一个数据字节

● 当主机发送最后一个数据字节并收到从机的ACK后,通过向从机发送一个停止信号P结束本次通信并释放总线。从机收到P信号后也退出与主机之间的通信,此时一次数据通信即完成。

注意:①主机通过发送地址码与对应的从机建立了通信关系,而挂接在总线上的其它从机虽然同时也收到了地址码,但因为与其自身的地址不相符合,因此提前退出与主机的通信;

②主机的一次发送通信,其发送的数据数量不受限制。主机是通过P信号通知发送的结束,从机收到P信号后退出本次通信;

③主机的每一次发送后都是通过从机的ACK信号了解从机的接收状况,如果应答错误则重发。

主机接收数据流程

● 主机发送启动信号后,接着发送命令字节(其中 R/W=1)

● 对应的从机收到地址字节后,返回一个应答信号并向主机发送数据

● 主机收到数据后向从机反馈一个应答信号

● 从机收到应答信号后再向主机发送下一个数据

● 当主机完成接收数据后,向从机发送一个“非应答信号(ACK=1)”,从机收到ASK=1 的非应答信号后便停止发送

● 主机发送非应答信号后,再发送一个停止信号,释放总线结束通信

注意:主机所接收数据的数量是由主机自身决定,当发送“非应答信号/A”时从机便结束传送并释放总线(非应答信号的两个作用:前一个数据接收成功,停止从机的再次发送)。

传输规则

数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit;

若SDA发生跳变,则用来表示一个会话的开始或结束(后面讲)

数据改变:SCL为低电平时,SDA线才能改变传输的bit

   

开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

 

I2C总线简介-转载的更多相关文章

  1. I2C总线通讯协议

    I2C总线通讯协议 1. I2C总线简介 I2C是Inter-Integrated Circuit的简称,读作:I-squared-C.由飞利浦公司于1980年代提出,为了让主板.嵌入式系统或手机用以 ...

  2. IIC - 【转载】对I2C总线的时钟同步和总线仲裁的深入理解

    对I2C总线的时钟同步和总线仲裁的深入理解 每一个IIC总线器件内部的SDA.SCL引脚电路结构都是一样的,引脚的输出驱动与输入缓冲连在一起.其中输出为漏极开路的场效应管.输入缓冲为一只高输入阻抗的同 ...

  3. I2C总线协议学习笔记 (转载)

    1.I2C协议   2条双向串行线,一条数据线SDA,一条时钟线SCL.   SDA传输数据是大端传输,每次传输8bit,即一字节.   支持多主控(multimastering),任何时间点只能有一 ...

  4. I2C总线协议图解(转载)

    转自:http://blog.csdn.net/w89436838/article/details/38660631 另外,https://blog.csdn.net/qq_38410730/arti ...

  5. 【转载】SPI总线和I2C总线的异同点

    来源:https://blog.csdn.net/lishun1422840684/article/details/77776763 总结的简单.明了.适用! 一:SPI接口的全称是"Ser ...

  6. Linux I2C总线设备驱动模型分析(ov7740)

    1. 框架1.1 硬件协议简介1.2 驱动框架1.3 bus-drv-dev模型及写程序a. 设备的4种构建方法a.1 定义一个i2c_board_info, 里面有:名字, 设备地址 然后i2c_r ...

  7. I2C 总线协议

    1.I2C协议     2条双向串行线,一条数据线SDA,一条时钟线SCL.   SDA传输数据是大端传输,每次传输8bit,即一字节.   支持多主控(multimastering),任何时间点只能 ...

  8. ADXL345经验总结,采用SPI和I2C总线操作

    一. ADXL345简介       ADXL345是ADI公司推出的三轴(x,y,z)iMEMS数字加速度计(digital accelerometer),具有在16G下高分辨率(13Bit)测量能 ...

  9. 基于I2C总线的MPU6050学习笔记

    MPU6050学习笔记 1. 简述 一直想自己做个四轴飞行器,却无从下手,终于狠下决心,拿出尘封已久的MPU6050模块,开始摸索着数据手册分析,一步一步地实现了MPU6050模块的功能,从MPU60 ...

  10. EEPROM读写学习笔记与I2C总线(转)

    reference:https://www.cnblogs.com/uiojhi/p/7565232.html 无论任何电子产品都会涉及到数据的产生与数据的保存,这个数据可能并不是用来长久保存,只是在 ...

随机推荐

  1. Minio客户端工具mc

    简介:mc(Minio Client)是Minio提供访问和操作服务端的客户端工具,有Windows和Linux两个平台版本. 一.安装(基于Linux) 1. mc下载:wget https://d ...

  2. Centos操作系统在虚拟机VMware上的安装(二)

    a:hover { color: rgba(255, 102, 0, 1) } 1.下载centos操作系统,提供百度云盘链接:http://pan.baidu.com/s/1pLHOR03 2.打开 ...

  3. c--> #define 定义宏

    #define 定义宏 宏(Macro)是预处理命令的一种,它允许用一个标识符来表示一个字符串 1.有关定义宏的代码末尾不需要添加":"(分号) 2.定义宏define在计算的式子 ...

  4. 读取excel等文件根据注解自动装填为实体类

    问题:以前每次读取excel 都是根据第几列来装填实体类里面的属性.写起来很麻烦.还要判断. 思路: 1.因为每次读取excel 或者word表格 都能得到是第几列的数据,那么可以知道每列数据的ind ...

  5. 快速上手SpringBoot

    快速上手SpringBoot SpringBoot是用来简化Spring应用的初始化搭建以及开发过程 三个不需要,这是springboot使用mvc区别于其它框架的特点 tomcatd的端口 下一行是 ...

  6. BigQuery 如何帮助大规模交付业务型企业提供物联网解决方案

    [本文由 Cloud Ace 整理发布,Cloud Ace--谷歌云全球战略合作伙伴] (介绍:Leverege是一家软件公司,它使全球市场领导者能够快速且经济高效地构建企业物联网应用程序,以提供以数 ...

  7. idea如何引入外部jar包

    原文转载:https://blog.csdn.net/weixin_46949892/article/details/121602175

  8. debian安装mate桌面环境的方法(图)

    debian安装mate桌面环境的方法(图) 2018年11月11日   |   浏览: 5199   |  来源:www.yangshengliang.com   debian安装时是可以选择桌面环 ...

  9. 把pyecharts动图导入到PPT中

    如何把echarts 动图导入PPT 置顶 且听风来 2019-05-22 14:54:17 3347 收藏 6展开 首先看PPT是否开启插件,开启后 此处就有标志,然后就在你想插入的幻灯片处插入两个 ...

  10. JS中call、apply、bind

    call就是挨个传值,apply传一个数组,bind也是挨个传值 call() 和 apply() 会执行这个函数bind并不会而是将绑定好的this重新返回一个新函数