I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。

    I2C总线工作原理

  SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出.需通过上拉电阻接电源VCC.当总线空闲时.两根线都是高电平,连接总线的外同器件都是CMOS器件,输出级也是开漏电路.在总线上消耗的电流很小,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接口都有一定的等效电容.而线路中电容会影响总线传输速度.当电容过大时,有可能造成传输错误.所以,其负载能力为400pF,因此可以估算出总线允许长度和所接器件数量。

  主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

  I2C总线的数据传输

  字节格式

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

  应答响应

  数据传输必须带响应,相关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间发送器释放SDA 线(高)。在响应的时钟脉冲期间,接收器必须将SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。

  通常被寻址的接收器在接收到的每个字节后,除了用CBUS 地址开头的数I2C总线数据传输和应答据,必须产生一个响应。当从机不能响应从机地址时(例如它正在执行一些实时函数不能接收或发送),从机必须使数据线保持高电平,主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输。如果从机接收器响应了从机地址,但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示。从机使数据线保持高电平,主机产生一个停止或重复起始条件。

  如果传输中有主机接收器,它必须通过在从机发出的最后一个字节时产生一个响应,向从机发送器通知数据结束。从机发送器必须释放数据线,允许主机产生一个停止或重复起始条件。

  时钟同步

  所有主机在SCL线上产生它们自己的时钟来传输I2C总线上的报文。数据只在时钟的高电平周期有效,因此需要一个确定的时钟进行逐位仲裁。

  时钟同步通过线与连接I2C 接口到SCL 线来执行。这就是说SCL 线的高到低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平,它会使SCL 线保持这种状态直到到达时钟的高电平。但是如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变SCL 线的状态。因此SCL 线被有最长低电平周期的器件保持低电平。此时低电平周期短的器件会进入高电平的等待状态。

  当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平。之后,器件时钟和SCL线的状态没有差别,而且所有器件会开始数它们的高电平周期。首先完成高电平周期的器件会再次将SCL线拉低。这样产生的同步SCL 时钟的低电平周期由低电平时钟周期最长的器件决定,而高电平周期由高电平时钟周期最短的器件决定。

  i2c技术性能:

  工作速率有100K和400K两种;

  支持多机通讯;

  支持多主控模块,但同一时刻只允许有一个主控;

  由数据线SDA和时钟SCL构成的串行总线;

  每个电路和模块都有唯一的地址;

  每个器件可以使用独立电源

  I2C总线中8bit和10bit介绍与区别

  经常有用户问我,使用USB2XXX的USB2IIC功能的时候,从机地址应该怎么传递的问题,这个问题的根源在于不同的I2C从机厂商采用了不同的I2C总线地址约定,导致在说I2C总线的时候总是容易搞混,本文主要针对8位和10位I2C总线地址进行详细的说明。

  8位地址

  一些厂商在提供从机地址的时候说的是包含了读写位的8bit地址,比如他说写地址为0x92,读地址为0x93,如下图所示

  

  这种情况下,你只需要将这个地址的前7bit提取出来,然后传入USB2XXX的接口函数即可,比如为0x49。

  还有一种方式可以判断厂商提供的地址是7bit模式地址还是8bit地址模式的地址,7bit地址模式下,地址的取值范围在0x07到0x78之间,若超过了这个范围,那么这个地址可能就是8bit地址。

  

  10位寻址

  I2C总线的10bit寻址和7bit寻址是兼容的,这样就可以在同一个总线上同时使用7bit地址和10bit地址模式的设备,在进行10bit地址传输时,第一字节是一个特殊的保留地址来指示当前传输的是10bit地址。

  

 10bit地址寻址

  在使用USB2XXX传输10bit地址模式的时候,只需要在初始化的时候配置为10bit地址模式,然后再调用读写数据函数的时候传入正确的10bit地址即可。

