用逻辑分析仪对I2C总线进行分析

现在,已经有越来越多的外围器件与微控制器的接口形式是二线制的I2C串行总线,很多的电子场合都使用到了I2C总线,特别是使用标准51芯片的工程师需要模拟I2C总线,我以前也模拟过I2C总线,特整理了一点总线的资料。同时利用逻辑分析仪LA2532对I2C总线的传输特性进行观察,直观的了解I2C规范。

    知识可能非常简单,有些东西也是在其它资料上查找的,只是希望能够给大家介绍一种学习和使用并行总线的一种方法。

1  I2C协议概述

    NXP半导体(原Philips 半导体)于20多年前发明了一种简单的双向二线制串行通信总线,主要用于电路板内部,各器件之间的数据通信,这个总线被称为Inter-IC或者I2C总线。目前I2C 总线已经成为业界嵌入式应用的标准解决方案,被广泛地应用在各式各样基于微控器的专业、消费与电信产品中,作为控制、诊断与电源管理总线。多个符合I2C 总线标准的器件都可以通过同一条I2C 总线进行通信,而不需要额外的地址译码器。由于I2C 是一种两线式串行总线,因此简单的操作特性成为它快速崛起成为业界标准的关键因素。

2  总线特性

    I2C 总线只需要由两根信号线组成,一根是串行数据线SDA,另一根是串行时钟线SCL。在系统中,I2C总线的典型接法如图 1所示,注意连接时需要共地。

 

 用逻辑分析仪对I2C总线进行分析

 

 1  I2C物理电路

    一般具有I2C 总线的器件其SDA 和SCL 管脚都是漏极开路(或集电极开路)输出结构。因此实际使用时,SDA 和SCL 信号线都必须要加上拉电阻Rp(Pull-Up Resistor)。上拉电阻一般取值3~10KΩ。开漏结构的好处是:

  • 当总线空闲时,这两条信号线都保持高电平,不会消耗电流。
  • 电气兼容性好。上拉电阻接5V 电源就能与5V 逻辑器件接口,上拉电阻接3V 电源又能与3V 逻辑器件接口。
  • 因为是开漏结构,所以不同器件的SDA 与SDA 之间、SCL 与SCL 之间可以直接相连,不需要额外的转换电路。
  • 同一条I2C 总线上可以挂接很多个器件,一般可达数十个以上,甚至更多。器件之间是靠不同的编址来区分的,而不需要附加的I/O 线或地址译码部件。

3  I2C总线规范

3.1  I2C 总线名词解释

发送器:发送数据到总线上的器件

接收器:从总线上接收数据的器件

主器件:启动数据传送并产生时钟信号的器件

从器件:被主器件寻址的器件

3.2   位传输特性

    I2C协议为个保证其准确性,对传输特性和协议规范进行了相当详尽的定义。首先对数据的有效性做出了定义:SDA线上的数据必须在时钟的高电平周期保持稳定,数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变见图 2。

用逻辑分析仪对I2C总线进行分析

 

 2 有效规则

    但是这个有效性规定只是对数据部分有效,协议中有两个很特殊的标志位,就是起始位和停止位。其中一种情况是在SCL 线是高电平时SDA 线从高电平向低电平切换这个情况表示起始条件;具体如图 3。当SCL 是高电平时SDA线由低电平向高电平切换表示停止条件;起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态,在停止条件的某段时间后总线被认为再次处于空闲状态。

 用逻辑分析仪对I2C总线进行分析

 3 起始位及结束位

3.3  I2C总线时序定义

3.3.1  寻址和回应

    I2C总线不需要额外的地址译码器和片选信号。多个具有I2C总线接口的器件都可以连接到同一条I2C总线上,它们之间通过器件地址来区分。主机是主控器件,它不需要器件地址,其它器件都属于从机,要有器件地址。必须保证同一条I2C 总线上所有从机的地址都是唯一确定的,不能有重复,否则I2C 总线将不能正常工作。一般从机地址由7位地址位和一位读写标志R/W组成,7位地址占据高7位,读写位在最后。读写位是0,表示主机将要向从机写入数据;读写位是1,则表示主机将要从从机读取数据。

    I2C总线总是以字节(Byte)为单位收发数据。每次传输的字节数量没有严格限制。首先传输的是数据的最高位(MSB,第7位),最后传输的是最低位(LSB,第0位)。另外,每个字节之后还要跟一个响应位,称为应答。

    应答(Acknowledge)。在I2C 总线传输数据过程中,每传输一个字节,都要跟一个应答状态位。接收器接收数据的情况可以通过应答位来告知发送器。应答位的时钟脉冲仍由主机产生,而应答位的数据状态则遵循“谁接收谁产生”的原则,即总是由接收器产生应答位。主机向从机发送数据时,应答位由从机产生;主机从从机接收数据时,应答位由主机产生。I2C总线标准规定:应答位为0 表示接收器应答(ACK),常常简记为A;为1则表示非应答(NACK),常常简记为A。发送器发送完LSB 之后,应当释放SDA 线(拉高SDA,输出晶体管截止),以等待接收器产生应答位。

    如果接收器在接收完最后一个字节的数据,或者不能再接收更多的数据时,应当产生非应答来通知发送器。发送器如果发现接收器产生了非应答状态,则应当终止发送。

