首页 > 其他分享 >I2C总线简介-转载

I2C总线简介-转载

时间:2022-11-15 13:22:42浏览次数:78  
标签:简介 应答 总线 发送 从机 信号 主机 I2C

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
From: https://www.cnblogs.com/zp11/p/16892104.html

相关文章

  • 【sed 用户手册翻译】: 1 简介
    这是对sed用户手册的翻译。有翻译不正确的地方请指出。第一章简介sed是一个流编辑器,流编辑器是被用来对输入流(文件或管道输入)进行基本的文本转换。在一定程度上跟基......
  • 短信注册登录前后端结合与redis简介
    短信注册登录前后端结合与redis简介短信注册接口views.py@action(methods=['POST'],detail=False)defregister(self,request):ser=UserRegister......
  • JavaScript简介
    什么是JavaScriptJavaScript创建的目的:创建的最初目的是使网页更加生动。脚本这种编程语言写出来的程序被称为脚本,可以直接写在网页的HTML中,网页加载时自动执行。脚本......
  • 博客简介
    本博客创立之初是为了记录在学习.NETMAUI和ASP.NET中遇到的各种问题,可以定性为学习笔记一类的东西。由于本人目前尚属没有任何编程经验的新手程序员,因此目前可能发布......
  • onnxruntime源码解析之C接口简介
    一、C接口1.简介其他语言的接口都是在C接口的基础上,进一步的封装。C的接口头文件为:onnxruntime_c_api.h头文件内包含了详细的注释和说明。总体上,除了一些数据结构的......
  • 【Azure 服务总线】Azure.Messaging.ServiceBus 多次发送消息报超时错误,是否可以配置
    问题描述使用AzureServiceBus,提供应用程序之间松耦合的消息交换,但是有时候发送消息多次出现超时错误。Aconnectionattemptfailedbecausetheconnectedpartydid......
  • Linux i2ctool 工具的使用方法
    1、工具安装sudoapt-getinstalli2c-tools2、使用2.1 探测总线和设备 参数说明:-y:自动选择yes-r:快速读指令-q:快速写指令-......
  • IIC协议简介
    IIC总线介绍IIC也称I2C,是一个多主从的串行总线,由飞利浦公司发明的通讯总线,属于半双工同步传输类总线,仅由两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA,IIC总......
  • SCI简介和写作顺序
    一、SCI论文组成部分简介一篇完整的sci论文主要包括以下几个主要的组成部分,从前往后依次分别是Title就是说这个文章的标题其次是Abstract也就是这个文章的摘要。接......
  • Java多线程简介
    一、线程简介Process进程与Thread线程程序是指令和数据的有序集合,本身没有任何运行的含义,为静态概念。进程是执行程序的一次执行过程,为动态概念。是系统资源分配的单位......