IIC串行通信总线介绍
学习记录:
近日学习了IIC集成电路总线,记录一下
学习清单:
- IIC的介绍
- IIC的起始信号、终止信号
- IIC的数据的发送
- IIC的应答信号
- 主机发送数据流程、主机接收数据流程
学习内容:
1.IIC的介绍
IIC的全称是Inter-Integrated Circuit,其实是IICBus的简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。I²C的正确读法位“I平方C”(I-squared-C),而“I二C”(“I-two-C”)则是另一种错误但被广泛使用的读法。
2.IIC起始信号、终止信号
IIC是CPU与芯片之间进行通信使用最多的协议,除去电源之外,需要使用的两根线是:SCLK或者SCL(时钟线)和SDA(数据线)。
- 数据线用来传输数据
- 时钟信号线用于产生时钟频率,控制时序,实现协议过程
由于它有一根时钟线,所以IIC是同步通信,由于它只有一根数据线,且IIC的主从结构中,主设备和从设备都是会发送信息给对方的,所以IIC协议是半双工的(半双工:只有一根数据线,主设备和从设备分时使用这根数据线进行信息传送)。
在开始通信之前和结束通信我们都需要一个标志信号来标识,以便让计算机知道什么时候是在传输数据。IIC总线规定当SCLK时钟信号一直处于高电平状态时,SDA线由高电平跳转到低电平这个动作,表示起始信号。此时就算SDA数据线的电平跳变完,SCLK依然是高电平。当连接在IIC总线上的外设模块检测到这个信号时,就知道数据要开始传输了,对于结束信号同理;规定,当SCLK时钟信号一直处于高电平状态时,SDA线由低电平跳转到高电平这个动作,表示结束信号。
如图中框起来的部分,分别就是起始信号和结束信号,一般简称为S和P。IIC在空闲的时候,SDA、SDLK都处于高电平状态(由上拉电阻拉起高电平),我们也可以看见在起始信号之前和结束信号之后都是高电平,即都是空闲状态。
3.IIC数据的传送
规定,在数据的传输过程中,SCLK为高电平时,外设模块开始采集SDA数据线上的数据,此时要求SDA 数据线上的电平线上的电平状态必须稳定(这样才能区分高低电平传输的数据),并且只有SCLK为低电平的时候才允许SDA数据线进行高低电平的跳转(这是因为如果SCLK为高电平,然后SDA进行高低电位的跳转会与起始信号和结束信号发生冲突)。
现在比如要传送一个位的数据,上文有提到,在发送完起始信号之后,SCLK时钟信号仍然是高电平,SDA保持低电平,这时还没有开始读取数据,从发了起始信号到真正数据传输之间,会有一段缓冲时间,这段时间是用来准备数据的,先是将SCLK时钟信号拉低一段时间,在这期间将SDA数据线拉高一段时间(即传输了数据1),然后再将SCLK信号拉高,此时这个时钟信号的高电平被外设检测到的话,外设就知道要读取数据了。可结合上图进行理解。
允许数据进行跳转的部分,如下图的中间部分,即SCLK时钟线是低电平的时候。
4.IIC应答信号
主设备往IIC总线上传输器件地址,所有从机接收到之后与自己的地址相比较,若相同,则阿初一个应答ACK(Acknowledge)信号,主设备收到这个信号表示通信连接成功,包括在连接成功之后,数据接收方(主设备或从设备)收到传输的一字节数据后,需要给出响应,即在第九个时钟的时候,发送端释放SDA线控制权,将SDA电平拉高,由接收方控制。
收到的信息分:
- ACK(Acknowledge):若希望继续,则给出“应答信号”,即SDA为低电平
- NACK(Not Acknowledge):若不希望继续,则给出“非应答信号”,即SDA为高电平
比如现在是主机向从机发送信息,在主机传输完一个字节之后,应该要释放总线(协议规定,当SDA和CSLK同时为高时,表示空闲状态),因为这里要让出总线,使从机能发送一个应答信号,此时SDA数据线连接的IO口从输出模式转换成输入模式,这样才能拿到SDA数据线上的应答信号,这样一个字节的数据就从主机到外设传输完毕了。
5.IIC双向通信
主设备通过地址来确定与哪个器件进行通信,IIC总线上每个从设备都有唯一的一个7bit地址物理识别(因为另外还有一位是读写位),这个地址固化在芯片内部,可以在芯片的datasheet上找到。由于IIC地址全零为广播地址,所以IIC总线理论上最多能有2^7-1 = 127个从设备,一般不会带这么多从设备,负载会太大。
6.主机发送数据流程、主机接收数据流程
主机发送数据流程
- 主机在检测到总线为空闲时,发送一个启动信号“S”,开始一次通信
- 主机接着发送一个从设备的地址,它由7bit物理地址和1bit读写控制位R/W组成(R/W此时为0)0表示写
- 相对应的从机收到命令字节后向主机反馈应答信号ACK
- 主机收到从机的应答信号之后,开始发送第一个字节的数据
- 从机收到该字节的数据之后就反馈一个应答信号
- 主机收到应答信号之后再发送下一个字节的数据
- 主机发完最后一个字节并收到ACK后,向从机发送一个停止信号P结束本次通信并释放总线
- 从机收到P(结束信号)信号之后也退出与主机之间的通信
主机接收数据的流程
- 主机发送启动信号后,接着发送地址字节(其中 R/W=1)1表示读
- 对应的从机接收到地址字节后,返回一个应答信号并向主机发送数据
- 主机收到数据后向从机反馈一个应答信号ACK
- 从机收到应答信号之后,再向主机发送下一个数据
- 当主机完成数据接收之后,向从机发送一个NAK,从机收到非应答信号之后便停止发送
- 主机发送非应答消息之后,再发送一个停止信号,释放总线结束通信
资料:
参考文章:参考的好文章1
IIC串行通信总线介绍相关推荐
- UART、RS232、RS485、IIC、SPI、CAN、CANFD、LIN、flexray、以太网等总线介绍
目录 A.基础概念 A.1 字节 A.2 波特率 A.3 QoS A.4 AVB A.5 TSN A.6 DDS A.7 SOME/IP A.8 SOME/IP与DDS的差异点 A.9 以太网帧 A. ...
- 【乌拉喵.教程】IIC总线介绍及FPGA编程
最近将多年来收集到的教学视频.国内外图书.源码等整理整合拿出来,涉及arm.Linux.python.信号完整性.FPFA.DSP.算法.stm32.单片机.制图.电子模块.kali.出版社图书等.资 ...
- 再议IIC协议与设计【3】 --SCCB总线介绍
SCCB (Serial Camera Control Bus) 是由OmniVision公司所定义的串行相机控制总线.用于控制OmniVision公司生产的Camera Sensor.本文通过对SC ...
- 细说汽车电子通信总线之常见汽车电子串行通信总线(CAN、LIN、DSI、ISO-9141、SWCAN、J 1850)对比
内容提要 引言 1. 常见汽车电子串行通信总线类型概述 1.1 不同总线的总线信号对比 1.2 不同总线类型的差异 1.3 不同总线通信速率对比 2. 总线的物理层(Physical Layer) 2 ...
- (92)低速接口UART、IIC、SPI介绍,面试必问(十六)(第19天)
(92)低速接口UART.IIC.SPI介绍,面试必问(十六)(第19天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)低速接口UART.IIC.SPI介绍,面 ...
- (3)zynq FPGA AXI4_Stream总线介绍
1.1 zynq FPGA AXI4_Stream总线介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)zynq FPGA AXI4_Stream总线介绍: 5)结束 ...
- (2)zynq FPGA AXI_Lite总线介绍
1.1 zynq FPGA AXI_Lite总线介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)zynq FPGA AXI_Lite总线介绍: 5)结束语. 1.1 ...
- FlexRay汽车通信总线介绍及测试环境
FlexRay汽车通信总线介绍及测试环境 原文链接:http://www.ulantec.cn/a/xinwen/xingyezixun/8.html 综述 FlexRay通信总线是由多个汽车制造商和 ...
- 36_2 On Chip Bus —— AXI总线介绍
目录 1.AXI总线介绍(读2写3) 1.1流量控制 1.2 AXI signals 信号线 1.3重点信号线的介绍 1.4原子操作--让读改写一套操作 永远是一个master对一个slave 1.5 ...
最新文章
- (二)spring cloud微服务分布式云架构 - 整合企业架构的技术点
- 你的 IDEA 酷不酷?
- 写给新手程序员的一封信
- Python 有序字典(OrderedDict)与 普通字典(dict)
- java计算两个日期相差月数
- 算法61---两个字符串的最小ASCII删除和【动态规划】
- php 重定向数据不丢失,PHP重定向如何实现数据不丢失?
- Python3求最后一个单词长度
- 小程序开发 宽度100%_这是您作为开发人员可以实现100%年度目标的方式
- python关键字以什么开头_查找关键字以相同前缀开头的字典值的更有效方法
- C++ VS2012 内存泄露检测
- C#调用windows API实现 smallpdf客户端程序进行批量压缩
- 抖音巨量百应怎么发福袋?四川鹰迪
- 对应阻尼下的开环增益matlab,自动控制原理实验指导书MATLAB版解析.doc
- canvas文字粒子动画js特效
- 新点软件怎么导入清单_新点软件怎么导入excel清单表格 表格有什么要求???...
- python制作好看的界面_python漂亮界面
- 基于GUI混沌系统图像加密解密
- 竟可打通了Python和Excel,还能自动生成代码,这个插件绝了
- 用电脑键盘打出常用特殊符号