IIC总线原理概述

IIC的基本特性

IIC是一种串行,半双工的总线,主要用于“近距离,低速”芯片之间的数据有线传输。IIC一共有两根总线:SCL时钟总线,SDA数据收发总线。两根总线的作用分别为:SCL来负责两个通信芯片之间的时钟同步,SDA用于芯片之间的数据收发工作。IIC结构简单因此抗干扰能力较弱,不适合进行远距离的传输,但是结构简单的同时对应着协议复杂程度提高。

IIC通信原理

下图为由“主机”与“从机”连接而成的通信网络:

何为从机?何为主机?

其实主机是动作的发出者,从机是命令的接收者,在这里也就是“主机对应着单片机A与单片机B,这两个单片机都可以作为主机使用,因此IIC是“多主机,多从机”总线,而从机对应着这里的SRAM/EEPROM和A/D\D/A设备,这些设备听从于单片机A或B发出的命令,然后进行数据的发送/接收”。

就一根SDA数据收发线,我们该如何进行通信?

确实,就一根SDA数据收发线,我们无法同时进行任意一个主机与任意一个从机之间的数据传输,但是我们直到IIC总线上的设备无论是从机设备还是主机设备都遵从“IIC总线协议”!

我们可以通过IIC总线协议实现“在任意一个时刻,我们的总线上只有一个主机和一个从机,而且主机与从机两者之间的传输属性(传输方向,即谁是数据的接收器谁又是数据的发送器)已经确定”。

IIC总线通信的大致流程

① 主机发送起始信号启用总线,此时该主机已经占用总线,因为所有主机与所有从机都连接在同一根SCL时钟线与同一根SDA数据线,因此除了该主机之外的其他主机全部“shut up”;

② 主机发送一个字节的数据指明“从机的地址”与“数据传输的方向”,大家不要认为数据的传输方向仅是“从机->主机”,就像我们的电脑PC端既可以接收数据也可以发送数据,因此主机/从机既可以当作数据的发送端也可以作为数据的接收端,一个字节的数据的信息分布:

Bit状态

数据传输方向

1

从机->主机

0

主机->从机

③ 被寻址到的从机回应主机一个应答信号(ACK),此后数据传输开始了;

④ 发送器发送一个字节的数据(切记:我们的IIC总线只能以整字节发送信息);

⑤ 接收器节后一个字节的数据,并且接收器回应发送器一个应答信号(ACK);

⑥ 重复④,⑤步骤;

⑦ 通信完成后,主机发送停止信号并且释放总线。

IIC中四种关键的信号解析

① 主机的起始信号

② 主机初始发送的用于寻址从机与设定数据传输方向的第一个字节;

③ 被寻址到的从机向主机发送的应答信号;

我们的IIC总线每一帧数据(每一次SDA总线传输的数据量)为9Bits,包括“8位数据位+1位应答位”,IIC传输一帧数据的逻辑波形:

④ 通信完成时的停止信号

停止的条件:

① 主机主动发送停止信号;

② 由于从机接受了一个字节数据后,不应答主机,此时“停止传输”。

信号类型以及信号状态总结

信号类型

SDA数据总线状态

SCL时钟总线状态

IIC总线的初始状态

高电平

高电平

主机的起始信号

下降沿

高电平

主机发送的起始字节

高电平/低电平

高电平

从机的初始应答信号

高电平(ACK)/低电平(NACK)

高电平

通信完成的停止信号

上升沿

高电平

同步信号的作用

我们如何区分下图是几个逻辑电平呢?是“两个1和两个0”还是“一个1一个0”呢?

我们是通过SCL时钟总线,同步发送端与接受端的数据收发动作,有了SCL的同步时钟,我们才可以保证,发送端每发送一个位的数据,接收端可以接收一位的数据。

Usart如何达到以上效果的呢?

串口通信我们采用的是“波特率”,也就是每秒传输多少位数据,我们知道以时间间隔为数据收发单位显然会有误差,因此为了不使误差累积,我们的串口通信每次只发送一个字节,但是我们的IIC总线由于有同步信号总线SCL,我们理论上可以无限次的发送数据并且没有误差。

典型的IIC时序

标识

含义

~A

非应答信号(NACK)

A

应答信号(ACK)

阴影区域

主机->从机发送的数据

非阴影区域

从机->主机发送的数据

主机->从机

还记得我们前面提及的“停止的条件”是“当从机不应答主机时(从机不想要在接受数据了)”和“主机发送停止信号时(主机不想再给从机发送数据了)”,这两种情况均会导致数据传输停止,主机释放总线。

从机->主机

还记得我们前面提及的“停止的条件”是“当从机不应答主机时(从机不想要在接受数据了)”和“主机发送停止信号时(主机不想再给从机发送数据了)”,这两种情况均会导致数据传输停止,主机释放总线。

主机->从机&从机->主机

我们知道一旦主机将包含从机字节寻址和数据传递方向的第一个字节的信号发送至SDA数据收发总线上时,在这次数据发送结束之前,我们的数据传输方向已经固定了,难道我们不可以在发送数据的过程中改变数据的传输方向吗?

