一、12c总线概述

I2C( Inter-Integrated Circuit,又称IIC)总线是一种串行总线,用 于连接微控制器及其外围设备,硬件图非常简单:一条串行数据线(SDA),一条串行时钟线(SCL )一根接地线(GND)。

它具有如下特点:

1)每个连接到总线的器件都可以使用软件根据它的惟一的地址来识别(具体地址需要查阅具体的I2C设备)。

2)传输数据的设备间是简单的主/从关系。主从式结构,通信双方必须一个为主(master)一个为从(slave),主设备掌握每次通信的主动权,从设备按照主设备的节奏被动响应。每个从设备在总线中有唯一的地址(slave address),主设备通过从地址找到自己要通信的从设备(本质是广播)。

3)主机可以用作主机发送器(主机指的是发送/停止数据传输、提供时钟信号的器件;发送器指发送数据到总线的器件)或主机接收器(主机指被主机寻址的器件;接收器指从总线接收数据的器件)。

4)它是一个真正的多主机总线(多主机指可以由多个主机试图去控制总线,但是不会破坏数据),两个或多个主机同时发起数据传输时,可以通过冲突检测和仲裁来防止数据被破坏。

5)I2C主要用途就是主SoC和外围设备之间的通信,最大优势是可以在总线上扩展多个外围设备的支持。常见的各种物联网传感器芯片(如gsensor、温度、湿度、光强度、酸碱度、烟雾浓度、压力等)均使用I2C接口和主SoC进行连接。

下是一条I2C总线上多个设备相连的例子:

二、12c总结的信号类型
I2C总统在传送数据过程中共有3种类型信号:开始信号、结束信号和响应信号。
1)开始信号(S):SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据(数据按二进制传输,先传最高位)当对方检测到后就知道要开始传输数据了。
2)结束信号(P):SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

3)响应信号(ACK):主机把设备发给从机后怎么知道对方是否收到了呢?接收器在接收到8位数据后,在第9个时钟周期(这个时间刚接收到1位),拉低SDA电平,这时主机就能检测到相应引脚变化了。响应信号由主机来检测

开始信号和结束信号的波形图如下:

应答信号电平波形图如下:

SDA上传输的数据必须在SCL为高电平期间保持稳定,因为外接设备要在SCL为高电平期间内采集数据,才能知道数据是低电平还是高电平;SDA上的数据只能在SCL为低电平期间变化,如下图所示便为I2C总线的位传输波形。

 三、I2C总线的数据传输格式

发送到SDA线上的每个字节必须是8位的,每次传输可以发送的字节数量不受限制。每个字节后必须跟个响应位。首先传输的是数据的最高位(MSB)。如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能继续接收或发送下个字节,从机可以拉低SCL迫使主机进入等待状态。当从机准备好接收下一个数据并释放SCL后,数据传输继续。如果主机在传输数据期间也需要完成一些其他功能(例如一个内部中断服务程序)也可以拉低SCL以占住总线。

启动一个传输时,主机先发出S信号,然后发出8位数据。这8位数据中前7位为从机的地址(由此可见最多可接128个设备,从机地址需要看具体I2C设备的数据手册),第8位表示传输的方向(0表示写操作,1表示读操作)。被选中的从机发出响应信号。紧接着传输一系列字节(不同的I2C设备格式是不同的,需要查具体数据手册)及其响应位(将SDA拉低)。最后,主机发出P信号结束本次传输。

下图是几种I2c总线上数据传输的格式:

并非每传输8位数据之后,都会有ACK信号,有以下3种例外。

1 )当从机不能响应从机地址时(例如它正忙于其他事而无法响应I2c总线的操作,或 这个地址没有对应的从机),在第9个SCL周期内SDA线没有被拉低,即没有ACK信号。 这时,主机发出一个P信号终止传输或者重新发出一个S信号开始新的传输。

2)如果从机接收器在传输过程中不能接收更多的数据时,它也不会发出ACK信号。这样, 主机就可以意识到这点,从而发出一个P信号终止传输或者重新发出一个S信号开始新的传输。

3)主机接收器在接收到最后一个字节后,也不会发出ACK信号。于是,从机发送器释放SDA线,以允许主机发出P信号结束传输。

 

四、I2C控制器

