学习记录:

近日学习了IIC集成电路总线,记录一下


学习清单:

  1. IIC的介绍
  2. IIC的起始信号、终止信号
  3. IIC的数据的发送
  4. IIC的应答信号
  5. 主机发送数据流程、主机接收数据流程

学习内容:

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.主机发送数据流程、主机接收数据流程

主机发送数据流程

  1. 主机在检测到总线为空闲时,发送一个启动信号“S”,开始一次通信
  2. 主机接着发送一个从设备的地址,它由7bit物理地址和1bit读写控制位R/W组成(R/W此时为0)0表示写
  3. 相对应的从机收到命令字节后向主机反馈应答信号ACK
  4. 主机收到从机的应答信号之后,开始发送第一个字节的数据
  5. 从机收到该字节的数据之后就反馈一个应答信号
  6. 主机收到应答信号之后再发送下一个字节的数据
  7. 主机发完最后一个字节并收到ACK后,向从机发送一个停止信号P结束本次通信并释放总线
  8. 从机收到P(结束信号)信号之后也退出与主机之间的通信

主机接收数据的流程

  1. 主机发送启动信号后,接着发送地址字节(其中 R/W=1)1表示读
  2. 对应的从机接收到地址字节后,返回一个应答信号并向主机发送数据
  3. 主机收到数据后向从机反馈一个应答信号ACK
  4. 从机收到应答信号之后,再向主机发送下一个数据
  5. 当主机完成数据接收之后,向从机发送一个NAK,从机收到非应答信号之后便停止发送
  6. 主机发送非应答消息之后,再发送一个停止信号,释放总线结束通信

资料:

参考文章:参考的好文章1

IIC串行通信总线介绍相关推荐

  1. 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. ...

  2. 【乌拉喵.教程】IIC总线介绍及FPGA编程

    最近将多年来收集到的教学视频.国内外图书.源码等整理整合拿出来,涉及arm.Linux.python.信号完整性.FPFA.DSP.算法.stm32.单片机.制图.电子模块.kali.出版社图书等.资 ...

  3. 再议IIC协议与设计【3】 --SCCB总线介绍

    SCCB (Serial Camera Control Bus) 是由OmniVision公司所定义的串行相机控制总线.用于控制OmniVision公司生产的Camera Sensor.本文通过对SC ...

  4. 细说汽车电子通信总线之常见汽车电子串行通信总线(CAN、LIN、DSI、ISO-9141、SWCAN、J 1850)对比

    内容提要 引言 1. 常见汽车电子串行通信总线类型概述 1.1 不同总线的总线信号对比 1.2 不同总线类型的差异 1.3 不同总线通信速率对比 2. 总线的物理层(Physical Layer) 2 ...

  5. (92)低速接口UART、IIC、SPI介绍,面试必问(十六)(第19天)

    (92)低速接口UART.IIC.SPI介绍,面试必问(十六)(第19天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)低速接口UART.IIC.SPI介绍,面 ...

  6. (3)zynq FPGA AXI4_Stream总线介绍

    1.1 zynq FPGA AXI4_Stream总线介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)zynq FPGA AXI4_Stream总线介绍: 5)结束 ...

  7. (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 ...

  8. FlexRay汽车通信总线介绍及测试环境

    FlexRay汽车通信总线介绍及测试环境 原文链接:http://www.ulantec.cn/a/xinwen/xingyezixun/8.html 综述 FlexRay通信总线是由多个汽车制造商和 ...

  9. 36_2 On Chip Bus —— AXI总线介绍

    目录 1.AXI总线介绍(读2写3) 1.1流量控制 1.2 AXI signals 信号线 1.3重点信号线的介绍 1.4原子操作--让读改写一套操作 永远是一个master对一个slave 1.5 ...

最新文章

  1. (二)spring cloud微服务分布式云架构 - 整合企业架构的技术点
  2. 你的 IDEA 酷不酷?
  3. 写给新手程序员的一封信
  4. Python 有序字典(OrderedDict)与 普通字典(dict)
  5. java计算两个日期相差月数
  6. 算法61---两个字符串的最小ASCII删除和【动态规划】
  7. php 重定向数据不丢失,PHP重定向如何实现数据不丢失?
  8. Python3求最后一个单词长度
  9. 小程序开发 宽度100%_这是您作为开发人员可以实现100%年度目标的方式
  10. python关键字以什么开头_查找关键字以相同前缀开头的字典值的更有效方法
  11. C++ VS2012 内存泄露检测
  12. C#调用windows API实现 smallpdf客户端程序进行批量压缩
  13. 抖音巨量百应怎么发福袋?四川鹰迪
  14. 对应阻尼下的开环增益matlab,自动控制原理实验指导书MATLAB版解析.doc
  15. canvas文字粒子动画js特效
  16. 新点软件怎么导入清单_新点软件怎么导入excel清单表格 表格有什么要求???...
  17. python制作好看的界面_python漂亮界面
  18. 基于GUI混沌系统图像加密解密
  19. 竟可打通了Python和Excel,还能自动生成代码,这个插件绝了
  20. 用电脑键盘打出常用特殊符号

热门文章

  1. 【Android】自定义控件-颜色选择器/取色器
  2. 前后端分离校园智能出行拼车系统
  3. 中年危机总在不经意间来到
  4. 微信小程序---实现手机号发送验证码登录
  5. Unity 粒子特效—FX Maker
  6. 平面几何相关算法整理
  7. Sci-Fi 科幻迷们,爱死机第二季来啦 | Mixlab 科幻实验
  8. 爬取近千张女神赫本的美照,做成网站并给其中的黑白照片上色,好玩!
  9. Scrapy部署蜘蛛爬虫项目
  10. 搜狗翻译加密原理分析