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. Git使用简单总结--源自廖雪峰网站

    创建版本库git add加入到暂存区git commit -m" "加入到分支 时光机穿梭git satus查看仓库的当前状态git diff file 查看修改内容 版本回退HE ...

  2. 4 . GET方法实现文章分类

    复习:博客站点 <!DOCTYPE html> {% load staticfiles %} <html> <head> <meta charset=&quo ...

  3. Vbs 测试程序一

    转载请注明出处 有点小恶意哦!慎重测试 'This procedure is written in SeChaos, only for entertainment, not malicious com ...

  4. leetcode 【Rotate List 】python 实现

    题目: Given a list, rotate the list to the right by k places, where k is non-negative. For example:Giv ...

  5. Python全栈 MySQL 数据库 (简述 、安装、基本命令)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图     一个月的python已经结束了  下面就是数据库了   先说M ...

  6. java_链表反转

    定义一个Node节点类 1 public class Node { 2 public int value; 3 public Node next; 4 5 public Node(int value) ...

  7. 事件Qevent的接受和忽略 和重定义 事件过滤器(转)

    转载来源:http://blog.csdn.net/seanyxie/article/details/5821970 事件处理流程:某个事件发生------>exec()循环会接收到这个事件-- ...

  8. Leetcode 671.二叉树中第二小的节点

    二叉树中第二小的节点 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值. 给出这样的一个二叉树 ...

  9. Linux cooked-mode capture 格式转换

    tcpdump抓包时,如果-i选项指定为一个网卡地址,那么抓取的数据包数据链路层是以太网头部:如果指定any,则以太网头部将被替换为linux cooked capture头部 # tcpdump - ...

  10. 团队项目-第四次Scrum 会议

    时间:10.26 时长:30分钟 地点:线上 工作情况 团队成员 已完成任务 待完成任务 解小锐 编写project和projectGenerator类 编写下一步的规格说明 陈鑫 采用creator ...