协议类接口 - I2C的更多相关文章

  1. 协议类接口 - UART

    一.何为协议类接口? 双方约定信号的协议和满足时序要求. 二.UART如何传数据 通用异步收发器简称 UART,即“Universal Asynchronous Receiver Transmitte ...

  2. 协议类接口 - SPI

     一.SPI概述 SPI(Serial Peripheral Interface,串行外设接口)总线系统是一种同步串行外设接口,它可以使CPU与各种外围设备以串行方式进行通信以交换信息.一般主控SoC ...

  3. 协议类接口 - NAND

    一.引脚的含义 先看下nand flash是怎么接的,如下所示便为某一款nand存储芯片的引脚图.发现其连地址信号都没有.那么是如何访问地址数据的呢? 查阅该nand flash的数据手册可得其各个引 ...

  4. 协议类接口 - LCD

    一.引脚含义 下图为某LCD相关引脚: 从引脚可以大概看出其SoC的连接情况: 1)VCLK为时钟,每一次像素就移动一次 2)HSYNC/VLINE 3)VSYNC/VFRAME 4)VD0 - VD ...

  5. 业务类接口在TCP,HTTP,BLL模式下的实例 设计模式混搭 附源码一份

    业务类接口在TCP,HTTP,BLL模式下的实例 设计模式混搭 附源码一份 WinForm酒店管理软件--框架这篇随笔可以说是我写的最被大家争议的随笔,一度是支持和反对是一样的多.大家对我做的这个行业 ...

  6. Python 基于urllib.request封装http协议类

    基于urllib.request封装http协议类 by:授客QQ:1033553122 测试环境: Python版本:Python 3.3   代码实践 #!/usr/bin/env python ...

  7. 组件接口(API)设计指南[2]-类接口(class interface)

    *返回文件夹阅读其它章节: http://blog.csdn.net/cuibo1123/article/details/39894477 类接口(class interface) 你能够參考MGTi ...

  8. Entity Framework 实体框架的形成之旅--为基础类库接口增加单元测试,对基类接口进行正确性校验(10)

    本篇介绍Entity Framework 实体框架的文章已经到了第十篇了,对实体框架的各个分层以及基类的封装管理,已经臻于完善,为了方便对基类接口的正确性校验,以及方便对以后完善或扩展接口进行回归测试 ...

  9. Entity Framework 实体框架的形成之旅--基类接口的统一和异步操作的实现(3)

    在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...

随机推荐

  1. [转]v$parameter, v$parameter2, v$system_parameter, v$system_parameter2, v$spparameter区别

    本文转自:http://blog.csdn.net/huang_xw/article/details/617389 1 v$parameter v$parameter显示的是session级的参数. ...

  2. 1、v1 与 v2的比较

    1.路由的迁移 /* --- v1 ----*/ .config(function($stateProvider){ $stateProvider .state('main', { url: '/', ...

  3. LaTeX 修订

    LaTeX多人协同编辑的时候,修订起来与word相比较而言麻烦一些.不过随着技术的发展和需求的增多,会有越来越多的工具支持LaTeX的修订. (1)在线LaTeX ShareLaTeX是一个很优秀的在 ...

  4. Wp及Windows应用商店程序Logo生成器

    在开发wp或windows应用商店程序时,需要制作不同分辨率下的logo,往往不同分辨率下的logo仅仅是图片尺寸或图片的内边距不同,为了快速生成不同分辨率下的图片,减少工作量,于是就自己动手开发了个 ...

  5. Java基础入门 - 简介

    官网:https://www.oracle.com Java分为三个体系: JavaEE: Java Platform, Enterprise Edition, Java平台企业版 JavaSE: J ...

  6. javascript12个你必须掌握的技能

    网站建设的时候,作为码农,总喜欢写一些高效且省事的代码,这里,dbestech为你提供关于JavaScript的使用技巧点. 1. 空(null, undefined)验证 当我们创建了一个新的变量, ...

  7. 关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?

    问题来源如下: 打开/etc/crontab文件,命令如下: yule@yule-ubuntu:~$ vi /etc/crontab  显示如下内容: # /etc/crontab: system-w ...

  8. 【Linux】Linux 在线安装yum

    Linux如何安装软件? 一.RPM安装 优点: 安装过程很简单 缺点: 需要自己寻找和系统版本对应的RPM包 安装过程中需要解决包的依赖问题(例如tftp包) 二.yum在线安装 软件包仓库 仓库的 ...

  9. ViewPager+handler实现轮播

    先说下功能吧,随便设置一个网络图片链接的集合,作为图片的资源.我用ImageLoader来加载图片,在图片未加载完成时会ProgressBar加载状态 在Handler发送一个空消息来实现页面的轮播 ...

  10. office转换为html在线预览

    /// <summary> /// word 转换为html /// </summary> /// <param name="path">要转换 ...