0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

I2C通信介绍及软测方法

硬件设计解析 来源:爱搞研究的阿灿 作者:爱搞研究的阿灿 2023-04-17 16:35 次阅读

一、I2C总线的介绍

  I2C是一种非常常见的通信协议,是philips公司提出的,由数据线SDA和时钟线SCL两条双向信号线组成,CPU利用串行时钟线发出时钟信号,利用串行数据线发送或者接受数据。SDA线传输数据是大端传输(字节高位先传),每次传输8bit,即1字节。支持多主控,任何时间点只能有一个主控。每个连接到总线的设备都有一个独立的地址addr,共7个bit,主机正是利用该地址对设备进行访问(这是I2C和SPI最大的不同点之一,I2C对从设备进行操作需要知道从设备地址,然后进行寻址;而SPI则不需要通过设备地址寻址)。
  当总线空闲的时候,SDA和SCL都是高电平。在数据传输过程中,SCL为高电平的时候,SDA线必须保持稳定,SDA上传输1个bit数据;当SCL为低电平的时候,SDA线才可以改变电平。简言之,只有当SCL为高电平时,SDA的数据才有意义。

5ad07028-da9f-11ed-a826-dac502259ad0.png


  开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。起始信号由主控制器产生。
  结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。结束信号也只能由主控制器产生。
  (记忆窍门:因为总线空闲时两根线都是高电平,所以开始信号是由高电平变为低电平;而结束信号是要回到总线空闲的状态,所以是从低电平变为高电平)

5add7f98-da9f-11ed-a826-dac502259ad0.png


  发送到SDA线上的每个字节必须是8位,每次传输可以发送的字节数量不受限制,每个字节后必须跟一个ACK应答位,数据从最高有效位(MSB)开始传输。
  主机每发送完8bit数据后等待从机ACK。即在第9个clock,若从机发回ACK,SDA会被拉低。若没有ACK,SDA会被置高,这会引起主控发生RESTART或STOP流程。根据近期实际开发经验,主机在第一次寻址失败后,会再次寻址,如果两次都失败,那么SDA就会把电平拉高(同时SCL处于高电平状态),结束通信。

5ae290fa-da9f-11ed-a826-dac502259ad0.png


  I2C总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。(无论是发送地址还是数据,其后都紧跟着一个ACK/NACK。ACK和NACK由slave提供。)
  如果从机要在完成一些其他功能之后才能接收或发送下一个完整的数据字节,则可以使时钟线SCL 保持低电平,从而迫使主机进入等待状态。当从机准备好接收下一个数据字节,并且释放时钟线SCL 后,数据传输继续。
  当主控器接收数据时,在最后一个数据字节,必须发送一个非应答信号(NACK),使受控器释放数据线,以便主控器产生一个停止信号来终止总线的数据传送。
  在起始信号结束后,发送一个7bit的从设备地址,然后紧跟着读写标志位(“0”表示写,“1”表示读)。如果从设备有回应,就可以继续读写数据,具体读写哪个寄存器也要有所说明。

5ae83d7a-da9f-11ed-a826-dac502259ad0.png

二、逻辑分析仪抓取总线波形

  在实际工作中可以使用逻辑分析仪抓取I2C总线的波形进行排故。

5b0102a6-da9f-11ed-a826-dac502259ad0.png


  由于我手上只有杜邦线,缺少逻辑分析仪专用的数据线(一头带夹子,如下图所示),没有办法在连接外设的同时抓取波形,所以此处只能简单抓取主设寻址外设的波形。
  抓取波形使用的软件是USBee Suite,如下图所示:

5b29e13a-da9f-11ed-a826-dac502259ad0.png


5b3368fe-da9f-11ed-a826-dac502259ad0.png


  快速设置信号4,5为I2C总线,这种设置方法也决定了硬件上的连接。

5b47ec84-da9f-11ed-a826-dac502259ad0.png


  设置采样率和样本数如图所示:

5b5ecec2-da9f-11ed-a826-dac502259ad0.png


  设置下降沿触发(倒数第3个信号通道,软件上标注的SDA和SCL并不是实际上的SDA和SCL,这是一个软件BUG,根据波形来判断,有规律的进行跳变的就是SCL, 另外一个是SDA.):

5b74d7d0-da9f-11ed-a826-dac502259ad0.png


  使用单次触发方式捕获波形:

5b991de8-da9f-11ed-a826-dac502259ad0.png


  实际捕获到的波形如下图所示:

5bb2197e-da9f-11ed-a826-dac502259ad0.png


5bc2a190-da9f-11ed-a826-dac502259ad0.png


  根据波形可以看出,GM5主设两次寻址地址为0X22的从设备,但是没有收到从设备的回应(NACK),最终主设停止了本次通信。


原文标题:二、逻辑分析仪抓取总线波形

