今天来学习下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. Elasticsearch初步使用(安装、Head配置、分词器配置)

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.ElasticSearch简单说明 a.ElasticSearch是一个基于Lu ...

  2. position: fixed用在iframe里面失效了

    iframe真是各种坑啊,,,可是找不到别的代替 $(parent.window).scroll(function(){ $('固定元素').css({ top : $(parent.window). ...

  3. 关于印发利用DEM确定耕地坡度分级技术规定(试行)的通知

    下载:http://files.cnblogs.com/files/gisoracle/%E5%88%A9%E7%94%A8DEM%E7%A1%AE%E5%AE%9A%E8%80%95%E5%9C%B ...

  4. ArcGIS中国工具应用:固定比例尺固定纸张批量打印

    ArcGIS中国工具应用:固定比例尺固定纸张批量打印 下载地址:http://files.cnblogs.com/files/gisoracle/a3batchprint.zip 固定A3,比例尺1: ...

  5. UITabBarController 更改tabbariteam上的选中图片

    首先遵守“ UITabBarControllerDelegate ”协议 再在- (void)viewDidLoad {}方法中设置代理“ self.tabBarController.delegate ...

  6. 总结一下Android中主题(Theme)的正确玩法

    在AndroidManifest.xml文件中有<application android:theme="@style/AppTheme">,其中的@style/AppT ...

  7. 利用Maven把项目生成jar包供其他项目使用

    每当搭建框架时,第一步就是为系统整理一个接一个的jar包.用多了就开始深思,如何把自己的项目也整成jar包,供他人使用呢? 近期一直在看徐晓斌所著:<Maven实战>.因自己学识不够,只是 ...

  8. .NET系列文章——近一年文章分类整理,方便各位博友们查询学习

    由于博主今后一段时间可能会很忙(准备出书:<.NET框架设计—模式.配置.工具>,外加换了新工作),所以博客会很少更新: 在最近一年左右时间里,博主各种.NET技术类型的文章都写过,根据博 ...

  9. 烂泥:dnsmasq搭建简易DNS服务器

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 今天我们来介绍一个比较简单的DNS服务器dnsmasq.这款软件,已经被我成功使用到公 ...

  10. Ubuntu 网络参数设置

    修改网络设置 sudo vim /etc/network/interfaces 修改计算机名 sudo vim /etc/hostname sudo vim /etc/hosts