I2C协议学习

        I2C Bus(Inter-Integrated Circuit Bus) 最早是由Philips半导体(现被NXP收购)开发的两线式串行总线,常用于微控制器与外设之间的连接。

一、概述

        以下是 I2C 总线的一些特性:

  • 只需要两条总线;一条串行数据线 (SDA) 和一条串行时钟线 (SCL)。
  •  连接到总线的每个设备都可以通过唯一的地址进行寻址,并且始终存在简单的主/从关系;master可以作为主发送器或主接收器运行。
  • 没有严格的波特率要求,例如 RS232,主机生成总线时钟
  • 多主机总线,包括冲突检测和仲裁,以防止两个或多个主机同时启动数据传输时数据损坏。
  • 串行、面向 8 位的双向数据传输在标准模式(standard mode)下最高可达 100 kbit/s,在快速模式(fast mode)下最高可达 400 kbit/s,在快速模式 Plus 下最高可达 1 Mbit/s ,或在高速模式(high-speed mode)下高达 3.4 Mbit/s。
  • 在超快速模式下,面向 8 位的串行单向数据传输速度高达 5 Mbit/s。
  • 片上滤波可抑制总线数据线上的尖峰信号,以保持数据完整性。
  •  可连接到同一总线的IC 数量仅受最大总线电容的限制。 在某些条件下可能允许更大的电容。

        一个I2C应用如下:

二、I2C协议

 1、标准模式与快速模式协议

        两线一一串行数据(SDA)和串行时钟(SCL)线在连接到总线的器件间传输信息。每个器件都有一个唯一的地址识别(无论是微控制器、LCD驱动器、存储器或键盘接囗),而且都可以作为一个发送器或接收器(由器件的功能决定),很明显,LCD驱动器只是一个接收器,而存储器则既可以接收又可以发送数。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机,主机是初始化总线的数据传输并产生允许传输的时钟信号的器件,此时,任何被寻址的器件都被认为是从机。

        SDA和SCL都是双向线路,都通过一个电流源或上拉电阻连接到正的电源电压,当总线空
闲时,这两条线都是高电平

        连接到总线的器件输出级必须是漏极开路集电极开路才能执行线与的功能。

        I2C 总线规范的强制要求和可选部分的使用以总结如下:

1) 数据有效性

        在时钟的高电平期间(SCL为高),SDA 线上的数据必须是稳定的。 只有当 SCL 线上的时钟信号为 LOW 时,数据线的 HIGH 或 LOW 状态才能改变。 每一个时钟脉冲传输一个数据位。

2)启动和停止条件

        所有传输都以 START (S) 开始,并以 STOP (P) 结束。

  • 启动条件:SCL为高电平时,SDA 线上的高电平到低电平转换。
  • 停止条件:SCL为高电平时,SDA 线上的低电平到高电平转换。

 

        START 和 STOP 条件始终由主机生成。 在 START 条件之后,总线被认为是忙碌的。 在 STOP 条件之后的某个时间,总线被认为再次空闲。

        如果生成重复的 START (Sr) 而不是 STOP 条件,则总线保持忙碌。 在这方面,START (S) 和重复 START (Sr) 条件在功能上是相同的。

3)字节格式

        SDA 线上的每个字节都必须是 8 位。 每次传输可传输的字节数不受限制。 每个字节后必须跟一个确认位(ack)。 数据首先以最高有效位 (MSB)传输。 如果从机在执行其他功能(例如服务内部中断)之前无法接收或发送另一个完整字节的数据,则它可以将时钟线 SCL 保持为低电平以强制主机进入等待状态。 当从设备准备好接收另一个字节的数据并释放时钟线 SCL 时,数据传输将继续。

