当前位置: 首页 > 原理解释

i2c工作原理-简单理解 i2c 原理

人们总当作电子通信是两条线就能通天的,但在现实世界里,特别是那种需求成千上万个设备挤在一起要么电压只有 3 伏特的时候,两根线绝对不够用。
这时候大家就会用一种叫 I2C 的协议。
这东西最早是 80 年代末拿出来的,当时主要是为了连片儿,像单片机要么传感器,它们本来不想当服务器,也不想连忒复杂的网络,只想找个便宜的路子把数据传那会儿。 从物理层来看,I2C 最牛的地方在于它的灵活性。你只需求一根数据线叫 SDA,一根叫 SCL,只要这两个能对上,事件就搞定了。想象一下你在家里堆一堆薯片拆盒子,每条薯片上只印了一个小图标,说这是土豆,下一个是洋葱,再下一个是胡萝卜。你只需求往薯盒里装土豆、洋葱、胡萝卜、薯条,然后按一下盒子上的键。
这时候你分不清哪个是土豆,哪个是洋葱,是不是得看哪位在动?
要么你直接把薯片撕开,用专用刀具去挖,那多费事? I2C 的原理实际上就是给这些薯片加了一个特殊的标签。
这个标签就是线上的电压。当两个设备想聊天,它们得先握手。
这两个设备本来就是串在一起的,一根线 SDA 像个电话线,另一根线 SCL 像个信号形成器。当它们一握手,SDA 这根线上就压上了高电平,SDCL 就压上了低电平。
这时候,SDA 线和 SCL 线就正式“接上了”。啥时候断开,SDA 又变回高电平,SDCL 又变低电平,这就叫握手终止。 这时候再传数据,SDA 上就有了一片连续的 1 序列要么 0 序列,就像一串连续的数字。当 SCL 变低的时候,SDA 上要是有变化,那就是 0,没变化那就是 1。跑数人(跑数就是这个过程)只要顺着数序列数一下,就能知道哪位跟哪位在讲话。 假设你手里有两个设备,Device A 和 Device B,它们想换数据。Device A 说:“你好,我是 A,请发个 1 过来。”便它把 SDA 线上的电位拉高,变成 1。
这时候 Device B 收到这个信号,它得赶紧回一句:“收到,我是 B,我也发个 1 给你。”Device B 把 SDA 拉高,SDCL 变低,然后启动发送。Device A 收到这个 1,它知道对方也有这个念头,便自己也把 SDA 拉高,再发一个 1。
这样一拉一拉,SDA 上就变成了一串 111111111111111,这就是数据流。 当 Device A 确实想发“你好”这句话的时候,它就把 SDA 线拉低,变成 0。Device B 收到这个 0,它知道:“哦,对方想发零,那我得发个 1 来打招呼。”Device B 又拉高 SDA,SDCL 变低,启动发 111111111111111。Device A 收到 1,它也回 111111111111111。
就这样,数据在 SDA 和 SCL 之间来回跑,直到有人想断开,SDA 又变回高电平。 自然,这种两线通信有个大难题,就是数据好办被干扰。想象一下你在高速公路上开车,两边都是时速 100 公里的车,你略微一伸手,对面那辆车可能就被你推偏了,要么你手抖了一下,前面那辆车也跟着歪了。I2C 协议里有个叫总线仲裁的机制,就是为了防止大家互相打架。 当两个设备都想讲话的时候,它们都得听一个裁判。
这个裁判就是 Watchdog 芯片。Watchdog 是个小东西,平时它手里有一个计数器,数着工夫。计数器数到 64 的时候,它就发出一个信号:“停!哪位想讲话,得给我个机会。”这时候,所有想买话的设备都得停下。它会通过几个引脚把管住权交给其中一个设备,比如把 SCL 线往上一拉,给某个设备机会。
要是那个设备不回应,要么在规定的工夫内没讲话,Watchdog 就会再次把 SCL 拉低,给下一个设备机会。 这个过程实际上有点像排队买票。你先买一张票,然后等旁边的人,要么等轮到你了。
要是旁边的人想占你的票,他得听裁判的。裁判一喊停,你就不能再买了,务必等裁判喊了才买。 为了更直观地理解,我们来看个例子。假设你要用 I2C 连一个温度传感器和一个时钟形成器。时钟形成器是那个每秒跳一下的小玩意儿,温度传感器是那个一直在变温的。它们都想和主控芯片讲话,但它们本来不是一伙的,故此得用 Watchdog 当裁判。 数据形成器(比如一个 16 位计数器)发出 1101111101110111 这几个比特。它想告诉主控芯片:“这里有个新的温度值。”便它把 SDA 拉低,SDCL 变低,启动发送。温度传感器收到这个信号后,它心想:“哦,我收到新数据了,我把 SDA 拉高,然后发个 1101111101110111 回来。”这时候,数据流就变成了 1101111101110111 和 1101111101110111,在 SDA 线上来回跳动。 主控芯片收到后,它清楚地知道:“那边刚发过 0,那边刚刚发过 1,说明那边确实有东西想跟我讲话,并且我收到的是对的数据。”故此主控芯片就立马把 SCL 往上一拉,预备好接收。温度传感器收到这个信号,就心想:“不错,我收到了,我也得发个 1 回来。”便温度传感器把 SCL 拉低,SDCL 变低,再启动发数据。 主控芯片收到温度传感器发回来的 1,它就明白:“那边又发来数据了。”故此主控芯片又拉高 SCL,预备接收下一批。 在这个过程中,Watchdog 一直在巡逻。当温度传感器和主控芯片都没讲话的时候,Watchdog 数数数到了 64,它就会把 SCL 拉高,给时钟形成器机会。时钟形成器回应了,把 SCL 拉低。数据形成器也回应了。
这时候,数据形成器启动发新的数据:“温度还是 25 度,还是那个温度。”这回数据流就变成了 1101111101110111 和 25 度,然后又往回传。 这个过程一直重复下去,直到有人想断开连接。
比如温度传感器不想再持续传数据了,它把 SDA 拉高,SDCL 变低,然后切断电源,要么拔掉线。
这时候,SCL 的信号就被切断了。主控芯片收到 SCL 变低,就知道那边已经断了,它就把 SCL 拉回原样,保持待机状态。整个链路就死了。 实际上,这种两线通信之故此能跑通如此久,是出于它本质上就是一个有状态的握手过程。数据不是凭空蹦出来的,是在双方确认“我要讲话”之后,通过电平的变化像传送带一样传那会儿的。并且,它还有一个优点,就是地址。别看它不是那种带地址的总线,但它能够通过时钟周期来模拟地址,要么在握手时发现对方有特殊的响应,进而识别出对方是哪位。
不过对于好办的设备,一般不写地址,只要拉高低电平要么拉高电平就行。 最终总结一下,I2C 就是如此个东西。它不需求复杂的芯片驱动,也不需求复杂的协议握手,只用两根线和一点点电平管住,就能让成千上万个设备在一条线上挤在一起讲话。它像一个有着严格守规矩的微型超市,别看规则好办,但买卖双方得互相确认,并且一旦有人想买货,得听裁判的叫号,不然别想挤那会儿。
这种设计让它在低功耗、短距离的场合变得异常好用,比如大量家电的管住电路里,要么手机里那些不起眼的接口连接。
相关标签:

猜你喜欢

热门阅读

  • 赖柴尔定理-赖柴尔定理
  • 迪拜哪个国家的城市?-迪拜在哪国城市
  • 李毅吧番号及出处-李毅吧番号及出处
  • 贴春联的由来简介50字-春联由来简述
  • 思乡的名言和出处-思乡名言及出处

其他分站