当前位置:主页>制造与测试

利用示波器解决嵌入式系统中I2C和SPI串行总线设计挑战

作者:泰克科技中端产品中国区市场经理 陈鑫磊  来源:中国电子商情

发布时间:2018-01-30

0k

如今的嵌入式系统已经渗透到我们生活的每个角落,其中包含微处理器、微控制器、DSP、RAM、EPROM、FPGA、模数转换器、数模转换器和I/O电子单元。这些设备在传统上一直使用并行总线相互通信及与外部世界通信。然而今天,嵌入式系统设计中使用的越来越多的构件将用串行总线代替并行总线,这也给嵌入式系统设计人员带来了重大挑战。本文讨论了嵌入式系统设计人员的常用挑战,及怎样使用示波器中的功能来解决这些挑战。

一.并行结构与串行结构比较
在并行结构中,总线的每个组件都有自己的信号路径。可能有16条地址线、16条数据线、一条时钟线和各种其它控制信号。通过总线发送的地址或数据值会通过所有并行线路同时传送。因此,使用大多数示波器和逻辑分析仪中的状态触发或码型触发功能触发关心的事件相对简便。同时,可以简便地了解在示波器或逻辑分析仪显示屏上捕获的数据。例如,使用逻辑分析仪从微控制器中采集时钟线、地址线、数据线和控制线信号。通过使用状态触发,隔离了要查找的总线。为“解码”总线上发生的情况,需要查看每条地址线、数据线和控制线的逻辑状态。

在串行总线中,所有这些信息都必须以串行方式在相同的少数或一条导线上发送。这意味着一个信号可能包括地址信息、控制信息、数据信息和时钟信息。这条消息包含帧头、标识符(地址)、数据长度代码、数据、CRC和帧尾及少量其它控制位。时钟嵌入在数据中,使用填充位保证接收设备拥有数量充足的边沿锁定时钟,这使情况变得进一步复杂化。即使是经过训练的眼睛,也很难迅速了解这一消息的内容。现在想象一下这是一条有问题的消息,一天只发生一次,您需要触发采集这条消息。传统示波器和逻辑分析仪不能有效处理这类信号。

即使是比较简单的串行标准,如I2C,与并行协议相比,观察总线上传输的内容仍要明显困难得多。现在有一种更好的方式,测试嵌入式系统设计中使用的最常用的低速串行标准。

二.I2C串行总线
I2C是指集成电路间总线。它最初是飞利浦公司在20世纪80年代研制的,为把控制器连接到电视机上的外设芯片提供了一种低成本方式,但之后其已经发展成为嵌入式系统设备之间通信的一项全球标准。它采用简单的两线设计,广泛用于领先芯片制造商生产的各种芯片中,如I/O、模数转换器、数模转换器、温度传感器、微控制器和微处理器。

I2C的物理两线接口由双向串行时钟(SCL)和数据(SDA)线组成。I2C支持总线上多个主从设备,但一次只能激活一个主设备。任何I2C设备可以连接到总线上,允许任何主设备与从设备交换信息。每台设备都使用唯一的地址识别,它可以作为发射机或接收机操作,具体取决于设备功能。在开始时,I2C只使用7位地址,但随着时间推移,它演变成也支持10位地址。它支持三种位速率:100 kb/s (标准模式)、400 kb/s (快速模式)和3.4 Mb/s (高速模式)。最大设备数量取决于400 pf的最大容量,或大约支持20-30台设备。

图1  I2C消息结构

I2C标准规定了下述格式,如图1所示:
 Start – 表明设备控制总线,一条消息将开始传送
 Address –7位或10位数字,表示将要读取或写入的设备地址
 R/W Bit – 1位,表明是否将从设备中读取数据或向设备写入数据
 Ack – 1位,来自从设备,确认主设备的操作。通常每个地址和数据字节有一个确认位,但不总是有确认位
 Data – 从设备中读取或写入设备的字节的整数
 Stop – 表明消息结束,主设备已经释放总线

有两种方式对I2C分组、以进行解码:7位+读或写(R/W)位方案,8位(1字节)、其中作为地址的一部分包括R/W位。7位地址方案是固件和软件设计工程师遵守的指定方案。但是,许多其它工程师使用8位地址方案。

处理I2C
通过选配串行触发和分析功能,泰克示波器为处理I2C总线的嵌入式系统设计人员提供了强大的工具。前面板有多个Bus按钮,允许用户把到示波器的输入定义为一条总线。I2C总线的设置菜单如图2所示。

图2  I2C总线的设置菜单

通过简单地定义时钟和数据位于哪条通道上及用来确定逻辑1和0的门限,示波器可以理解通过总线传输的协议。有了这些知识,示波器可以触发任何指定的消息级信息,然后把得到的采集数据解码成有意义的、容易理解的结果。

例如,考虑一下图3中的嵌入式系统。I2C总线连接到多台设备上,包括CPU、EEPROM、风扇速度控制器、数模转换器和大量的温度传感器。

图3  I2C总线实例

这部仪器被退回工程部分析故障,该产品持续过热,自动关机。要检查的第一件事是风扇控制器和风扇本身,但似乎一切正常。然后要检查温度传感器是否有问题。风扇速度控制器定期轮询两个温度传感器(位于仪器中不同的区域),调节风扇速度,稳定内部温度。我们怀疑其中一个或两个温度传感器读数不正确。为查看传感器与风扇速度控制器之间的交互。我们只需连接到I2C时钟和数据线,设置总线。我们知道,两个传感器在I2C总线上的地址分别是18和19,因此我们决定设置触发事件,查找地址18上的写入操作(风扇速度控制器轮询传感器的当前温度)。触发的采集结果如图4中的屏幕图所示。

