常识

  • 两条总线线路:串行数据总线SDA,串行时钟总线SCL
  • 每个连接到总线的器件都有唯一的地址供其他设备寻址
  • 每个连接到总线的器件都可以作为发送器和接收器
  • 是多主机总线,如果两个或更多主机同时初始化,数据传输可以通过重提检测和仲裁防止数据被破坏
  • 串行的8bit双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s
  • 连接到相同总线的I2C数量只受到总线的最大电容400pF的限制
  • I2C通信的数据以8bit为单位,每次发送完一个数据都要等待接收方的ACK信号

术语

  • 发送器:发送数据到总线的器件
  • 接收器:从总线接收数据的器件
  • 主机:发送起始/终止信号和时钟信号的器件
  • 从机:被主机寻址的器件
  • 仲裁 :是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使传输不被破坏的过程
  • 同步:两个或多个器件同步时钟信号的过程
  • SDA:数据线通信期间,SDA的电平改变只能发生在SCL在低电平期间
  • SCL:时钟线

起始与终止

通信的起始条件和终止条件都必须在SCL是高电平的时候被触发,SCL为高SDA由高->低为起始条件(S,start),SCL为高SDA由低->高为终止条件(P,stop)

正是因为正常通信的过程中如果SCL是高电平,SDA不允许改变,所以这两种情况可以用来标识S和P

总线在start后被认为处于忙碌状态,在stop的某段时间后总线被认为再次处于空闲状态

除了S作为起始信号,I2C还有重启信号Sr,如果在处于忙碌状态的总线中发送Sr(restart)而不产生P(stop),总线会一直处于忙碌的状态。Sr的作用是保证一个主机不间断的占用总线,它既是前一次数据传输的结束,又是后一次数据传输的开始,可以用来保证一台主机不间断的掌控总线。eg:主机发送了读请求之后,从机进行了应答,接下来还有随之而来的写请求,为了主机的读写操作能连贯的执行完毕再释放总线,此时就需要Sr来保证该主机不间断掌控总线,因为一旦在读之后发出停止信号,总线就有可能被其他主机掌管,该主机的写操作就会被延迟。

寻址



主机首先检测总线是否处于空闲状态,如果空闲就首先发送一个从机地址(MSB)+控制位(LSB)。7位寻址的话就是1111 XXX,高4位属于固定地址不可改变,如果器件没有CPU,则由厂家固化,有CPU的话就由器件的初始化代码指定(注意不能和总线上其他器件的地址重叠),低3位为引脚设定地址,可以由外部引脚来设定(并非所有器件都可以设定)。控制位即0表示主机会写W信息到从机,1表示从从机中读R数据。和其他数据一样,主机发完这个byte继续产生一个时钟周期,并释放SDA为高阻态(I2C的SDA和SCL都需要上拉电阻保持高阻态),等待从机的ACK信号。

应答

一个主机设备发送了希望读写的设备地址到总线之后,总线上的所有器件都会收到一个主机发送的地址并与自身比对,如果与自身的地址相同,表示自己就是主机打算通信的对象。接下来从机可以有三种行为:ACK,NACK,拉低SCL。

ACK就是从机在第9个时钟周期将SDA电平拉低,表示从机成功的接收了刚才的8bit数据,主机收到了从机的ACK信号就可以继续发数据,或者准备好接收从机的数据。

NACK就是从机在第9个时钟周期不响应,表示从机没有成功的接收到刚才的8bit,主机接收到这个信号就可以发送Sr或采取其他行为。如果最后一次通信中主机是接收方,主机就会回应一个NACK信号(不响应)通知从机表示通信结束,并发送P或Sr。



如果从机没有准备好应答,就可以将SCL钳位在低电平,这样就可以使主机进入等待状态,直到从机准备就绪接收接下来的数据再释放SCL,通信就可以继续了。

I2C基础知识的更多相关文章

  1. 使用寄存器点亮LED——前言基础知识

    在点亮LED之前,我们需要具备一些基础知识: GPIO—general purpose intput output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚 ...

  2. 转:PCIe基础知识

    PCIe基础知识   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zqixiao_09/article/details/51842542 PCIe ...

  3. 【STM32H7教程】第15章 STM32H7的GPIO基础知识(重要)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第15章       STM32H7的GPIO基础知识(重要) ...

  4. 012 PCIe总线的基础知识

    一.PCIe总线的基础知识 与PCI总线不同,PCIe总线使用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个设备互为是数据发送端和数据接收端.PCIe总线除了总线链路外,还具有多 ...

  5. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  6. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  7. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  8. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  9. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

随机推荐

  1. winform只允许一个应用程序运行 2014-12-08 09:51 31人阅读 评论(0) 收藏

    使用互斥体Mutex类型 导入命名空间 using System.Threading; //声明互斥体 Mutex mutex = new Mutex(false, "ThisShouldO ...

  2. shell调用函数返回值深入分析

    编写shell脚本过程中,我们经常会自定义一些函数,并根据函数的返回值不同来执行相应的流程,那么我们如何来获取函数的返回值呢? 首先shell中调用函数有两种方式: 第一种:value=`functi ...

  3. Android Lint Checks

    Android Lint Checks Here are the current list of checks that lint performs as of Android Studio 2.3 ...

  4. ASP.NET MVC HtmlHelper之Html.ActionLink

    前言 ActionLink用于生成超链接,方法用于指向Controller的Action. 扩展方法与参数说明 ActionLink扩展方法如下: public static MvcHtmlStrin ...

  5. IIS事件查看器_WebServer事件查看器_帮助查看IIS-Web服务器事件执行日志

    IIS服务器是我们常用的Web站点部署工具,而我们有时可能遇到IIS服务器的应用程序池莫名其妙的关闭了,或者是其他未知原因等等,我们这是可以通过微软提供的WebServer(Web服务事件查看器),来 ...

  6. .net源码分析 - ConcurrentDictionary<TKey, TValue>

    List源码分析 Dictionary源码分析 ConcurrentDictionary源码分析 继上篇Dictionary源码分析,上篇讲过的在这里不会再重复 ConcurrentDictionar ...

  7. 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu

    [源码下载] 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu 作者:webabcd 介绍背水一战 Windows 10 之 控件(弹 ...

  8. Git避免输入用户名和密码

    1. 在系统盘/用户/用户名目录下新建名为 _netrc 的文件: 2. 修改 _netrc 文件内容为“  machine git.mangning.comlogin xxxpassword xxx ...

  9. 各种JS模板引擎对比数据(高性能JavaScript模板引擎)

    最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 Ja ...

  10. Hadoop多节点集群安装配置

    目录: 1.集群部署介绍 1.1 Hadoop简介 1.2 环境说明 1.3 环境配置 1.4 所需软件 2.SSH无密码验证配置 2.1 SSH基本原理和用法 2.2 配置Master无密码登录所有 ...