4)确认位

        确认位(ACK)在每个字节之后发送。确认位允许接收器通知发送器该字节已成功接收并且可以发送另一个字节。主机生成所有时钟脉冲,包括确认位的第九个时钟脉冲。

        确认信号定义如下:发送器在确认时钟脉冲期间释放 SDA 线,因此接收器可以将 SDA 线拉低,并在该时钟脉冲的高电平期间保持稳定的低电平。还必须考虑建立和保持时间。

        当 SDA 在第 9 个时钟脉冲期间保持高电平时,这被定义为未确认信号。然后,主机可以生成一个停止条件来中止传输,或者生成一个重复的 START 条件来开始新的传输。有五个条件会导致 未确认信号(NACK) 的产生:

  1. 发送地址的总线上没有接收器,因此没有设备响应确认。
  2. 接收器无法接收或发送,因为它正在执行一些实时功能,还没有准备好开始与主设备的通信。
  3.  在传输过程中,接收方得到了它不理解的数据或命令。
  4. 在传输过程中,接收方不能再接收任何数据字节。
  5. 主接收器必须向从发送器发出传输结束信号。

5)时钟同步

        两个主机可以同时在空闲总线上开始传输,并且必须有一种方法来决定哪一个控制总线并完成其传输。 这是通过时钟同步和仲裁完成的。

        在单主系统中,不需要时钟同步和仲裁。

        使用 I2C 接口与 SCL 线的线与连接来执行时钟同步

        这意味着 SCL 线上的高电平到低电平转换会导致相关主设备开始对它们的低电平周期进行计数,并且一旦主时钟变为低电平,它就会将 SCL 线保持在该状态,直到达到时钟高电平状态。 但是,如果另一个时钟仍在其低电平周期内,则该时钟从低电平到高电平的转换可能不会改变 SCL 线的状态。 因此,SCL 线由具有最长低电平周期的主机保持低电平。 具有较短低电平周期的主机在此期间进入 高电平的等待状态。

        当所有相关的主机都计完它们的低电平周期时,时钟线被释放并变为高电平。 这样主时钟和 SCL 线的状态之间就没有区别了,所有的主时钟开始计数它们的高电平周期。 第一个完成其高电平周期的主机再次将 SCL 线拉低。 这样,一个同步的SCL时钟就产生了,它的低电平周期由时钟低电平周期最长的主机决定,高电平周期由时钟高电平周期最短的主机决定

6)仲裁

        仲裁与同步一样,是指仅当系统中使用多个主设备时才需要的协议的一部分。从设备不参与仲裁程序。 只有当总线空闲时,主机才可以开始传输。

        两个主设备可以在 START 条件的最小保持时间内生成一个 START 条件,从而在总线上产生一个有效的 START 条件。然后需要仲裁来确定哪个主机将完成其传输。

        仲裁是一位一位进行的。在每一位进行传输期间,当 SCL 为高电平时,每个主机都会检查 SDA 电平是否与其发送的电平相匹配。这个过程可能需要很多位。只要传输相同,两个主机实际上可以无误地完成整个事务。第一次主机尝试发送高电平,但检测到 SDA 电平为低电平时,主机知道它已失去仲裁并关闭其 SDA 输出驱动器。另一个主节点继续完成其事务。在仲裁过程中不会丢失任何信息。失去仲裁的主机可以生成时钟脉冲,直到失去仲裁的字节结束,并且必须在总线空闲时重新开始其事务。如果主机还包含从机功能并且在寻址阶段失去仲裁,则获胜的主机可能正在尝试对其进行寻址。因此,丢失的主设备必须立即切换到其从设备模式。

         由于 I2C 总线的控制完全取决于竞争主机发送的地址和数据,因此没有中央主机,也没有总线上的任何优先级顺序

7)读写控制

        在 START 条件 (S) 之后,发送从地址。 该地址有 7 位长,后跟第 8 位,即数据方向位 (R/W)——“0”表示传输 (WRITE),“1”表示请求数据 (READ)

         数据传输总是由主机产生的停止条件 (P) 终止。 但是,如果主机仍然希望在总线上进行通信,它可以生成重复的 START 条件 (Sr) 并寻址另一个从机,而无需首先生成 STOP 条件。 在这样的传输中,读/写格式的各种组合都是可能的。