图4  I2C地址和数据总线波形解码

表1 总线情况

在这种情况下,通道1 (黄色) 连接到SCLK,通道2 (青色)连接到SDA。紫色波形是我们向示波器中输入一些简单的参数定义的I2C总线。显示器的上方部分显示了整个采集。在这种情况下,我们已经捕获了大量的总线空闲时间,中间是我们放大的突发活动。显示屏下方的较大部分是缩放窗口。可以看出,示波器已经解码了经过总线的每条消息的内容。总线使用表1中的颜色和标记,表明消息中的重要部分。看一下采集的波形,示波器触发地址18上的写入操作(如显示屏左下方所示)。事实上,风扇速度控制器试图写入地址18两次,但在这两种情况下,在试图写入温度传感器时它没有收到确认。然后它检查地址19上的温度传感器,收回希望的信息。因此,为什么第一个温度传感器没有对风扇控制器做出响应呢?看一下电路板上的实际部件,发现其中一条地址线焊接不当。温度传感器不能在总线上通信,结果导致设备过热。由于示波器的I2C触发和总线解码功能,只需几分钟时钟,就成功地隔离了这个潜在的难检问题。

三.SPI串行总线
串行外设接口总线(SPI)最初是摩托罗拉在20世纪80年代末为其68000系列微控制器研制的。由于该总线简单、流行,许多其它制造商也已经采用这一标准。它现在用于嵌入式系统设计常用的各种器件中。SPI主要用于微控制器和直接外设之间。它通常用于移动电话、PDA和其它移动设备中,在CPU、键盘、显示器和内存芯片之间通信。

图5 常用的SPI配置


图6 串联SPI配置

SPI总线是一种主/从结构的4线串行通信总线。4个信号是时钟(SCLK),主输出/从输入(MOSI),主输入/从输出(MISO)和从选择(SS)。在两台设备通信时,一台设备称为“主设备”,另一台设备称为“从设备”。主设备驱动串行时钟。它同时收发数据,因此是一种全双工协议。SPI使用SS线路指明与哪台设备传送数据,而不是总线上的每台设备都有一个唯一的地址。这样,总线上的每台唯一的设备都需要从主设备提供自己的SS信号。如果有3台从设备,那么主设备有3条SS引线,每条引线都连接到每台从设备上,如图5所示。

在图5中,每台从设备只与主设备通话。但是,SPI可以串联多台从设备,每台从设备依次进行操作,然后把结果发回主设备,如图6所示。

因此可以看到,SPI实现方案没有“标准”。在某些情况下,在不要求从设备向回到主设备通信时,MISO信号可以完全省略。在其它情况下,只有一台主设备和一台从设备,SS信号捆到接地上,这通常称为2线SPI。

在SPI数据传送发生时,8位数据字移出MOSI,不同的8位数据字移入MISO。这可以视为16位循环位移寄存器。在传送发生时,这个16位位移寄存器位移8个位置,从而在主设备和从设备之间交换8位数据。一对寄存器 - 时钟极性(CPOL)和时钟相位(CPHA)决定着驱动数据的时钟边沿。每个寄存器有两种可能的状态,支持四种可能的组合,所有这些组合互不兼容。因此,主/从设备对必须使用相同的参数值进行通信。如果使用多个固定在不同配置的从设备,那么每次需要与不同的从设备通信时,主设备必须重新进行配置。

处理SPI
我们可以使用前面板的Bus按钮,简单地输入总线基本参数,包括SCLK, SS, MOSI和MISO位于哪条通道上、门限和极性,来定义一条SPI总线 (参见图7)。

图7 SPI总线设置菜单

例如,考虑一下图8中的嵌入式系统。

图8 通过SPI控制的合成器

一条SPI总线连接到一个合成器、一个DAC及某个I/O上。合成器连接到VCO上,VCO为其余系统提供一个2.5 GHz时钟。在启动时,CPU应该对合成器编程。但是不知道哪里出了问题,VCO在产生3GHz的信号。调试这个问题的第一步是考察CPU和合成器之间的信号,确定存在信号,没有物理连接问题,但我们找不到发生了什么问题。然后,我们决定看一下SPI总线上传送的合成器编程使用的实际信息。为捕获这些信息,我们把示波器设成在合成器Slave Select信号激活时触发采集,并对DUT通电,捕获启动编程命令。采集结果如图9所示。

图9 采集SPI总线之外的合成器配置消息

通道1 (黄色)是SCLK,通道2 (青色)是MOSI,通道3 (洋红色)是SS。为确定我们是否对设备正确编程,我们看一下合成器的产品资料。总线上的前三个消息假设是初始化合成器、加载分路器比率、锁存数据。根据技术数据,前三个传送中最后半个字节(一个十六进制字符)应该分别是3, 0和1,但我们看到的是0, 0和0。

在消息末尾全是0时,我们认识到,我们在SPI中犯了一个最常见的错误,即在软件中以相反的顺序在每个24位字中对各个位编程。在迅速改变软件配置后,得到下面的采集,VCO正确锁定在2.5 GHz,如图10所示。

图10 正确的合成器配置消息

四.总结
尽管嵌入式系统设计从并行总线转向串行总线带来了许多好处,但它也给设计工程师带来了许多挑战。如果使用传统测试测量工具,触发查找的事件要困难得多,因为这些工具仅仅查看模拟信号,几乎不可能告诉用户其提供了哪些信息,而且手动解码长时间的总线活动、诊断问题是非常耗时、非常容易出错的过程。泰克示波器改变了这一切。由于其强大的触发、解码和搜索功能,当前的设计工程师可以以极高的效率解决嵌入式系统设计问题。

0k