下面是 I 2 C 总线的一些特征

  • 只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL

  • 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从机关系软件设定地 址 主机可以作为主机发送器或主机接收器

  • 它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁 防止数据被破坏

  • 串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速 模式下可达 3.4Mbit/s

  • 片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整

  • 连接到相同总线的 IC 数量只受到总线的最大电容 400pF 限制

数据的有效性

SDA 线上的数据必须在时钟的高电平周期保持稳定 数据线的高或低电平状态只有在 SCL 线的时钟 信号是低电平时才能改变

起始和停止条件

传输数据

字节格式

发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制 每个字节后必须跟 一个响应位 首先传输的是数据的最高位 MSB 。

响应

数据传输必须带响应 相关的响应时钟脉冲由主机产生 在响应的时钟脉冲期间 发送器释放 SDA 线(高 )

在响应的时钟脉冲期间 接收器必须将 SDA 线拉低 使它在这个时钟脉冲的高电平期间保持稳定的低电平

【小知识】在I2C的变种SCCB,SCCB是串行摄像机控制总线协议的英文名简称,相当于一个简易的I2C协议。与I2C差异在ACK位处理上。

7 位的地址格式

数据的传输遵循图 10 所示的格式 在起始条件 S 后 发送了一个从机地址 这个地址共有 7 位,紧接着的第 8 位是数据方向位 R/W 0 表示发送 写 1 表示请求数据 读 数据传输一般
由主机产生的停止位 P 终止 但是 如果主机仍希望在总线上通讯 它可以产生重复起始条件 Sr和寻址另一个从机 而不是首先产生一个停止条件 在这种传输中 可能有不同的读 写格式结合 。

【补充】10 位寻址,允许使用高达1024 个额外的从机地址。

10 位寻址和7 位寻址兼容 而且可以结合使用 10 位寻址采用了保留的 1111XXX作为起始条件 S或重复起始条件 Sr 的后第一个字节的头 7 位 10 位寻址不会影响已有的 7 位寻址 有7 位和 10 位地址的器件可以连接到相同的 I2C 总线 它们都能用于 F/S 模式和 Hs 模式系统 。

尽管保留地址位 1111XXX有 8 个可能的组合 但是只有 4 个组合 11110XX用于 10 位寻址 剩下的 4个组合 11111XX保留给以后增强的 I2C 总线 。

【扩展】

每个I2C device和走线都有寄生电容的。电容主要是影响I2C上升下降时间。当寄生电容过大到会影响信号完整性的时候,总线就失效了。

虽然说I2C接口是开路(open drain)的,减小上拉电阻也可以改善上升时间,但也不能太小。电阻太小I2C的低电压就会比较高,过不了规格,所以IC管脚的低电平最大值决定了上拉电阻的最小值。此外减少上啦会有很大的漏电流。

再最后我看看Saleae Logic 上波形图

I2C的小结的更多相关文章

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

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

  2. I2C(三) linux3.4(内核分析)

    目录 I2C(三) linux3.4(内核分析) (一)总线流程 bus.probe match i2c_device_probe (二)client注册 方式(一)静态加载 方式(二)指定设备 方式 ...

  3. STM32 C++编程 005 I2c(Soft)类

    使用 C++ 语言给 STM32 编写一个 I2c(Soft)类 我使用的STM32芯片:STM32F103ZET6 我们使用的STM32库版本:V3.5.0 注意: 想学习本套 STM32 C++编 ...

  4. 关于I2C和SPI总线协议【转】

    关于I2C和SPI总线协议 IICvs SPI 现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral ...

  5. 从零开始编写自己的C#框架(26)——小结

    一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...

  6. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  7. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  8. iOS--->微信支付小结

    iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...

  9. iOS 之UITextFiled/UITextView小结

    一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...

随机推荐

  1. Verilog强制激励语法

    Verilog强制激励语法 1. 在一个过程块中,可以用两种不同的方式对信号变量或表达式进行连续赋值. 过程连续赋值往往是不可以综合的,通常用在测试模块中. 两种方式都有各自配套的命令来停止赋值过程. ...

  2. MySQL:数据操作

    数据操作 一.插入数据 1.所有字段插入数据 语法: insert into 数据表名(字段名) values(插入的数据);(标准)insert into 数据表名values(插入的数据); 实例 ...

  3. python自学第11天-单线程并发、迭代器,序列化,获取路径

    单线程并发 import time def consumer(name): print("%s 准备吃包子了"%name) while True: baozi=yield#变成一个 ...

  4. switch和数组两种方法对不同输入做不同响应

    #include<stdio.h> int main(void) { int i; scanf("%d",&i); switch(i) { : printf(& ...

  5. 学习笔记TF046:TensoFlow开发环境,Mac、Ubuntu/Linux、Windows,CPU版本、GPU版本

    下载TensorFlow https://github.com/tensorflow/tensorflow/tree/v1.1.0 .Tags选择版本,下载解压. pip安装.pip,Python包管 ...

  6. 中国商用分组密码SM4

    SM4 密码算法结构 SM4 密码算法基本运算有两部分: 1.模2加:⊕,32比特异或运算 2.循环移位: <<< i ,把32位字循环左移i位 基本密码部件为 1非线性字节变换S盒 ...

  7. ScriptManager 发送错误到客户端

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...

  8. Discuz! X3 全新安装图文教程

    Discuz! 是腾讯旗下 Comsenz 公司推出的以社区为基础的专业建站平台,帮助网站实现一站式服务.让论坛(BBS).个人空间(SNS).门户(Portal).群组(Group).应用开放平台( ...

  9. MySQL Execution Plan--IN查询计划

    对于IN查询,MySQL会根据当前表数据结构(索引)和数据分布(统计信息和预估)生成多种执行计划,并根据执行成本挑选出“最优执行计划”. 假设有查询 SELECT * FROM student ,,, ...

  10. 第二章 C#语法基础 (2.2 C#语言的运算符和表达式)

    [案例]本案例通过随机数发生器随机产生三条边,要求输出三天边长(边长长度为1~20的整数),并判断是否可以构成一个三角形. 如果可以,则计算出三角形面积,否则输出信息”三条随机的边不能构成三角形“. ...