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. Jongmah CodeForces - 1110D

    传送门 题意:你有n个数字,范围[1, m],你可以选择其中的三个数字构成一个三元组,但是这三个数字必须是连续的或者相同的,每个数字只能用一次,问这n个数字最多构成多少个三元组? 题解:三个一模一样的 ...

  2. Card Hand Sorting 18中南多校第一场C题

    一.题意 随机给你一堆牌(标准扑克牌),之后让你按照: 第一优先规则:所有相同花色的在一起 第二优先规则:所有相同花色的必须按照升序或者降序排列 问,你最少要拿出多少张牌插入到其他的地方以维持这个状况 ...

  3. 大话CNN经典模型:AlexNet

    2012年,Alex Krizhevsky.Ilya Sutskever在多伦多大学Geoff Hinton的实验室设计出了一个深层的卷积神经网络AlexNet,夺得了2012年ImageNet LS ...

  4. Python logging 模块简介

    Table of Contents 1. Logging 模块 1.1. 简介 1.2. 简单输出日志 1.3. 输入日志到文件 1.4. 几个基本概念 1.4.1. loggers 1.4.2. h ...

  5. 哪些工具能有效管理Azure Active Directory?

    [TechTarget中国原创] 管理Azure Active Directory有四种常见的工具:Azure Web门户.Azure PowerShell.Azure命令行接口和Azure Mana ...

  6. centos 服务器内存管理 服务于端口状态

    du su /目录/ 查看改目录大小 ls -lht /  查看文件详情,显示文件大小(直观) df -h 查看系统内存占用情况 centos 版本 lsb_release -a cat /etc/i ...

  7. runtime如何通过selector找到对应的IMP地址?(分别考虑类方法和实例方法)

    每一个类对象中都一个对象方法列表(对象方法缓存) 类方法列表是存放在类对象中isa指针指向的元类对象中(类方法缓存) 方法列表中每个方法结构体中记录着方法的名称,方法实现,以及参数类型,其实selec ...

  8. 《Cracking the Coding Interview》——第4章:树和图——题目8

    2014-03-19 05:04 题目:给定两棵二叉树T1和T2,判断T2是否是T1的子树.子树的定义是,以T1的某个节点(可以是T1的根)作为根节点,得到的这棵树和T2一模一样. 解法:首先可以根据 ...

  9. Python面试题之一:解密

    Python面试题之一: 说明:就是Python工程师面试题 一.字典转换与正则提取值 1:key与Value交换 a = {'a':1,'b':2} print({value:key for key ...

  10. shell之iptables

    这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链. 1.PREROUTING (路由前) 2.INPUT (数据包流入口) 3.FORWARD (转发管卡) 4.OUTP ...