I2C协议学习笔记
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wzt_007/article/details/78622698
通信分为四大步骤,握手、数据交换、准备结束、正式结束
如以下场景:
两个陌生人是进行沟通,为了显得更有主次关系,选取老板和新员工进行沟通的场景,老板一般占有主动权,而且手中有新员工的基本信息,比如姓名,年龄,性别等。沟通开始:
老板:“XXX,欢迎你加入我们公司,为公司注入新的血液!”伸出握手姿势 —— 主握手
新员工:“承蒙厚爱,有幸加入我们公司,我觉得是一种光荣!”握手 —— 握手成功
老板:“想必已经读过员工手册了吧,说说你对前两条的理解。” —— 执行沟通
新员工:“第一条……,第二条……” —— 从应答
……
老板:“回答的很好,确实是我们迫切想招募的人,以后看你的精彩表现了!” —— 主要求沟通结束
新员工:“一定不负厚望,必努力工作!” —— 从做好结束准备
老板离开 —— 沟通结束
主从器件
在通信的时候,总线上必须且只能有要有一个为主器件,其他的都为从器件
在总线上表现为主控的器件叫做主发送器/接收器(MASTER TRANSMITTER/RECEIVER),主器件只执行发送,不执行接收的,命名为主发送器(MASTER TRANSMITTER)
在总线上表现为被控的器件叫做从发送器/接收器(SLAVE RECEIVE/RTRANSMITTER),有些从器件只执行接收,不执行发送的,命名为从接受器(SLAVE RECEIVER)
一条I2C总线最多能挂多少个器件?
串行数据都是以一个字节一个字节的方式来衡量的,前几位用来表示地址(上述对话中的员工名字),地址的最后一位为读写操作位(READ/WRITTE位,简写为R/W,逻辑1表示读,逻辑0表示写),以最开始的一个字节作为地址来算的话,那么除去字节的最后读写标志位,就剩 8 – 1 = 7bit了,所以理论上以1个字节为地址来算的话,就可以分配2的7次方128个地址,就可以挂上128个器件(极端情况,假设这128个器件都是从机的话,就还需要挂一个主器件,合计就是128 + 1 = 129个器件了)。要是想挂更多的器件,那么就须得将地址位扩展,比如将前两个字节作为地址,去掉最后的一位读写标志位
以上是理论的算法,在实际的器件中,都是以第一个字节作为地址的,而且大部分的器件的地址高四位已经被根据不同功能的芯片分配了不同的编码(例如,AD/DA转换芯片PCF8591的前四位为1001,E2PROM芯片AT24C02的前四位为1010,具体的芯片就得查查手册了,这里只说明原理),那么同一种功能芯片(地址前4位都相同)最多只有 8 – 4 – 1 = 3位用来分配地址了,也就是最多可以挂2的3次方8个同种功能芯片。用一个问题来深化理解一下。
握手与结束
I2C协议有规定,在SCL和SDA均为高电平的前提下,检测到SDA有下降沿信号,则建立I2C的通信开始;同样的,在SCL为高电平,SDA为低电平的前提下,检测到SDA有上升沿信号,则I2C通信正式结束。
由图中虚线框中引出的:总线闲的时候,两根信号线都是高电平的。不管是通信建立和通信结束阶段,SCL都是高电平,SDA的变化控制着通信的建立与结束;在SCL为高电平的情况下,SDA信号的转变就对通信起着强制性作用,要么通信建立,要么通信正式结束,有且仅有这两种情况!也就是说,在数据交换的过程中,要对SCL这根信号线尤为注意,在数据变化的时候,一定要保证SCL是为低电平!让数据的变化在SCL的“安全”状态下进行,所以需要牢记一点,数据变化,时钟线低电平先行,如下图所示。
通信
在每次写数据的时候,每写一个字节数据(不论是必要的从器件地址数据、从器件控制数据,还是需要写到从机里的数据),从器件都有一个ACK(从器件的应答实现是将SDA线拉成低电平,所以在写完第8位数据以后,切记要把SCL的电平拉成低电平,等一小段时间以后,在将数据线拉高去读SDA的数据,原因在握手和结束讲了。读数据时,主器件每接收到从器件的一个字节数据,也都要回复一个ACK,主器件ACK有两种,一种表示收到数据,且准备接收下一次数据(0,ACK),一种是收到数据,但不准备接收下一次数据(1,NO ACK)
我总结的读写流程,如果有问题,欢迎大家指出
读:
start>>(主:地址)>>(从:first_Data)>>(主:ACK)>>(从:second_Data)>>(主:ACK)>>(从:third_Data)>>(主:NO ACK)>>stop
写
start>>(主:地址)>>(从:ACK)>>(主:first_Data)>>(从:ACK)>>(主:second_Data)>>(从:ACK)>>(主:third_Data)>>(从:ACK)>>stop
————————————————
版权声明:本文为CSDN博主「wzt_007」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wzt_007/article/details/78622698
I2C协议学习笔记的更多相关文章
- HTTP协议学习笔记(四)
HTTP协议学习笔记(四) 与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的中转服务器提升传输效率. 1.用单台虚拟主机实现多个域名 ...
- HTTP协议学习笔记(三)
HTTP协议学习笔记(三) 1.状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务端向服务端发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误 ...
- HTTP协议学习笔记(二)
HTTP协议学习笔记(二) 1.HTTP报文 HTTP报文:用于HTTP协议交互的信息.请求报文:请求端(客户端)的HTTP报文叫做请求报文.响应报文:响应端(服务端)的HTTP报文叫做响应报文. H ...
- HTTP协议学习笔记(一)
HTTP协议学习笔记(一) 1.HTTP协议用于客户端和服务端之间的通信 客户端:请求访问文本或图像等资源的一端服务端:提供资源响应的一端 在两台计算机之间使用HTTP协议通信时,在一条通信线路上必定 ...
- I2C总线协议学习笔记 (转载)
1.I2C协议 2条双向串行线,一条数据线SDA,一条时钟线SCL. SDA传输数据是大端传输,每次传输8bit,即一字节. 支持多主控(multimastering),任何时间点只能有一 ...
- TCP/IP协议学习笔记
计算机网络基础知识复习汇总:计算机网络基础知识复习 HTTP协议的解析:剖析 HTTP 协议 一个系列的解析文章: TCP/IP详解学习笔记(1)-- 概述 TCP/IP详解学习笔记(2)-- 数据链 ...
- 【转】树莓派学习笔记——I2C Tools 学习笔记
原文网址:http://blog.csdn.net/xukai871105/article/details/15029843 1.安装 I2C驱动载入和速率修改请查看博文[树莓派学习笔记——I ...
- IIC协议学习笔记
"移植"的重要性:并非所有的电路都得自己设计,到了一定阶段,"移植"也是一种学习能力.--CrazyBingo 转眼间期末又到了,最近开始了所谓的期末总预习,比 ...
- RSA算法、SSL协议学习笔记
最近学习计算机网络,涉及到SSL协议,我想起了去年密码学课程讲过的非对称加密RSA算法,结合阮老师的博客,写写学习笔记,这里再回忆一下. RSA算法 RSA算法是一种非对称密码算法,所谓非对称,就是指 ...
随机推荐
- vue路由进阶
一..全局路由前置守卫 1.首先看一下文档结构 Dashboard和Login是一级页面 home about mine是在Dashboard下的二级页面 2.router.js代码如下 impor ...
- WPF之行为
Behavior的运用扩展了”交互“功能,以下记录示例: 在的项目中添加两个引用:Microsoft.Expression.Interactions.dllSystem.Windows.Interac ...
- Java每日一面(Part1:计算机网络)[19/11/13]
作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1. HTTP相关[1] 1.1 HTTP简介 HTTP协议,即超文本传输协议,属于应用层的协议,他是基于请求和响应模式的无状态的 应用层协议. ...
- Filter List Views 筛选器列表视图
In this lesson, you will learn how to filter a List View. Three techniques, based on different scena ...
- 剑指offer笔记面试题8----二叉树的下一个节点
题目:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左.右子节点的指针,还有一个指向父节点的指针. 测试用例: 普通二叉树(完全二叉树,不完全二叉树). ...
- Mac Pro 2017款自带php与用brew重装PHP后的地址
mac pro 2017款自带PHP与apache位置: [apache]apache配置文件 :/etc/apache2/httpd.confDocumentRoot : /Library/WebS ...
- VS2017创建的单元测试不支持顺序测试
问题:使用IDE创建的单元测试项目,标准引用是,导致不能添加顺序测试,复制其它项目的顺序测试文件进行编辑时,也会提示基于MSTest V2的测试不能用于顺序测试 解决办法: 移除自带的NU ...
- 腾讯,华为,阿里…7家Java后端面试经验大公开!
感觉面试还是主要围绕简历来问的,所以不熟悉的东西最好不要随便写上去.项目和基础都很重要,整体的基础知识的框架可以参考GitHub 上 CYC2018的博客,分类很全,但是深入的学习还是要自己去看书,写 ...
- GNN 相关资料记录;GCN 与 graph embedding 相关调研
最近做了一些和gnn相关的工作,经常听到GCN 和 embedding 相关技术,感觉很是困惑,所以写下此博客,对相关知识进行索引和记录: 参考链接: https://www.toutiao.com/ ...
- 电池中的NTC功能是什么?【转】
电池的NTC功能是什么 因为可充电电池在不断的循环充电和放电过程中可能会导致电池温度的过高,导致电池原始性能下降.为了保持电池性能,密切监测电池温度非常重要,NTC在充电电池组内部的合适应用中可以起到 ...