2、 Ultra Fast-mode 协议

        UFm(Ultra Fast-mode) I2C 总线是一种 2 线串行总线,可在高至 5 MHz 的频率范围内单向传输数据。当速度大于 1 MHz 时,驱动 LED 控制器和其他不需要反馈的设备最为有用。

         UFm I2C 总线协议基于标准 I2C 总线协议,该协议由 START、从地址、命令位、第九个时钟和一个停止位组成。命令位仅为“写”,第 9 个时钟上的数据位被驱动为高电平,由于总线的单向特性而忽略 ACK 周期

        2 线驱动器由 UFm 串行时钟 (USCL) 和串行数据 (USDA) 组成。从设备包含一个唯一地址(无论是微控制器、LCD 驱动器、LED 控制器还是 GPO)并且仅作为接收器运行。 LED驱动器可能只是一个接收器,UFm可以支持,而存储器可以接收和传输数据,UFm不支持。 UFm I2C 总线也不支持多主机功能。在 UFm 中,主机是唯一在总线上启动数据传输并生成时钟信号以允许传输的设备。寻址的所有其他设备都被视为从设备

        其规范要求如下:

         USDA和USCL都是单向线路,当总线空闲时,两条线都被输出级的上晶体管拉其基本传输条件与标准模式一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ajax的简单介绍

响应主体,就是服务器给我们返回的结果内容(浏览器里的responsive) 请求主体,是我们给服务器的数据 输入域名发起一次请求,得到的可能是标签,标签可能还要在发一次请求 post怎么发请求:form表单 …

DM365 color space

YUV的几种格式 420P:420P数据的存放方式一般是先存放Y,然后存放U,最后存放V的数据,每一个像素使用12bits(1.5BYTE)保存。 422P:422P数据的存放方式也是先存放Y,然后存放U,最后存放V的数据&…

JavaScript 标准参考教程-阅读总结(三)

1、DOM模型 DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model)。它的作用是将网页转为一个 JavaScript 对象,从而可以用脚本进行各种操作(比如增删内容)。 1)do…

P1136 迎接仪式

P1136 迎接仪式 题目描述 LHX教主要来X市指导OI学习工作了。为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字。一旁的Orzer依次摆出“欢迎欢迎欢迎欢迎……”的大字,但是领队突然…

云服务器 VNC 远程连接

此服务器买来是为了搭建IC EDA云的,因此选用的是centOS 6的环境,对各EDA软件兼容较好。本人手头拮据,因此买的是腾讯云活动期间的云服务器,只能说够用吧。 一、桌面安装 在云服务器控制台登陆上远程主机,依次执行下列…

Python自动化测试框架有哪些?

作者 | KITTY GUPTA 译者 | 张健欣 令开发者万分高兴的是,开发自己的测试框架的日子终于结束了。以前,开发团队接手一个项目并开始开发时,除了项目模块的实际开发之外,他们不得不为这个项目构建一个自动化测试框架。一个测试框架应…

面试题——4种数组去重的方法

数组去重或者其衍生作为笔试题或者机试题出现的几率也是很大的,写出的方法越多,则让面试官觉得你思维越开阔,那么成功的几率当然就大了。 废话不多说,下面来说说下面我整理的4中数组去重的方法 方法一: findInArr方法s…

MFc消息映射机制理解

何谓消息、消息处理函数、消息映射?消息简单的说就是指通过输入设备向程序发出指令要执行某个操作。具体的某个操作是你的一系列代码。称为消息处理函数。在SDK中消息其实非常容易理解,当窗口建立后便会有一个函数(窗口处理函数)开…

Effective C++ 条款11:在operator=中处理自我赋值

”自我赋值”发生在对象被赋值给自己时: class Widget { ... }; Widget w; ... w w; // 赋值给自己 a[i] a[j]; // 潜在的自我赋值 *px *py; // 潜在的自我赋值class Base { ... }; class Derived: public Base { ... }; void doS…