3.3.2  传输模式

主机发送数据到从机:

 

用逻辑分析仪对I2C总线进行分析

 4 主机发送数据格式

主机读取从机中的数据:

 

用逻辑分析仪对I2C总线进行分析

图 5 主机读取数据格式

复合传输格式(包含读取和发送的切换):

用逻辑分析仪对I2C总线进行分析 

 6 复合传输格式

在图 4到图 6中,各种符号的意义为:

S:起始位(START)

SA:从机地址(Slave Address),7 位从机地址

W:写标志位(Write),1 位写标志

R:读标志位(Read),1 位读标志

A:应答位(Acknowledge),1 位应答

A:非应答位(Not Acknowledge),1 位非应答

D:数据(Data),每个数据都必须是8 位

P:停止位(STOP)

阴影:主机产生的信号

无阴影:从机产生的信号

3.3.3  子地址

    带有I2C 总线的器件除了有从机地址(Slave Address)外,还可能有子地址。从机地址是指该器件在I2C 总线上被主机寻址的地址,而子地址是指该器件内部不同部件或存储单元的编址。例如,带I2C 总线接口的E2PROM 就是拥有子地址器件的典型代表。某些器件(只占少数)内部结构比较简单,可能没有子地址,只有必须的从机地址。与从机地址一样,子地址实际上也是像普通数据那样进行传输的,传输格式仍然是与数据相统一的,区分传输的到底是地址还是数据要靠收发双方具体的逻辑约定。子地址的长度必须由整数个字节组成,可能是单字节(8 位子地址),也可能是双字节(16 位子地址),还可能是3 字节以上,这要看具体器件的规定。由于该部分至于具体的器件有关,此处不做详细的介绍,使用中请查阅器件手册。

4  用逻辑分析仪对协议进行分析

4.1  逻辑分析仪介绍

    逻辑分析仪是一种专门测试数据信号的专用工具,将总线上的数据以逻辑0和逻辑1表示,可以记录总线上的数据变化,用户可以通过记录的波形对总线进行分析,观察学习总线的规范或者查找总线错误的原因。

目前,逻辑分析仪的生产商主要有美国的安捷伦、台湾的泰克和国内的致远电子。相对来说进口的逻辑分析仪价格昂贵。现在我们以致远的逻辑分析仪LA2532为例,测试I2C协议。并对I2C协议进行分析。

4.2  记录总线数据

    LA2532逻辑分析仪提过了先进的数据压缩功能,再选择数据压缩的时候,相当于将存储深度提高了最大200倍,在200M采样下依然可以记录几分钟的I2C数据。远远大于同类产品的采样时间。下面是我们用该逻辑分析仪记录下来的一段总线数据:

 用逻辑分析仪对I2C总线进行分析

图 7 采集结果

    让我们先对这个波形进行一下分析,我可以看到,我们通过前面所介绍的知识,通过仔细的计算可以找到起始位、停止位、RW位、ACK等信号。如下所示:

 

用逻辑分析仪对I2C总线进行分析

图 8 格式分析

    如上图,每种协议都有一套严格的规范,对协议的解读也是需要严谨的精神,在第二部分我们说明了I2C协议的格式和规范,但是,当我们真正的接触到这个协议的时候就觉得其实是很复杂的。特别是串行总线,我们需要严格的把握时钟,依据起始位的定义,可以找到起始位,同理也可以找到结束位。根据协议规范,在开始位后面的7个位为地址,第8位为读写控制位,再读写控制位之后就是主机等待从机的ACK信号。通过复杂的分析出各个位所代表的意思,但是这事一个非常复杂和繁琐的过程。

这里之所以选择致远公司的LA2532逻辑分析仪是因为LA2532逻辑分析仪有很强大的协议分析功能,可以减少研发人员的工作量,通过分析仪的软件,自动的分析出数据。清晰的给出总线上传输的数据。

通过LA2532协议分析以后的数据如下:

用逻辑分析仪对I2C总线进行分析

图 9 协议分析结果

    可以看到我们分析以后的数据很清晰的显示出了地址信息、数据信息、起始位及停止位、确认信号等。如果总线上出现错误,可以很直观的看到错误的原因,对于学习I2C协议和调试有很大的帮助。

4.3  触发方式的设置

    在总线的使用过程中,开发人员经常会遇到的问题就是总线错误。这个时候,对错误的定位就显的很重要了。所以,要合理的使用逻辑分析仪的触发功能。

    例如我们要对地址为0xA0的I2C器件的操作出现不正常,这时候我们就需要特别的关注地址为0x07的数据包的情况。这时候就需要逻辑分析仪自动的从地址为0x07的数据包位置开始记录,这个是很复杂的技术,即插件触发功能。目前支持这种技术的逻辑分析仪不多。

    以LA2532的触发方式进行设置:

用逻辑分析仪对I2C总线进行分析 

图 10 插件设置界面

    通过简单的设置,逻辑分析仪就可以对总线上特定的数据进行触发。

 

    其实在学习或者使用任何协议的时候,我们都可以使用上面的方法,直观的了解协议是如何实现的,在使用过程中出现了问题,都可以借鉴上面的方法进行处理。

阅读更多
个人分类: 前端
想对作者说点什么? 我来说一句

avr单片机i2c读写

2010年07月30日 734B 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