今日的嵌入式设计工程师面临了系统复杂度不断增加的挑战。典型的嵌入式设计可能结合了多种类比讯号、高速和低速串列数位通讯,以及微处理器汇流排,这还只是其中一小部分。如I2C和SPI等串列通讯协定,经常用于晶片与晶片间的通讯,但是却无法在所有的应用程式中取代并列汇流排。
微处理器、FPGA、类比转数位转换器(ADC)和数位转类比转换器(DAC)都是今日嵌入式设计中代表IC特殊量测挑战的例子。工程师可能必须在同一块系统主机板上,解码两个IC之间的SPI汇流排,并且同时观察ADC的输入和输出。此类混合讯号系统的范例,如(图一)所示。
对于拥有4通道示波器的工程师而言,为图一所示的硬体进行除错,是件困难且令人气馁的工作。许多对于目前拥有的示波器感到满意,并希望能借此节省时间的工程师,可能会选择使用3、4台示波器同时量测多种讯号,逻辑分析仪虽然可提供量测许多数位讯号的能力,但是复杂的除错工作可能不值得使用逻辑分析仪需要的设定及学习曲线。拥有16通道逻辑分析仪的基本功能,以及4通道的混合讯号示波器,将协助工程师面临这项挑战。本文会实际展示嵌入式设计混合讯号和多个串列通讯协定的除错。
嵌入式设计工程师通常使用串列通讯协定如I2C和SPI,以简化电路板上各系统区块之间的通讯。虽然这些串列通讯协定可以减少布线的复杂度,但是使用传统示波器为这些协定进行除错仍感吃力。设计师通常被迫手动为撷取到的串列资料进行解码,或是从示波器汇出资料,以进行后处理和解码。让示波器进行串列资料的解码,能够让嵌入式设计工程师即时看见硬体和软体的影响,为工程师节省无数的除错时间。
有些示波器能够使用最多四个通道量测串列资料,但常见的串列通讯协定有许多需要三条以上的线路。工程师通常需要具备同时解码和显示多条串列汇流排,以及观察其时间关联的能力,混合讯号示波器系列(Mixed Singal Oscilliscope series;MSO)拥有串列触发和解码能力,和16个额外的数位通道。除了I2C、SPI和CAN之外,混合讯号示波器中增加了对RS-232及并列汇流排的触发和解码之支援。利用混合讯号示波器工程师就能在同一时间,对多个串列汇流排及自订的并列汇流排进行量测和解码。在下列的例子中,我们使用混合讯号示波器MSO4000为图一所示的嵌入式设计,进行复杂的多晶片通讯错误除错。
![《图三 MSO4000以CH1模拟显示I2C、SPI和并列总线》](/art/2007/09/041109545628/p3.gif)
《图三 MSO4000以CH1模拟显示I2C、SPI和并列总线》 |
|
在系统除错的初期,如图一所示,系统偶尔会遇到电路板上的状态LED显示错误存在的状况。状态LED暧昧不明的错误报告,让系统工程师无法确认问题是和硬体或软体有关。之前曾因类比MUX输入的讯号品质不佳而造成类似的错误,但是引起该讯号完整性问题的硬体已更换成功。由于系统工程师怀疑错误可能是来自MUX输入以外的来源,因此决定量测通往MUX的类比输入以及数条数位汇流排,以取得广泛的系统视图。混合讯号示波器透过可用于除错的4条类比和16条数位通道,连接至(图二)中标示为1至4的讯号。
如(图三)显示MSO4000同时探测SPI汇流排、I2C汇流排、3位元并列汇流排和类比输入时的萤幕撷取画面。由于错误可以用特定的副程式隔离,因此混合讯号示波器设定为针对在特定I2C活动上进行的触发进行单次撷取。将记录长度设定为1M个点,可以确保准确地撷取到I2C汇流排上之事件附近的所有有用资讯。工程师执行该副程式,并快速参照混合讯号示波器,以查看系统中发生了什么事。
CH1上的MUX输入处所显示的纯净类比波形,证实了工程师的怀疑,即硬体已经修复,错误发生在其他地方。混合讯号示波器在从微处理器写入的I2C资料上进行触发和解码。工程师注意到SPI汇流排上的活动,以及I2C资料传送后随即出现之标示为D1和D2的显示讯号。这些汇流排上的活动受到怀疑,因为执行的功能应该与LCD控制器有关。由于混合讯号示波器已经解码了I2C资料的值,工程师可以看到微处理器已将I2C资料写入位址0x77。位址0x77是FPGA的位址,但是副程式应该要将资料写入位址0x76,这是LCD控制器的位址。
![《图四 使用Wave Inspector放大并显示封包细节》](/art/2007/09/041109545628/p4.gif)
《图四 使用Wave Inspector放大并显示封包细节》 |
|
如(图四)显示相同的撷取,但使用Wave Inspector 放大SPI和并列汇流排的细节。 SPI资料在萤幕上解码为从主控(FPGA)将资料值0x15写入从属(MUX)。这个SPI命令只是输入MUX变更其用作讯号路径的输入。输入讯号中非预期的改变导致FPGA将错误代码送至并列汇流排上的状态LED。讯号D2上的活动显示,错误代码和并列汇流排解码同样可在图四上观察到。嵌入式设计工程师很快就能判断出系统中的故障是由软体错误造成的,因为混合讯号示波器可以同时检视和解码所有您感兴趣的讯号。软体程式在封包针对的是LCD控制器时,误将资料写入从微控制器到FPGA的I2C资料。
![《图五 MUX_OUT上的白色边缘代表存在更多细节》](/art/2007/09/041109545628/p5.gif)
《图五 MUX_OUT上的白色边缘代表存在更多细节》 |
|
新一代数位波形显示透露问题所在
在修改了系统软体,以修正上一段所描述的位址错误之后,嵌入式设计工程师继续测试更多本系统的功能。在此过程中,他们注意到状态LED上偶尔出现的错误。这与前段所描述的错误不同,工程师不知道如何重新建立所看到的错误。这些错误其实是随机出现的,而且无法以特定功能或系统的副程式隔离。
![《图六 Wave Inspector显示MUX_OUT讯号上的突波》](/art/2007/09/041109545628/p6.gif)
《图六 Wave Inspector显示MUX_OUT讯号上的突波》 |
|
嵌入式设计工程师为了错误的随机性质而感到疑惑,同时不确定要从何处开始寻找其来源。一个寻找错误来源的选择,就是使用示波器在系统四周随机量测,期待能撷取到随机事件。虽然工程师过去曾经使用过这个方法,但他们知道若将配置适当的混合讯号示波器连接至所有感兴趣的讯号,可让寻找错误的时间大幅缩短。前段中的大多数量测点仍然连接到混合讯号示波器,而CH1探棒则移动到现行的MUX输入,即感测器3的数位讯号。除了这4个探测点,在探测MUX输出时还使用了一个数位通道。
FPGA透过3位元并列汇流排传送0x7值表示错误发生。为了隔离此问题,我们将混合讯号示波器设定为对并列汇流排0x7值设定成触发事件以进行单次撷取,如(图五)所示。在这种情况下,并列汇流排可以节省解码和触发时间并避免混淆,因为错误状况可以轻易隔离。本撷取中使用到的1M记录长度,可让工程师观察触发事件之前和之后的关键讯号细节。
乍看之下,图五中显示的讯号似乎一切正常,但是系统工程师很快便能辨识出MUX_OUT讯号上的两个边缘转态出现不寻常的现象。图五中显示的MUX_OUT讯号上的白色转态,可提醒使用者该讯号的这些部分中存在着更多资讯。 MSO的多边缘侦测功能,标示出放大后可能可以显露出更高频率之数位脉冲的波形区域。 (图六)则显示使用Wave Inspector放大波形细节时的第一个白色转态背后的细节。在图五中被画成白色转态部分的讯号,实际上是MUX_OUT讯号上的突波。
图六显示MSO4000中类比和数位通道之间的时间关联。 MUX的输入显示在CH1(SENSOR_3)上,而MUX输出可在数位通道D14(MUX_OUT)上观察到。工程师注意到,虽然MUX输出上有突波,但是MUX的输入看起来却没有突波。在以数位通道辨识出突波后,工程师决定将CH2连接至MUX输出,看得更仔细一点。
![《图八 CH1显示进入MUX_OUT讯号之串音的来源》](/art/2007/09/041109545628/p8.gif)
《图八 CH1显示进入MUX_OUT讯号之串音的来源》 |
|
(图七)则显示使用同样设定为对并列汇流排0x7值进行触发的MSO4000所产生的撷取。在图七中,SPI和I2C汇流排的波形已被关闭,以突显有兴趣的主要讯号。在MUX输入和输出上使用类比探棒,可以发现输出上存在的突波并不存在于输入讯号中。图七显示MUX_OUT讯号上的突波会在FPGA送出错误代码之前的一小段时间内出现。这两个讯号之间的时间关联表示突波可能就是工程师观察到的问题。工程师以相同设定重复进行数次撷取,而且无论何种状况都能观察到类似图七的行为。
在研究过混合讯号示波器的萤幕撷取画面后,嵌入式设计工程师怀疑MUX_OUT讯号上的突波来源可能是串音。他们在图五中监测到的讯号,没有一个被识别为串音的来源。在更详细地检查电路板配置的时候,工程师在印刷电路板(PCB)上发现一条位于MUX_OUT轨迹旁边的通路。工程师使用CH1量测PCB上的通路,并等待来自并列汇流排的下一次触发。产生的萤幕画面撷取如(图八)所示,图八显示CH1上撷取到的讯号从低至高的转态,在时间上直接与MUX_OUT讯号上的正向突波相关。相对的,从高至低的转态也直接和MUX_OUT讯号上的负向突波相关。
在花了一些时间重新配置电路板上的干扰讯号路线后,工程师将混合讯号示波器设定在CH1上进行触发。 (图九)显示MSO4000在CH1转态上进行触发,但是并未显示出MUX_OUT讯号上的突波。由于MUX_OUT讯号上未有突波出现,因此并列汇流排没有产生错误状况。电路板修正可移除串音,并让嵌入式设计工程师能够完成系统的评估。
---本文由Tektronix太克科技提供---