其实在数据传输过程中,是不可以改变数据传输方向的,但是我们可以在传输完整数个帧后,先不要释放总线,此时再让主机发送一次包含“从机地址”和“数据传输方向”的一个字节数据,我们这样操作就可以更改接下来的数据传输方向了。

我们注意:主机发送的字节代替了停止信号,就相当于这样就可以保证“你再打两次电话的时候,电话不因挂断而占线打不通,而仅仅是换了电话另一端的联系人而已”。

IIC总线原理详细解析相关推荐

  1. 14_Elasticsearch 内部原理详细解析(上篇)

    本文章收录于[Elasticsearch 系列],将详细的讲解 Elasticsearch 整个大体系,包括但不限于ELK讲解.ES调优.海量数据处理等 一.elasticsearch的写一致性原理 ...

  2. springMVC——SpringMVC原理详细解析

    SpringMVC 谈到这个问题,我们不得不提提之前 Model1 和 Model2 这两个没有 Spring MVC 的时代. ----Model1 时代 : 很多学 Java 后端比较晚的朋友可能 ...

  3. 大剑无锋----SpringMVC原理详细解析

    SpringMVC 谈到这个问题,我们不得不提提之前 Model1 和 Model2 这两个没有 Spring MVC 的时代. ----Model1 时代 : 很多学 Java 后端比较晚的朋友可能 ...

  4. 15_Elasticsearch 内部原理详细解析(下篇)

    本文章收录于[Elasticsearch 系列],将详细的讲解 Elasticsearch 整个大体系,包括但不限于ELK讲解.ES调优.海量数据处理等 目录 一.什么是mapping 二.精确匹配与 ...

  5. Spark底层原理详细解析(深度好文,建议收藏)

    Spark简介 Apache Spark是用于大规模数据处理的统一分析引擎,基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量硬件之上, ...

  6. Spark底层原理详细解析

    Spark简介 Apache Spark是用于大规模数据处理的统一分析引擎,基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量硬件之上, ...

  7. Kafka 设计架构原理详细解析(超详细图解)

    什么是Kafka? Apache Kafka是一个开放源代码的分布式事件流平台,成千上万的公司使用它来实现高性 能数据管道,流分析,数据集成和关键任务等相关的应用程序. Kafka的应用场景 构造实时 ...

  8. 服务器是怎么工作的?(二)——arp工作原理详细解析

    一.什么是ARP协议(Address Resolution Protocol) ARP协议是地址解析协议(Address Resolution Protocol)是通过解析IP地址得到MAC地址的,是 ...

  9. 机械硬盘的工作原理详细解析,以及机械硬盘和固态硬盘的优缺点对比

    硬盘有机械硬盘(HDD)和固态硬盘(SSD)之分.机械硬盘即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成. 磁头可沿盘片的半径方向运动,加上 ...

  10. 《深度学习入门:基于Python的理论与实现》第四章代码原理详细解析

    这一章的代码解读的难点是: 涉及到两个函数的求导问题. ①sigmoid函数的求导: ∂yj∂xj=yj(1−yj)\frac{\partial y_j}{\partial x_j}=y_j(1-y_ ...

最新文章

  1. CMD 一条命令 执行 多条命令
  2. beego api mysql_beego搭建api服务
  3. Terminal(终端) 在 OS X下如何快速调用
  4. 国内创业活动平台,创业赛事报名网站
  5. 数据结构 - 栈(数组模拟栈操作)
  6. Exchaneg 2013 集成OWAS
  7. python批量读取图片并复制入word_提取出 Word 文档里的图片 并利用 python 批量转换格式...
  8. java 选择图片 显示不出来的_JAVA 窗体选择图片显示在窗体中
  9. 一种实现 Java调用C++的DLL的方法
  10. java直播在线人数怎么做_添加抖音直播间在线人数怎么做
  11. win7一直弹计算机,Win7电脑总是自动弹出拨号连接怎么办 Win7总是弹出拨号连接对话框的解决办法(两种)...
  12. 油菜花王国(并查集)
  13. Android如何获取Wifi名称(SSID)
  14. 武林外传 mysql 注册_武林外传588云服务器架设+el、npc、任务修改工具,云机教程...
  15. SEO优化|如何让网站关键词排名快速提高
  16. 阿里云服务器证书登录如何配置
  17. 利用photoshop cs5新增功能之“智能填充
  18. 经典博弈论之3人分100枚金币
  19. WIN10安装vc60无响应
  20. SpringBoot | SpringBoot整合数据库

热门文章

  1. 圆内接等边三角形的画法_几何画板绘制圆的内接正三角形的操作教程
  2. 机器学习与数据挖掘的学习路线图
  3. 分支定界法求解旅行商问题
  4. APP测试---adb命令使用(monkey、input、11大事件等),附按键表(keycode)
  5. 三极管放大电路基本原理
  6. Linux驱动曝光AMD Vega20核心
  7. 生活大爆炸第三季 那些精妙的台词翻译
  8. cenetos 查看字体库_Centos7 安装字体库中文字体
  9. steam移动所有文件至新库文件夹失败_VBA进阶 | 文件操作17:File对象与Files集合详解...
  10. FSEC大学生电动方程式赛车电气系统设计