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 数据库 ...
随机推荐
- C# String.Format格式化json字符串中包含"{" "}"报错问题
json.Append(String.Format("{\"total\":{0},\"row\":{1}}", lineCount, st ...
- 现代Web应用开发者必备的六大技能
过去,应用开发需要注重大量的专业知识,程序员只需关注单一的语言(比如COBOL.RPG.C++等),并利用该语言创建应用.而如今,时代在变迁.Web不再是单单关注独立的一面.相反,一个现代化的Web应 ...
- react入门(2)
接着上一次的讲,如果没有看过上一篇文章的小伙伴可以先看一下http://www.cnblogs.com/sakurayeah/p/5807821.html React事件 可以先看一下官网讲解的内容h ...
- 高效的SQLSERVER分页查询的几种示例分析
Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...
- WinServer远程部署系统打包批处理文件
前言 工作中一直在使用一个部署系统WinServer远程部署系统(RDSystem),部署.回滚都很方便.我们一直都是增量发布或者只更新需要更新的文件,每次发布完之后要整理出一个增量更新包,压缩成zi ...
- composer 代码库管理
composer 代码库管理 参考资料:https://packagist.org/about#naming-your-package简介composer 命令的请求源是 packagist.org* ...
- ABP 初探 之 权限设计
大.小项目都要设计权限,都想设计一个通用的权限,把权限做的比较复杂,现在了解了ABP的设计思路,觉得设计很简单,但实现方法与思路耐人寻味. 本篇只介绍AbpPermissions的数据库设计,其它表结 ...
- ASP.NET MVC搭建项目后台UI框架—9、服务器端排序
ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET M ...
- ASP.NET MVC开发中常见异常及解决方案
ASP.NET MVC4入门到精通系列目录汇总 NHibernate:no persister for 异常 1.配置文件后缀名写错 mapping file 必须是.hbm.xml结尾 2.Web. ...
- 编译android 4.4.2
1.获取Android源码 (1)下载repo 在用户目录下创建一个bin文件夹来存放repo,并把该路径设置到环境变量中 mkdir ~/bin PATH=~/bin:$PATH 下载repo脚本 ...