I2C总线中8bit和10bit有什么区别相关推荐

  1. 三态门及其在I2C总线中的应用_普中_89C52单片机

    ----本篇笔记整理自B站郭天祥老师的视频<三态输出的CMOS门电路>,郭老师讲解十分细致,可温故而知新! 1.什么是三态门 三态门(也叫三态输出电路.三态输出门),其电路的输出除了高.低 ...

  2. c语言8bit转10bit,8bit、8+2bit和10bit 手机屏幕三种色深你真的能看出来吗?

    10bit,这个词在手机厂商"铺天盖地"的宣传下,至少在线上关注手机参数的消费者,已经注意到色深对屏幕的意义.继色域.刷新率之后,屏幕色深再一次成为一面"好屏幕" ...

  3. I2C总线设计规范之基础篇

    I2C通信协议分析 常用IIC接口通用器件的器件地址是由种类型号,及寻址码组成的,共7位.如格式如下:D7 D6 D5 D4 D3 D2 D1 D0 1.器件类型由:D7-D4 共4位决定的.这是由半 ...

  4. C51IO口模拟I2C总线驱动AT24C16 (I2C协议部分)

    /* 名称:C51IO口模拟I2C总线驱动EEPROM(AT24C16) 说明:I2C总线是由Philips公司开发的一种简单.半双工同步串行总线.它只需要两根线(SCL.SDA)即可在连接于总线上的 ...

  5. I2C之知(五)--I2C总线的10bit地址以及通用广播地址

    其实,10bit地址我没用过,通用广播地址更没用过.通用广播地址应该是在多个mcu之间用i2c进行通信时使用的.虽说没用到,但还是做了翻译,说不定以后有机会用到: 10bit地址 10bit的寻址扩展 ...

  6. i2c Linux 动态 波特率,如何在Linux中设置i2c总线的波特率?

    我有一台基于riko-3288处理器的ARM计算机.我还具有带有自定义内核(不带模块系统)的设备的Ubuntu映像. 我目前正在尝试为i2c总线设置最高100KHz的波特率.我不是Linux方面的专家 ...

  7. arm linux i2c 总线驱动,ARM-Linux中I2C总线驱动开发

    摘  要: 针对I2C总线的特点,Linux内核中定义了I2C驱动体系结构.在分析Linux的I2C总线驱动体系结构基础上,介绍了在S3C2410中设计I2C总线驱动的方法. 关键词: ARM-Lin ...

  8. OMAP3630 Linux I2C总线驱动分析(1)

    1 Linux I2C驱动架构 Linux下I2C驱动的架构图如下: 图1.1 Linux下I2C驱动架构 如上图所示,每条I2C总线会对应一个adapter,而每条I2C总线上则可以有多个 clie ...

  9. Linux设备驱动---OMAP3630 Linux I2C总线驱动分析(1)

    原文地址:http://blog.csdn.net/kellycan/article/details/6394737 1 Linux I2C驱动架构 Linux下I2C驱动的架构图如下: 图1.1 L ...

  10. OMAP3630 Linux I2C总线驱动分析

    1 Linux I2C驱动架构 Linux下I2C驱动的架构图如下: 图1.1 Linux下I2C驱动架构 如上图所示,每条I2C总线会对应一个adapter,而每条I2C总线上则可以有多个 clie ...

最新文章

  1. Lombok 使用详解,简化 Java 编程
  2. Python 内置函数sorted()在高级用法
  3. SEO--我们是不是走错了路?
  4. vuejs兄弟组件之间的通信
  5. 循环嵌套小星星-嵌套循环完成案例
  6. C# 捕获系统闪退BUG
  7. android的时间代码怎么写,Android 日期和时间的使用实例详解
  8. 没做性能优化,系统说炸就炸...
  9. 在ubuntu 16.04中安装source insight 4.0破解版
  10. Thread线程notify方法的自我理解
  11. Remap 后的 USART1 不能发送数据
  12. 如何制作deb/rpm通用的构建命令?
  13. 给LaTeX表格加脚注时的奇怪问题(使用PDFLaTeX)
  14. 电脑快捷方式图标变白解决方案
  15. 预防死锁的方法以及死锁的检测与解除
  16. 红黑树和二叉树有什么区别?
  17. 工具传送门(持续更新)
  18. 其次线性方程组,行列式为0,一定有非0解.
  19. 手持两把锟斤拷,口中疾呼烫烫烫
  20. Hive错误之 Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask错误分析

热门文章

  1. 第3章 词性标注(pos、N-gram、NER等标注器)
  2. Parallel GC
  3. Cloudera-server迁移
  4. 软件工程领域国际会议列表
  5. Oracle 19c 新特性:ANY_VALUE 函数和 LISTAGG 的增强
  6. VMware虚拟机 网桥模式详细配置(及计算机网络基本知识 IP/子网掩码/网关/DNS)
  7. linux———/bin/sh、 /bin/bash、 /bin/dash的区别
  8. win7休眠设置在哪里_win7怎么开启休眠模式
  9. Sparse sharing 在ANN实现多任务时的应用
  10. 5分绩点转4分_泪目!老詹儿子凌晨5点起身训练,科比女儿4点,魔术师叹息退出群聊...