IIC协议详解

2023-05-16

文章目录

    • 1 IIC简介
    • 2 IIC物理层
      • 2.1 IIC硬件
      • 2.2 IIC协议特点
    • 3 IIC协议层
    • 4数据传输
      • 4.1 IIC写数据
      • 4.2 IIC读数据
    • 5 信号分析

1 IIC简介

  IIC(Inter-Integrated Circuit)总线是一种由 NXP(原 PHILIPS)公司开发的两线式串行总线, 用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合 使用,传输距离短,任意时刻只能有一个主机等特性。
   在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。
  PS: 这里要注意 IIC 是为了与低速设备通信而发明的,所以 IIC 的传输速率比不上 SPI。
图1
             图1 IIC总线物理拓扑图

2 IIC物理层

2.1 IIC硬件

  IIC有两条总线,一条双向的串行数据线SDA,一条串行时钟线SCL。
  SDA(Serial data):串行数据线,用来传送数据;
  SCL(Serial clock line):时钟线,用来控制数据发送的时序。
  所有接到IIC总线上的设备的SDA线都接到总线的SDA上,各设备的时钟线SCL都接到总线的SCL上。IIC总线上的每一个设备都有一个唯一的地址,以确保不同设备之间的访问互不干扰。

2.2 IIC协议特点

  • IIC主设备(master):主要产生时钟,产生起始和结束信号;
  • IIC从设备(slave):可编程的IIC地址检测,停止位检测等;
  • 支持不同的通信速率(100KHz~400KHz);
  • SCL和SDA都需要接上拉电阻 (大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰;
  • IIC是半双工,而不是全双工,同一时间只可以单向通信。

物理层小结
  I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,SCL和SDA被上拉电阻Rp拉高,使SDA和SCL线都保持高电平。
  I2C通信方式为半双工,只有一根SDA线,同一时间只可以单向通信,SPI和uart通信为全双工。

3 IIC协议层

  • 开始信号(Start): SCL为高电平时,SDA由高电平向低电平跳变,标志着开始传输数据;

  • 结束信号(Stop): SCL为高电平时,SDA由低电平向高电平跳变,标志着结束传输数据;
    在这里插入图片描述
              图2 Start和Stop信号

  • 应答信号(ACK/NACK): 所有地址和数据都以8bit为单位传输,如果接受端正确接收了8bit数据,则回复一个bit的“0”信号——ACK信号,如果未正确接收8bit数据,或者接收端不再接受数据,则回复一个bit的“1”信号——NACK信号。即每8bit数据,就会跟1bit ACK/NACK信号。
    在这里插入图片描述
                     图3 ACK信号

  • 数据有效性: IIC信号在传输过程中,当SCL为高电平(SCL=1)时,数据线SDA必须保持稳定状态,不允许有电平跳变。只有当SCL处于低电平期间,SDA的高、低电平才可以交替变化。也就是说发送数据时,bit数据“0”和“1”的交替是发生在SCL的低电平期间。
    在这里插入图片描述

                    图4 IIC bit有效性

4数据传输

4.1 IIC写数据

在这里插入图片描述

                图5 IIC 写(发送)数据格式

字段解析
  Start: 数据传输的开始信号,由主机产生;
  Device address: 标识从设备的地址,bit7~bit1;
  R/W: W(write)为主机向从机写数据,R(read)为主机向从机读数据,bit0;
  ACK: 主机读数据时,从机做接收,由从机产生ACK信号;
  Word Address: Slave设备内部的数据地址,即主机要往从机的这个地址写数据,上图中Word Address只体现了一个字节,实际上可以有多个字节。如访问8K bytes的 eeprom,就需要2个字节的Word Address来寻址;
  Data: 发送的数据,以字节为单位,每8bit数据,从设备回一个ACK信号;
  Stop: 数据传输的结束信号,由主机产生。

主机向从机写(发送)数据流程:
  1.主机首先产生START信号;
  2.然后紧跟着发送一个从机地址,这个地址共有7位,紧接着的第8位是数据方向位(R/W),
   0表示主机发送数据(写),1表示主机接收数据(读);
  3.主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同,
    主机则认为自己正在被主机寻址,根据R/W位将自己确定为发送器和接收器;
   (注:不要把发送器/接收器主设备/从设备混淆,当主设备向从设备写数据的时候,主设备做发送器,
   从设备做接收器;当主设备向从设备读数据的时候,主设备做接收器,从设备做发射器)
  4.这时候主机等待从机的应答信号(ACK);
  5.当主机收到应答信号时,发送要访问从机的哪个地址, 继续等待从机的应答信号;
  6.当主机收到应答信号时,发送N个字节的数据,继续等待从机的N次应答信号;
  7.主机产生停止信号,结束传送过程。

4.2 IIC读数据

在这里插入图片描述

                图6 IIC 读(接收)数据格式

字段解析:
  Start: 数据传输的开始信号,由主机产生;
  Device address: 标识从设备的地址,bit7~bit1;
  R/W: W(write)为主机向从机写数据,R(read)为主机向从机读数据,bit0;
  ACK: 正式接收数据后的ACK信号由主机产生。Data传输前的ACK信号由从机产生,因为Data传输前都是
     主机在给从机“写”数据;
  Word Address: Slave设备内部的数据地址,即主机要往从机的这个地址数据,上图中Word Address只体现了一个字节,实际上可以有多个字节。如访问8K bytes的 eeprom,就需要2个字节的Word Address来寻址;
  RS: restart信号,表现形式和start信号完全一样。只是在读的过程中,再次触发了一次start信号,所以我们称之为restart;
  Data: 接收的数据,以字节为单位,每8bit数据,主设备(接收器)回一个ACK信号;
  NACK: 当主机读完指定长度的数据时,会在最后一个byte接收完成后,产生一个NACK信号;
  Stop: 数据传输的结束信号,由主机产生。

主机向从机读(接收)数据流程:
  主机向从机读数据实际上分了两个步骤,一是把需要希望从从机的哪个地址(Word Address)读数据,通过“写”(W)的方式告诉从机;然后再次发送读(R)信号,这时从机才开始给主机发送信号。
1.主机首先产生START信号;
2.然后紧跟着发送一个从机地址,注意此时该地址的R/W位为0,表明是向从机写命令,
 通知从机,主机要读的地址;
3.这时候主机等待从机的应答信号(ACK);
4.当主机收到应答信号时,发送要访问的地址,继续等待从机的应答信号;
5.当主机收到应答信号后,主机要改变通信模式(主机将由发送变为接收,从机将由接收变
 为发送)所以主机重新发送一个开始start信号,然后紧跟着发送一个从机地址,注意此时该地址的R/W位为1,表明将
 主机设置成接收模式开始读取数据;
6.这时候主机等待从机的应答信号,当主机收到应答信号时,就可以接收n个字节的数据,
当接收完成后,主机发送非应答信号(NACK),表示不再接收数据;
7.主机进而产生停止信号,结束传送过程。

5 信号分析

通过使用iic读写eeprom用逻辑分析仪抓信号并分析。
1. iic写数据
  通过iic往eeprom的0x0100地址写两个字节的数据,数据为“0x66 0x55”.使用的是16K byte的eeprom,字节的寻址范围为:0~0x3fff,所以word address有两个字节。
在这里插入图片描述
                 图7 iic读数据信号抓包

  下图为eeprom厂家的datasheet里面提供的 “Device address”说明,eeprom厂家规定读写数据区域的地址bit7~ bit4为1010,可配置bit为bit3~bit1,也就是说一个iic总线上最多可挂8个eeprom。
注:bit7~bit4的特殊约定,只是eeprom厂家做的功能限制,并不是iic协议的限制。
在这里插入图片描述
                  图8 eeprom地址表

我们把图7中的数据包放大来看,如下图:
在这里插入图片描述
                图9 Device address & R/W字节分析

  从上图中可以清楚的看到,SDA的数据信号在SCL的高电平脉冲期间保持稳定,在SCL的低电平脉冲期间进行bit数据“0”和“1”的切换。

2、iic读数据
  通过iic从eeprom的0x0100地址读取两个字节。
在这里插入图片描述
                图10 iic读数据信号抓包

  从上图中,可以看到iic读过程一共发起了两个start信号,第一个start信号(图中第1个绿色圆点处),SDA上发送了Device address & Write字节以及word address, 第二个start信号(图中第2个绿色圆点处),发送了Device address & Read字节,然后就开始接收数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IIC协议详解 的相关文章

  • Python3 logging详解

    Python3中logging详解 官方文档中 xff0c logging的5个层级 xff1a 实例代码 xff1a def logs time prov type log name 61 prov 43 39 39 43 time fi
  • python3爬虫 链接+表格+图片 思路

    左侧部门列表每点击一次都有一个新的js网页出现 xff0c Request URL可以明确看出网址 xff0c 且每个网址都有其规律 xff1a 点击了三个部门 xff0c 返回的网址如下 xff0c 可以看出是有规律的 xff0c 此处d
  • 跟我一起学MongoDB之——可视化工具Compass的简单使用

    首先官方为大家介绍了一下MongoDB Compass的主要功能 xff1a 1 对数据的可视化 2 插入 修改 删除 3 调试 优化 进入Compass首先出现连接界面如下 xff08 此处我使用的是我操作时候的界面状态 xff09 直接
  • sqluldr2 报错ora-24345: A Truncation or null fetch error occurred

    source etc profile source root bash profile unset NLS LANG sqluldr2 user 61 sjgj sjgj 64 10 254 4 196 1521 client query
  • 车牌号校验正则表达式

    一 车牌号校验规则 1 常规车牌号 xff1a 仅允许以汉字开头 xff0c 后面可录入六个字符 xff0c 由大写英文字母和阿拉伯数字组成 如 xff1a 粤B12345 2 武警车牌 xff1a 允许前两位为大写英文字母 xff0c 后
  • 日语学习资料汇总(可下载)

    直播课程推荐 xff1a 妞妞 大家的日语 侧重考级 天易外语 旧版 标准日本语 娜娜 日语讲堂 津波老师 新版标准日本语 爱知 实用日语口语 在直播课程有预告http www fairage com total jsp type 61 1
  • 成熟男人与24岁女孩精彩对白(转)

    烛光晚餐 桌两边 xff0c 坐了男人和女人 我喜欢你 女人一边摆弄着手里的酒杯 xff0c 一边淡淡的说着 我有老婆 男人摸着自己的手上的戒指 我不在乎 xff0c 我只想知道 xff0c 你的感觉 你 xff0c 喜欢我嘛 xff1f
  • jsessionid的困扰

    问题 xff1a 向某银行发送支付请求时 xff0c 如果客户端cookie开启 xff0c 第一次请求时 xff0c 请求地址会自动增加一jsessionid 第二次没有问题 如果客户端cookie关闭 xff0c 无论如何请求地址会自动
  • 2级基本编程问题(—)(C++)

    问题 xff08 1 xff09 时间转换 问题描述 xff1a 给定一个从0秒开始计时的秒数 xff0c 请将其转换为X X X的格式 输入 xff1a 输入一个秒数n xff0c 且这个秒数0 n 86400 输出 xff1a 输出这个
  • 报错<BEA-101017> error:java.net.SocketException解决

    最近项目登录不了 xff0c 报错为 xff1a lt BEA 101017 gt error java net SocketException Connection reset by peer socket write error 最后问
  • 专业IT管理人才必备十大能力

    IT168 技术文章 作为IT技术人员 xff0c 相信没有一个人愿意永远在底层编写程序或做简单的系统维护 经过一段时间的技术和经验的积累 xff0c 很多人都向往更高层的职位 xff0c 但如何能成为一个专业的IT管理人才 xff0c 并
  • Modbus超时时间设置

    很多同学在做Modbus通讯时 xff0c 需要连续读取多个现场设备的数据 xff0c 虽然也编写了Modbus轮询的程序 xff0c 但是有时还是无法正常通讯 有时虽然能够保证通讯 xff0c 但是所有现场设备的轮询周期很长 本文将从MB
  • Modbus测试工具(Modbus Master调试工具)

    Modbus Poll是Modbus主设备模拟工具 xff0c 帮助Modbus通讯设备开发人员进行Modbus通讯协议的模拟和测试 xff0c 用于监控 测试 调试Modbus通讯设备 可以多个窗口中同时监控多个Modbus子设备 xff
  • 如何移除Googleads.g.doubleclick.net 病毒

    Related Symptoms about Googleads g doubleclick net Googleads g doubleclick net is very tricky and stubborn redirect viru
  • confluence 下admin用户密码恢复方法

    搭建了一个confluence平台 xff0c 日子久了 xff0c 管理员admin密码居然忘记了 以下恢复方法 xff1a 1 运行此sql 找到你的管理员帐户 xff1a select u id u user name u activ
  • guava 常用用法

    根据 指定大小对 一个大的list拆分成固定size的较小 list Lists partition list n List lt Foo gt foos 61 for List lt Foo gt partition Lists part
  • azkaban plugin在cdh cloudera环境下的配置之 HDFS插件

    安装HDFS插件 1 配置Hadoop环境变量 xff0c 在 etc profile文件末尾增加如下配置 xff1a span class token keyword style color 0077aa export span HADO
  • azkaban plugin在cdh cloudera环境下的配置之 jobtype插件

    复制编译后的jobtype到exec服务的插件下 xff0c cp dist jobtype packages azkaban jobtype span class hljs variable style color efdcbc git
  • ProxmoxVE安装及Ceph存储配置

    一 系统安装 1 选择agree 2 磁盘选择好之后就点击next 3 国家选择china 4设置密码 mail随便写 5 命名以及ip设置 6 等待安装完了之后又个reboot点击就好 此处不贴图了 至此系统安装已完成 二 系统配置 1
  • Mybatis常见面试题总结

    1 什么是Mybatis xff1f xff08 1 xff09 Mybatis是一个半ORM xff08 对象关系映射 xff09 框架 xff0c 它内部封装了JDBC xff0c 加载驱动 创建连接 创建statement等繁杂的过程

随机推荐