今天来学习下I2C通信~

I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式。如上图所以有很多的周边设备都是用I2C通信方式进行通信的。

I2C(Inter-Intergrated Circuit)通信使用Clock Line(SCL:Serial Clock)和Data Line(SDA:Serial Data)。数据通过时钟同步经过数据线进行传输。这里生成时钟信号并输出的设备便是Master, 时钟信号作为输入并接受数据的设备便是Slave。一般情况下Master便是MicroController,Slave便是周边的设备,比如RTC, EEPROM, TOUCH等等。

上面我们提到I2C是同步通信的。同步通信需要独立的时钟线进行同步传输数据。我们看上面的图可以知道这里只有一根数据线。我们用一根数据线来同时进行数据发送和数据接受。那么我们为什么需要设定通信速度呢?对于同步通信,有了独立的时钟信号进行同步发送数据根本不需要匹配Bit Width的啊?为什么同步通信还要设置通信速度呢?

在I2C中我们说的通信速度指的是Clock的最大速度(MAX SPEED),比方说Slave最多只能在100KHz下工作,但是Master在400KHz的频率下工作,这样的话他们就不能进行正常数据通信,所以我们需要设定设备时钟的最大速度。

现在我们对I2C的基本通信情况是不是有了初步的了解了呢?

现在我们的Master想发送数据给Slave,但是周边有很多的Slave,那么Master怎么把数据发送给自己向发送的设备呢?用Device Address(设备地址)!

Master为了能将数据发送给想发送的设备就需要能区分设备(slave)的方法。Master通过设备的地址来区分周边的设备并进行数据接发。也就是说Master通过[设备地址&R/W+数据]形式的数据发送到I2C bus中,所有的设备读取bus上的这些数据,判断是不是发送给自己的,如果是发送给自己的就给Master一个响应。

前面我们一直提到I2C是通过同步时钟在数据线(SDA)上进行数据接发的。这里我们来边看图边分析看看。一般情况下同步时钟上升沿或者是下降沿来接受或者发送数据的。但是I2C是在高电平(HIGH)的区间里数据有效,低电平区间内数据进行转换的。

前面我们通过硬件方式了解了下数据是怎么发送接收的。那么数据在发送接收之前数据接发的开始标记和结束标记是如何通过硬件方式来规定的呢?数据接受发送的时候必须要知道开始标记和结束标记才能进行正常的数据接受对吧??

I2C的开始标记和结束正如图所示。时钟信号在高电平的情况下数据信号从高电平转为低电平的话即为I2C通信的开始标记,时钟信号在高电平的情况下数据信号有低电平转为高电平的话即为I2C通信结束标记。

现在我们基本了解了硬件形式下I2C的[START+DATA+STOP]是如果进行工作的。现在我们来了解下I2C通信的最小单位是怎样的。Master在时钟信号为高电平并且数据信号有高电平转为低电平的时候开始I2C通信。然后伴随着时钟的同步进行8bit的数据传送或者是接受。后面第9bit的数据(ACK)是用来确认数据接发是否正常。最后时钟信号高电平并且数据信号有低电平转为高电平,即I2C通信终止结束。就是这样I2C包含ACK总共9bit为通信的最小单位. 了解了这些,下面我们来看看上面提到过的[Device Address&R/W + data]形式的数据是如何传输的。

1. Master在时钟信号->High并且数据信号由高电平转为低电平,I2C通信开始。

2. Maste伴随着时钟同步传输8bit的数据。这里说的8bit数据指的是7bit的Device Address和1bit的R/W。

3. 这里的Device Address在我们用的设备DataSheet里面有说明的。这里需要注意到是比方说设备地址是1101000(0x68, 7bit),数据传输的时候因为要和1bit的W/R一起,所以这里要将device address左移一位,然后和W/R进行OR操作。

4. Master传输的设备地址对应的设备是否正确接发通过ACK进行响应确认。

5. 如果Master只是以 START + data 8bit(device address&R/W) + ACK这种格式发送后就结束的话也可以。但是一般情况下在地址发送之后紧接着会发送数据。

6. Master能对特定的设备进行数据发送或者是数据接受。在设备地址数据发送之后便可紧接着要发送的数据或者是要接受的数据。

7. Master在发送或者接受数据的时候不需要规定要发送或者接受多少bit 的数据。因为这个依据不同设备而不同,所以依据设备自己想要的格式进行收发数据即可。

8. Master在时钟信号为高电平并且数据信号有低电平转为高电平的话便终止结束通信。

