1. 简介

I2C, Inter-Integrated Circuit, 是一种串行通信总线,用于连接微控制器及其外围设备
它是一种两线式串行总线(串行数据:SDA; 串行时钟频率:SCL), 利用电阻将电位上拉, 典型的电压准位为+3.3V或+5V
使用多主从架构, 主机是初始化总线的数据传输并产生允许传输的时钟信号的器件, 任何被寻址的器件都被认为是从机
每个器件都有一个唯一的地址识别(共7个bit, 包括主机和从机), 而且都可以作为一个发送器或接收器(由器件的功能决定)

常见的应用如下:

- 存储器类, NVRAM、EEPROM
- 数字逻辑转换器, DAC
- 逻辑数字转换器, ADC
- 控制音量大小
- 温度传感器
- 实时时钟芯片, Real-time clock

2. 术语

发送器: 发送数据到总线的器件
接收器: 从总线接收数据的器件
主机: 启动数据传送并产生时钟信号的设备
从机: 被主机寻址的器件
多主机: 同时有多于一个主机尝试控制总线但不破坏传输
仲裁: 是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使传输不被破坏的过程
同步: 两个或多个器件同步时钟信号的过程

3. 信号

I2C总线在传送数据过程中共有三种类型信号: 开始信号、结束信号和应答信号

开始信号: SCL为高电平时, SDA由高电平向低电平跳变, 开始传送数据
结束信号: SCL为高电平时, SDA由低电平向高电平跳变, 结束传送数据


应答信号: 接收器在接收到8bit数据后, 向发送器发出特定的低电平脉冲, 表示已收到数据

4. 传输

在没有数据传输的时候, I2C总线处于空闲状态,此时SDA和SCL两条信号线同时处于高电平

当有数据进行传输时, 主机发出启动信号, 进行数据传输过程, 完成后主机发出结束信号, 表示数据传输完毕

4.1 数据位的有效性

I2C总线进行数据传送时, SCL为高电平期间, SDA上的数据必须保持稳定,
只有在SCL的信号为低电平期间, SDA上的高电平或低电平状态才允许变化

4.2 数据传输过程

I2C的数据以字节为单位(每个字节8位, 首先传输最高位MSB),
每个字节传后必须跟一个响应位(应答信号)
每次传输的字节数量不受限制

如果从机要完成一些其它功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节
可以使时钟线SCL保持低电平, 迫使主机进入等待状态
当从机准备好接收下一个数据字节并释放时钟线SCL后, 数据传输继续

5. 寻址

由于I2C上接有多个器件, 就存在器件寻址问题
I2C总线上传送的数据信号是广义的, 既包括地址信号, 又包括真正的数据信号

主机发出开始信号后, 发送一个从机地址(7位), 第八位是数据方向位(R:1/W:0)

数据传输一般由主机产生结束信号,
但是当主机仍希望通信, 可以发出重复起始条件(Sr)和寻址另一个从机, 而不是产生一个停止条件

6. 组合

在I2C总线上的一次数据传送过程中有如下几种组合方式

- 主机向从机发送数据, 数据传送方向在整个传送过程中不变

- 主机在第一个字节后, 立即由从机读数据

- 在传送过程中, 当需要改变传送方向时, 起始信号和从机地址都被重复产生一次, 但两次读/写方向位正好反相

参考:
<i2c源代码情景分析>

I2C总线介绍的更多相关文章

  1. [国嵌攻略][152][I2C总线介绍]

    IIC电气特性 I2C(inter intergrated circuit)总线是由philps公司开发的两线式串行总线,用于连接微控制器及其外围设备. I2C总线只有两根双向信号线: SDA:ser ...

  2. I2C总线协议的总结介绍

    在看天翔哥的视频之后,他强调要把I2C协议好好研究一下,那么就对一些基本的通信手段是十分有帮助的..那么就来了解一下I2C总线协议的一些知识吧. I2C(Inter-Integrated Circui ...

  3. Linux+I2C总线分析(主要是probe的方式)

    Linux I2C 总线浅析 ㈠ Overview Linux的I2C体系结构分为3个组成部分: ·I2C核心: I2C核心提供了I2C总线驱动和设备驱动的注册.注销方法,I2C通信方法(即“algo ...

  4. 自制单片机之六……串行I2C总线E2PROM AT24CXXX的应用

    这一篇介绍I2C存储器的使用.主要是介绍AT24CXX系列器件,它分为两类,主要是通过被存储容量地址来分的,一类是AT24C02-AT24C16,它的存储容量从256字节到2048字节.另一类是AT2 ...

  5. 总线接口与计算机通信(一)I2C总线

    1.  I2C总线的基本概念    1)发送器(Transmitter):发送数据到总线的器件    2)接收器(Receiver):从总线接收数据的器件    3)主机(Master):初始化发送. ...

  6. ADXL345经验总结,采用SPI和I2C总线操作

    一. ADXL345简介       ADXL345是ADI公司推出的三轴(x,y,z)iMEMS数字加速度计(digital accelerometer),具有在16G下高分辨率(13Bit)测量能 ...

  7. 基于I2C总线的MPU6050学习笔记

    MPU6050学习笔记 1. 简述 一直想自己做个四轴飞行器,却无从下手,终于狠下决心,拿出尘封已久的MPU6050模块,开始摸索着数据手册分析,一步一步地实现了MPU6050模块的功能,从MPU60 ...

  8. EEPROM读写学习笔记与I2C总线(转)

    reference:https://www.cnblogs.com/uiojhi/p/7565232.html 无论任何电子产品都会涉及到数据的产生与数据的保存,这个数据可能并不是用来长久保存,只是在 ...

  9. i2c总线驱动,总线设备(适配器),从设备,从设备驱动的注册以及匹配

    常用链接 我的随笔 我的评论 我的参与 最新评论 我的标签 随笔分类 ARM裸机(13) C(8) C++(8) GNU-ARM汇编 Linux驱动(24) Linux应用编程(5) Makefile ...

随机推荐

  1. perl语言入门总结-第2章

    $what ='steak'; print "fred ate $n ${what}s.\n"; 布尔值 如果是数字0为假, 如果是空字符串''为假, 如果即不是数字也不是字符串, ...

  2. 集合源码分析之 HashMap

    一 知识准备 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 二  HashM ...

  3. linux下解压命令大全(转)

    .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gun ...

  4. Active Directory 域服务 (AD DS) 虚拟化

    TechNet 库 Windows Server Windows Server 2012 R2 和 Windows Server 2012 服务器角色和技术 Active Directory Acti ...

  5. dynamic基元类型与隐式类型的局部变量var

    dynamic代码示例 using System; using System.Collections.Generic; using System.Linq; using System.Text; na ...

  6. rest_framework_jwt

    安装配置 安装 pip install djangorestframework-jwt 配置 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ...

  7. 分享6个网址二维码API接口

    1.http://pan.baidu.com/share/qrcode?w=150&h=150&url=http://www.54admin.net 2.http://b.bshare ...

  8. PHP页面跳转总结

    一.使用php内置函数:header()函数 <?php$url='./test.php'; header("Location:$url"); ?> 注意Locatio ...

  9. python中的re模块,常用函数介绍

    参考: http://www.cnblogs.com/tina-python/p/5508402.htm ======== 1,预定义字符集,可以写在字符集[....]中 \d  数字: \D 非数字 ...

  10. webpack + less

    使用less需要安装 'style-loader','css-loader','less-loader' 三个loader. 安装之后在webpack.config.js配置 const path = ...