Demosaic算法学习

一、概述 由于成本和面积等因素的限定,CMOS图像传感器在成像时,感光面阵列前通常会有CFA (color filter array),CFA过滤不同频段的光,因此,Sensor的输出的RAW数据信号包含了3个通道的信息。 CFA的排列方式一般有以下几种: 现在应用最广泛的是Bayer CFA。…

Sql Server中查询当天,最近三天,本周,本月,最近一个月,本季度的数据的sql语句...

--当天&#xff1a;select * from T_news where datediff(day,addtime,getdate())0--最近三天&#xff1a;select * from T_news where datediff(day,addtime,getdate())< 2 and datediff(day,addtime,getdate())> 0--本周&#xff1a;select * from T_news WHERE (DATEP…

linux设备驱动归纳总结(五):3.操作硬件——IO静态映射【转】

本文转载自&#xff1a;http://blog.chinaunix.net/uid-25014876-id-83299.html linux设备驱动归纳总结&#xff08;五&#xff09;&#xff1a;3.操作硬件——IO静态映射 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 有时候会觉…

UML中关联,聚合,组合的区别及C++实现

类间关系 在类图中&#xff0c;除了需要描述单独的类的名称、属性和操作外&#xff0c;我们还需要描述类之间的联系&#xff0c;因为没有类是单独存在的&#xff0c;它们通常需要和别的类协作&#xff0c;创造比单独工作更大的语义。在UML类图中&#xff0c;关系用类框之间的连…

sql server management studio 快速折叠object explorer中的instance

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/6e20fa7a-c0a9-496b-89b2-19c6bd996ffc/how-to-collapse-object-explorer-tree-in-management-studio?forumsqltools home键&#xff0c;回到top level。 然后F5刷新&#xff0c;就会自动折叠了转载于:https://www.…

自动白平衡算法学习

一、概述 1、颜色恒常性 首先,从色彩学的角度,自然界中的任一种颜色都可以用红、绿、蓝三种颜色混合而成,因此这三种颜色被做为最常用的三原色,即RGB 三原色。 其次,眼睛对于色彩的察觉是由于光照射在物体之上,物体会吸收一部分波长的光,而其被物体反射的那部分波长的光…

自动曝光算法学习

一、概述 在一个完整的成像系统中,所得图像的亮度由四个方面因素所决定:环境光照强度、相机的光圈大小、曝光时间、信号增益。从这四个因素可以看出,首先环境光照强度是由外界环境光照所决定的,达不到人为任意控制;因此想要调整图像亮度至合适的程度,需要考虑对光圈大小、…

cocos2d-x 帧动画

ani cc.Animation:create(); ...... local animate cc.Animate:create(ani); s:runAction(animate); 发现一个问题&#xff0c;s如果是Node实例话就报错了&#xff0c;s必须是Sprite实例。转载于:https://www.cnblogs.com/qianwang/p/6249720.html

编写一个简单的spring MVC程序

一、下载和安装spring框架 进入http://repo.springsource.org/libs-release-local/org/springframework/spring/4.2.0.RELEASE/下载一个spring框架&#xff0c;然后打开lib目录里的jar文件拷贝到项目的WEB-INF/lib目录下。 二、配置web.xml文件 ?1234567891011121314151617181…

DM368 Uboot

这三个参数均有UBOOT直接传递给内核&#xff0c;所以要想知道他们具体的作用&#xff0c;需要根系内核模块的结构。 dm365_imp.oper_mode 是指在内核模块中内存空间采用连续、或者不连续模式。 davinci_capture.device_type 是你的捕获设备的…

7. B+树

一、B树是应文件系统所需而产生的一种B树的变形树 1. 定义&#xff08;使用阶数m来定义&#xff09; 除了根结点外&#xff0c;其他非终端结点最多有m个关键字&#xff0c;最少有⌈m/2⌉个关键字结点中的每个关键字对应一个子树所有的非终端结点可以看成是索引部分&#xff0c;…