文章出处:【微信公众号:爱搞研究的阿灿】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 网络通信
    +关注

    关注

    4

    文章

    786

    浏览量

    29755
  • I2C总线
    +关注

    关注

    8

    文章

    388

    浏览量

    60824
  • 逻辑分析仪
    +关注

    关注

    3

    文章

    214

    浏览量

    23136
  • I2C通信
    +关注

    关注

    0

    文章

    22

    浏览量

    8806
收藏 人收藏

    评论

    相关推荐

    i2c总线介绍

    I2C介绍   I2C总线是两线式串行总线。    I2C总线最主要的优点是其简单性和有效性,支持多主控(multimastering)。&nb
    发表于 08-13 17:29 0次下载

    HT45R37使用I2C进行数据传输的方法 (C语言)

    HT45R37使用I2C进行数据传输的方法 (C语言)HT45R37 提供SIM 串行传输功能,分别是SPI 功能和I2C 功能,本文介绍H
    发表于 03-27 08:36 12次下载

    HT56R678使用I2C进行数据传输的方法

    HT56R678使用I2C进行数据传输的方法 HT56R678 内建有SIM 功能,其中包括了SPI 和I2C 两种通信接口,本文以HT56R678 为母体,
    发表于 03-27 09:25 16次下载

    HT56R678使用I2C进行数据传输的方法

    HT56R678使用I2C进行数据传输的方法HT56R678 内建有SIM 功能,其中包括了SPI 和I2C 两种通信接口,本文以HT56R678 为母体,
    发表于 03-28 22:39 7次下载

    模拟I2C总线多主节点通信原理及实现方法

    摘要 介绍模拟I2C总线的多主节点通信原理,并提出一种新的实现方法。这种采用延时接收比较来实现仲裁的方法,可使不具有
    发表于 06-18 17:57 5531次阅读
    模拟<b class='flag-5'>I2C</b>总线多主节点<b class='flag-5'>通信</b>原理及实现<b class='flag-5'>方法</b>

    labview与i2c通信的编程问题

    labview与i2c通信的编程问题,适合新手看看
    发表于 12-09 15:49 205次下载

    I2C总线的结构介绍

    内容摘要:介绍I2C总线的结构、工作原理、数据传输方式,讨论了基于I2C总线的多机通信软硬件设计,实现了程控交换多机通信调度指挥系统。
    发表于 02-29 15:44 6次下载

    STM32F2通信接口I2C

    STM32F2通信接口I2C
    发表于 09-03 11:24 31次下载
    STM32F<b class='flag-5'>2</b>—<b class='flag-5'>通信</b>接口<b class='flag-5'>I2C</b>

    I2C通信协议应该如何学习

    我最近刚做完I2C通信协议的编写与调试,下面介绍一下我从一开始理解夏老师的程序,修改程序,直到下板调试整个的学习过程,希望对大家学习 I2C 有一定的帮助。一、 分析源代码学习
    发表于 04-28 08:00 21次下载
    <b class='flag-5'>I2C</b><b class='flag-5'>通信</b>协议应该如何学习

    I2C总线的基本通信总结

    在电子设计开发中I2C大家已经很熟悉了,每一种电子产品小到电子开关,大到卫星通信都会利用的I2C总线。据统计I2C在电子产品中占据了93%的份额,几乎任何一种电路都要使用。
    的头像 发表于 08-26 14:08 1.8w次阅读
    <b class='flag-5'>I2C</b>总线的基本<b class='flag-5'>通信</b>总结

    硬件I2C与模拟I2C

    硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C;一般也较为稳定,但
    发表于 12-28 19:14 81次下载
    硬件<b class='flag-5'>I2C</b>与模拟<b class='flag-5'>I2C</b>

    AN036 基于EEPROM通信I2C总线锁死解决方法

    AN036 基于EEPROM通信I2C总线锁死解决方法
    发表于 02-23 19:09 0次下载
    AN036 基于EEPROM<b class='flag-5'>通信</b>的<b class='flag-5'>I2C</b>总线锁死解决<b class='flag-5'>方法</b>

    I2C通信协议:了解I2C Primer、 PMBus和SMBus

    I2C,即Inter-Integrated Circuit,是一种常用的串行通信协议,用于在器件之间——特别是两个或两个以上不同电路之间建立通信I2C Primer是最常用的
    的头像 发表于 06-15 15:29 5449次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>通信</b>协议:了解<b class='flag-5'>I2C</b> Primer、 PMBus和SMBus

    I2C控制器驱动介绍

    适配器与 I2C 设备进行通信方法I2C 总线驱动,或者说 I2C 适配器驱动的主要工作就是初始化
    的头像 发表于 07-22 15:38 1418次阅读
    <b class='flag-5'>I2C</b>控制器驱动<b class='flag-5'>介绍</b>

    UART、SPI、I2C比较 串口通信介绍

    UART、SPI、I2C比较 I2C线更少,比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,抗干扰能力较弱,一般用于同一板卡上芯片之间的
    的头像 发表于 11-09 18:06 1308次阅读
    UART、SPI、<b class='flag-5'>I2C</b>比较 串口<b class='flag-5'>通信</b><b class='flag-5'>介绍</b>