I2C基础知识
常识
- 两条总线线路:串行数据总线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基础知识的更多相关文章
- 使用寄存器点亮LED——前言基础知识
在点亮LED之前,我们需要具备一些基础知识: GPIO—general purpose intput output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚 ...
- 转:PCIe基础知识
PCIe基础知识 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zqixiao_09/article/details/51842542 PCIe ...
- 【STM32H7教程】第15章 STM32H7的GPIO基础知识(重要)
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第15章 STM32H7的GPIO基础知识(重要) ...
- 012 PCIe总线的基础知识
一.PCIe总线的基础知识 与PCI总线不同,PCIe总线使用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个设备互为是数据发送端和数据接收端.PCIe总线除了总线链路外,还具有多 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- selenium自动化基础知识
什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
随机推荐
- 【集合框架】JDK1.8源码分析之IdentityHashMap(四)
一.前言 前面已经分析了HashMap与LinkedHashMap,现在我们来分析不太常用的IdentityHashMap,从它的名字上也可以看出来用于表示唯一的HashMap,仔细分析了其源码,发现 ...
- APP接口自动化测试JAVA+TestNG(二)之TestNG简介与基础实例
前言 继上篇环境篇后,本篇主要对TestNG进行介绍,给出最最基础的两个实例,通过本文后,学会并掌握TestNG测试用例的编写与运行,以及生成美化后的报告.下一篇为HTTP接口实战(国家气象局接口自动 ...
- [开源ORM] SqliteSugar 3.x .net Core版本成功上线
SqliteSqlSugar 3.X API 作为支持.NET CORE 为数不多的ORM之一,除了具有优越的性能外,还拥有强大的功能,不只是满足你的增,删,查和改.实质上拥有更多你想像不到的功能,当 ...
- 获取documents、tmp、app、Library的路径的方法
phone沙箱模型的有四个文件夹: documents,tmp,app,Library 1.Documents 您应该将所有的应用程序数据文件写入到这个目录下.这个目录用于存储用户数据或其它 ...
- C# Winform 拦截关闭按钮触发的事件
用户关闭软件时,软件一般会给“是否确认关闭”的提示. 通常,我们把它写在FormClosing 事件中,如果确定关闭,就关闭:否则把FormClosingEventArgs 的 Cancel 属性设置 ...
- C#学习笔记-封装
前言 说起来惭愧,学了大半年的C#,其实最开始就接触到了封装的部分,但是一直模模糊糊的弄不清楚,也觉得没什么影响就没怎么在意,现在才开始认真的看这部分内容,看懂了过后好多东西清晰了不少,才发现封装这个 ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(一)
(一)前言 本文主要介绍了实践部署AzurePack的Website Cloud的过程.在部署之前, 首先要对AzurePack有个基本的了解. Azure Pack是微软的私有云方案,具有弹性. ...
- Xamarin 免费了,你能做什么?
3月底,微软正式宣布:Xamarin免费了!那么,你能做什么? 抢先一步,用Xuni助力你的Xamarin开发! Xamarin是什么 Xamarin含Xamarin.Andoid,Xamarin.i ...
- 什么是Servlet?
HTML只能用来保存静态内容,而通常情况下,静态页面很难满足实际应用的需要,鉴于此,动态页面被引入.所谓动态页面,指的是能够根据不同时间,不同用户而显示不同内容的页面,例如常见的论坛.留言板.电子商务 ...
- adb查询log命令
http://blog.csdn.net/fulinwsuafcie/article/details/8028572