现在我们已经了解了I2C整个通信过程中的数据格式以及通信方式。实际写代码过程中依据Datasheet中说明的Register情况来写就可以了。

I2C部分到此结束~

未经允许不得转载:浩瀚先森 » I2C 基础原理详解

I2C 基础原理详解的更多相关文章

  1. SSL/TLS 原理详解

    本文大部分整理自网络,相关文章请见文后参考. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1 ...

  2. Influxdb原理详解

    本文属于<InfluxDB系列教程>文章系列,该系列共包括以下 15 部分: InfluxDB学习之InfluxDB的安装和简介 InfluxDB学习之InfluxDB的基本概念 Infl ...

  3. 【转】VLAN原理详解

    1.为什么需要VLAN 1.1 什么是VLAN? VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络.V ...

  4. [No0000126]SSL/TLS原理详解与WCF中的WS-Security

    SSL/TLS作为一种互联网安全加密技术 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure Socket La ...

  5. Storm概念、原理详解及其应用(一)BaseStorm

    本文借鉴官文,添加了一些解释和看法,其中有些理解,写的比较粗糙,有问题的地方希望大家指出.写这篇文章,是想把一些官文和资料中基础.重点拿出来,能总结出便于大家理解的话语.与大多数“wordcount” ...

  6. JSPatch实现原理详解<二>

    本文转载至 http://blog.cnbang.net/tech/2855/ 距离上次写的<JSPatch实现原理详解>有一个月的时间,在这段时间里 JSPatch 在不断地完善和改进, ...

  7. [转帖]HTTPS系列干货(一):HTTPS 原理详解

    HTTPS系列干货(一):HTTPS 原理详解 https://tech.upyun.com/article/192/HTTPS%E7%B3%BB%E5%88%97%E5%B9%B2%E8%B4%A7 ...

  8. Cisco路由技术基础知识详解

    第一部分 请写出568A的线序(接触网络第一天就应该会的,只要你掐过,想都能想出来) .网卡MAC地址长度是(  )个二进制位(16进制与2进制的换算关系,只是换种方式问,不用你拿笔去算) A.12  ...

  9. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

    消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...

随机推荐

  1. SQL Server 索引

    SQL Server 中数据存储的基本单位是页(Page).数据库中的数据文件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0 到 n 连续编号).磁盘 I/O 操作在页级执行.也 ...

  2. 深入理解CSS盒子模型

    在CSS中浮动.定位和盒子模型,都是很核心的东西,其中盒子模型是CSS很重要基石之一,感觉还是很有必要把CSS盒子模型相关知识更新一下...... CSS盒子模型<BoxModel>示意图 ...

  3. jQuery拖拽改变元素大小

    一个非常简单的例子,体验效果:http://keleyi.com/keleyi/phtml/jqtexiao/29.htm 以下是完整代码,保存到HTML文件打开也可以体验效果. <!DOCTY ...

  4. 关于jquery中用函数来设置css样式

    关于jquery中用函数来设置css样式 2016-12-21 23:27:55 1.jquery语法 $(selector).css(name,function(index,value)) name ...

  5. 使用mvc时,在视图view中使用强类型视图,在web.config文件中添加命名空间namespace的引用不起作用,解决方法

    这是view中的model代码: @model t_user_info 这是web.config配置文件只的代码: <namespaces> <add namespace=" ...

  6. arcgis server10.2.2发布地图基础服务的具体步骤

    1.直接打开制作好的.mxd文档,比如这里: 2.打开mxd文档之后,打开菜单:file-share as -services 弹出地图发布服务的界面: 点击publish之后,耐心的等待一段时间,地 ...

  7. SharePoint 2013 工作流设计之Designer 使用“可视化视图”

    SharePoint 2013增强了工作流功能,而Designer里面也添加了可视化设计视图,也就是类似Visio的设计视图(需要Visio 2013支持),下面我们简单介绍下,在可视化视图下,使用工 ...

  8. [Android]对MVC和MVP的总结

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5036289.html 经历过的客户端的架构分为这么几个阶段: ...

  9. git笔记

    这篇有关git的博客,写着写着有些崩了.里面有些碎碎念了.下次一定注意这个问题. 创建项目: midir xx :创建xx文件夹 git init : 为当前文件夹创建代码仓库 提交代码: git a ...

  10. fragment 监听返回

    @Override public void onResume() { super.onResume(); getView().setFocusableInTouchMode(true); getVie ...