搜索
bottom↓
回复: 1

嵌入式工程师必备技能--如何使用示波器查看IIC波形

[复制链接]

出0入234汤圆

发表于 2021-11-17 16:55:52 | 显示全部楼层 |阅读模式
本帖最后由 正点原子 于 2022-1-7 17:35 编辑

以下文章来源于:公众号:开源电子网,读取更多技术文章,请扫码关注




如何使用示波器查看IIC波形


前言

      这篇文章着重点是让大家学会使用示波器查看IIC波形,并且说明在搞IIC驱动中,大家比较容易犯的错误点。关于IIC驱动源码,这里不过多描述,以精英版IIC实验例程为基础。示波器使用正点原子大神DS100作为测试。

        [/url]
                                                     (点击图片观看视频)


                                             DS100示波器视频介绍



购买链接【复制到浏览器打开】

[url=https://detail.tmall.com/item.htm?id=632834963710]https://detail.tmall.com/item.htm?id=632834963710


淘宝搜索:正点原子旗舰店 即可进店购买



一.测试场景


    实物连接图如下:

      

    (通道A连接到PB6即IIC_SCL上,通道B连接到PB7即IIC_SDA上)

      DS100示波器操作按键示意图如下图所示:

         


       通过选择滚轮和调整滚轮,把右侧参数调整,如下图所示:

         


这里主要做的工作:

       ① 双通道即通道A和通道B(通过耦合方式进行开启)
       ② 垂直档位2V
       (这里需要查看探头档位并在示波器上探头调整为X1即可)
       ③ 档位调整为100us即可,对于IIC通信可以了
       ④ 阈值不能调太高
       ⑤把触发方式改为单次

       把例程代码修改一下,写入数据为1个字符‘A’:
  1. <font size="4">//要写入到24c02的字符串数组</font>
  2. <font size="4">const u8 TEXT_Buffer[] = {"A"};</font>
复制代码

        在地址10处写入/读写一个字符数据,代码修改如下:
  1. <font size="4">   AT24CXX_Write(10, (u8 *)TEXT_Buffer, SIZE);</font>

  2. <font size="4">   AT24CXX_Read(10, datatemp, SIZE);</font>
复制代码

         编译下载进开发板。例程的操作是按下按键1就是写入数据,按下按键0就是读取数据。



二.分析波形


      这里我们以AT24C02写时序为例子进行分析,回顾一下。

         


       整个写操作过程如下:
       起始信号à地址和方向à应答信号à内存地址à应答信号à数据内容à应答信号à停止信号

       由于前面已经将触发方式改为单次,所以通过按下按键1即是写入操作,获得波形图。

         

       这时候,我们已经把整个写操作时序获取到,这样看肯定不清楚,所以我们可以通过时间档位进行放大。时间档位变为10us并通过水平偏移操作,放大波形如下:

         

       通过波形图,你会发现:

       S就是经典的起始信号,当SCL线为高电平的时候,SDA从高电平往低电平跳变

       发送起始信号之后便是地址和方向组合的一个字节数据,这里就是0xA0。0xA0的由来可以查看一下IIC实验教程。

       (重点)第九个时钟脉冲高电平期间便是检测应答信号,这里也是检测IIC有没有通信成功的地方。假如看到波形是有低电平,那么就证明从机应答了,否则就是没有应答,这时候你就需要检查第一个字节是不是应该发0xA0。

       图中第九个时钟脉冲后,SDA线出现绿色的小尖峰是由于从机发送完应答信号后,会释放SDA线,把总线的主动权交还给主机。这是正常现象。

       现在继续往后分析波形,通过水平偏移,把波形图整体往左移,如下:

         

       这里传输的便是内存地址,前面也提到为地址10处,0xA0即为10,这里与你发送的是一致的内容,并且后面也能接收到从机返回的应答信号。

       继续通过水平偏移,查看剩下的波形内容。

         

       这里传输的就是数据内容,通过波形分析,传输的数据为0x41。‘A’的ASCII码值就是0x41,发送与实际一致。随后便是从机的应答信号,低电平表示应答,最后便是经典的P停止信号,在SCL线为高电平的时候,数据线从低电平往高电平跳变。

       以上就是分析IIC波形图的过程。

       导致IIC通信异常或者失败的原因有:
       ① IIC_SDA和IIC_SCL没有接上拉电阻,这时候出现的波峰会出现软弱无力的感觉,可以参照正点原子原理图设计。

         

       ② 读取数据时异常,这里就要检查主机发送完数据后是否释放SDA线,源码可以参考例程。

       ③ 写入数据不生效,这里存在一个很关键的地方,EEPROM写入速度比较慢,必须需要等待一小段时间约10ms。

       下图是AT24C02的读时序图。

         

       整个读操作过程如下:

       起始信号à地址和方向à应答信号à内存地址à应答信号à
       起始信号à地址和方向à应答信号à数据内容à应答信号à停止信号

      有DS100示波器的同学,可以尝试捕捉一下读操作波形,看看读出来的是不是字符‘A’。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入34汤圆

发表于 2021-11-17 19:21:02 | 显示全部楼层
示波器确实不错,加上协议解码就更好了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2022-7-2 16:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表