嵌入式系统是硬件和软件的混合体。两者必须相辅相成。硬件人员可以使软件更容易实现。因此,这里有一些建议,可以使系统硬件、软件和固件更容易调试。记住,一个好的设计是有效的;一个好的设计也是一个容易调试的设计。

首先:诊断

在非嵌入式世界中,最受欢迎的调试技巧是在代码中植入打印语句。这些信息告诉程序员执行流是否已经到达打印点。但软件用户很少有这种选择。

因此,添加一些未分配的并行I/O位。作为一种廉价的代码工具,人们迫切需要这些软件。在驱动这些输出的代码中植入I/O指令是查看程序正在做什么的一种简单快捷的方法。

开发人员可以在进入例程或ISR时断言一点,然后在退出时将其压低。然后,作用域或逻辑分析器立即显示代码片段的执行时间。

另一个技巧是在系统繁忙时将输出位循环为高电平,而在空闲时循环为低电平。将电压表连接到引脚上,这是一种带有模拟针的老式单元。仪表将对二进制脉冲流进行积分,因此显示的电压将与系统负载成比例。

如果空间和成本允许,包括连接到一行0.1英寸间隔的过孔或头部的整个8位寄存器。软件状态机可以将其当前“状态”输出到此端口。逻辑分析器捕获数据并显示所有排序,对代码的执行时间几乎没有影响。

至少需要一个LED来向开发人员甚至客户发出系统正常工作的信号。这是一个由低优先级任务或空闲循环驱动的信心指标,它表明系统是活动的,并且没有卡在有限循环中。许多嵌入式系统没有用户界面;闪烁的LED可以是一个简单的“系统正常”指示。

高度集成的CPU现在提供了很多片上外围设备,有时比我们在特定系统中需要的还要多。如果有额外的UART,将引脚连接到RS-232电平移位芯片(例如MAX232A或类似芯片)。除了原型设计之外,没有必要实际将芯片加载到电路板上。

软件开发人员可能会发现自己处于工具不足的角落,然后想在代码中添加软件监视器。RS-232端口使这一点变得可能和容易。

如果PCB的不动产非常有限,以至于没有空间放置电平转换器,那么至少将Tx、Rx和接地连接到可访问的过孔,这样就可以将MAX232挂在电路板上方的绿色电线上。

(开发者注意了 :如果您确实使用此端口,请不要急于实现监视器,而是使用轮询I/O实现RS-232驱动程序。花点时间创建体面的中断驱动代码。根据我们的经验,监视器上的轮询I/O会导致遗漏字符、不可靠的工具和巨大的挫败感.)

将复位线连接到开关或跳线上,这样工程师就可以独立于正常通电复位来断言信号。通电问题有时可以通过将重置连接到脉冲发生器来隔离,从而创建一个易于使用示波器研究的可重复场景。

连接工具

确定CPU芯片的方向,以便在使用模拟器时可以连接模拟器。有时,目标板被深深地埋在机柜内,访问最多也会受到限制。大多数模拟器吊舱具有有利于特定插入方向的形状因素。

还要注意垂直间隙!堆叠在大型SMT适配器上的吊舱可能需要在板上方4到6英寸的空间。确保板的顶部没有任何东西会干扰吊舱。

不要在SMT封装上使用“夹式”适配器。它们根本不可靠(一个例外是具有大引线间距的PLCC封装)。在巴西,一只挥舞着翅膀的黄油流产生了足够的气流,足以将其掀翻。最好是卸下CPU,安装一个焊接的适配器。PCB将永远是一个原型,但至少它将是一个可靠的原型。

在系统的计时中留出余量。如果每一纳秒都被计算在内,那么任何模拟器都不会可靠地工作。在读写周期中,特别是在等待状态电路中,额外的5nsec左右不会影响大多数设计。

如果您的处理器有BDM或JTAG调试端口,请确保在PCB上添加适当的连接器。即使您计划使用成熟的模拟器或其他开发工具,至少要为BDM连接器添加PCB焊盘和布线。连接器的成本接近于零,可能会挽救一个遭受工具困境的项目。

逻辑分析器是一个极好的调试工具,但它总是令人感到非常沮丧。当您完成连接100个夹子引线时,前50个已经弹出。

有一个更好的解决方案:用AMP的麦克风接口环绕您的CPU。这些是高密度、可控阻抗的部件,可以在板外传播系统的地址、数据和控制总线。Tektronix和安捷伦都支持Mictor。两家公司都销售从逻辑分析仪直接连接到麦克风的电缆。无需夹子引线,无需制作定制电缆,并保证在几秒钟内实现可靠连接。从生产版本的板上卸下连接器,或者只留下PCB焊盘而不加载零件。

当我们连接工具时,有些信号特别容易失真。地址锁存使能(ALE),在摩托罗拉部件上也称为地址选通(as),用于区分多路复用总线上的地址和数据。模拟器甚至探测器对这个信号产生的最微小的噪音都会导致系统崩溃。

对于任何边缘触发的中断输入(如许多CPU上的NMI)也是如此。使用双电阻器网络终止这些信号。尽管您的设计在没有终端的情况下可能是完美的,但连接工具和探测信号可能会破坏信号。

添加测试点! 除非它的接地连接很短,否则示波器无法准确显示我们现代设计中特有的高速信号。在过去的好日子里,很容易将一点导线焊接到逻辑器件的引脚上,以创建即时接地连接。对于SMT来说,这要么是困难的,要么是不可能的,所以在电路板周围分布大量可访问的接地点。

我们将大量探测的其他信号必须是可访问的,包括时钟、读取、写入和所有中断输入。确保每个都有足够大小的测试点或过孔,以便开发者可以将导线(通常是电阻器引线)焊接到信号上。

一定要添加一个Vcc测试点。逻辑探针是古老的工具,但仍然非常有用。大多数需要电源连接。

关于港口的思考

使所有输出端口可读。对于ASIC中的控制寄存器来说尤其如此,因为没有办法探测这些寄存器。

钻头订购时要小心。例如,如果从A/D读取,那么将位7转换为输入位0、将位6转换为1等的糟糕设计就是一场噩梦。当然,软件人员可以编写代码来解决混淆问题,但大多数处理器都不擅长这一点。代码将是缓慢而丑陋的。

使用许多窄的I/O端口,而不是使用几个宽的I/O端口。当一个端口控制三个LED、两个中断屏蔽和一个步进电机时,改变任何输出意味着管理每个输出。代码变成了一堆错综复杂的AND/OR。任何微小的硬件更改都需要大量的软件调整。当使用离散逻辑实现时,宽端口确实可以最大限度地减少零件数量,但在PLD或FPGA内部没有成本优势。

避免将未使用的数字输入直接连接到Vcc。在过去,这种做法被禁止,因为74LS输入比Vcc引脚更容易受到瞬态的影响。所有未使用的输入都通过电阻上拉进入Vcc。逻辑设备不再需要这样做,但这仍然是一种很好的做法。探测和更改一个没有硬连接到电源的节点要容易得多。

然而,如果您必须将电源直接连接到这些未使用的输入,请非常小心PCB布局。不要通过引脚供电;也就是说,不要使用引脚作为将电源提供给其他引脚或板的另一侧的方便方式。

最好小心地将输入信号的所有电源和接地连接作为PCB外层的轨道,这样当IC焊接到位时,它们就可以看到了。然后,开发人员可以用X-Acto刀轻松地切割轨迹并进行更改。

上拉电阻带来了自身的挑战。许多调试工具都有自己的pull-up,这可能会奇怪地对节点产生偏差。最好使用CMOS允许的较低值,而不是较高值(比如10k而不是100k)。

PCB丝网印刷术是经常被忽视的调试辅助工具。给开关和跳线贴上标签。总是表示引脚1,因为在SMT世界中没有标准的引脚1位置。在大型SMT封装周围每5或10个引脚添加一个勾号,并指示引脚数量是沿CW方向还是CCW方向增加。否则,固定针139就是一场噩梦,尤其是对于患有咖啡因引起的震颤的双焦点磨损显影剂来说。

关键的连接器,这样就不会猜测电缆应该走哪条路。

请在示意图中添加注释!对于所有页外路由,请指明路由所指向的页面。不要隐藏与电源和接地相关的引脚号,并明确标记这些引脚号。

设计完成后,检查每个设备的每个输入,并确保每个设备都连接到某个东西,即使它没有使用。我已经看到数百个系统在现场失败,因为未使用的输入漂移到断言状态。你可能希望软件人员在代码中屏蔽这些内容,但这并不总是可能的,即使是这样,也经常被遗忘。

尽量避免使用硬件状态机。它们很难调试,而且通常与固件紧密耦合,这也使得调试不友好。在代码中完全实现这些更容易。工具(例如,来自IAR的VisualState)可以自动生成状态机代码。

施工方法

嵌入式控制器可以使用几种技术中的任何一种来构建,但最常见的方法是印刷电路板(PCB)。印刷电路板由绝缘材料制成,如环氧树脂浸渍的玻璃布,上面层压一层薄薄的铜片。

多层铜和绝缘材料可以层压成多层PCB。通过在材料中钻孔和镀孔,可以互连层并为通孔部件提供安装位置。

在设计PCB的布局或互连图案时,必须满足许多相互矛盾的要求,才能制造出可靠、经济高效且可生产的设备。对于低速电路,寄生效应可以忽略,通常被认为是理想的连接。

不幸的是,实际电路并不理想,导线和绝缘材料会对电路产生影响,尤其是对于信号上升/下降时间快的信号。PCB上的迹线或导线具有杂散电阻、电容和电感。

在高速时,这些杂散效应会使信号延迟和失真。在设计PC板时必须特别小心,以避免传输线效应、噪声和不必要的电磁发射问题。

电源和接地平面。 在可能的情况下,最好使用两层四层或四层以上专用于Vcc和接地信号的PCB。这些被称为电源平面和接地平面。一个优点是有一个有益的高频寄生电源去耦电容,可以降低IC的电源噪声。

功率平面还减少了可能引起干扰的电磁辐射的不希望的发射,并降低了电路对外部感应噪声的敏感性。功率平面往往起到屏蔽的作用,以降低对外部噪声和来自系统的噪声辐射的敏感性。

地面问题。 尽管理想电路接地的概念看起来相对简单,但在实际应用中,许多系统问题可以直接追溯到接地问题。

至少,这会导致不希望的噪声或错误的操作;在最坏的情况下,它可能会导致安全问题,甚至可能导致触电死亡。为了避免你太快忽视这种可能性的重要性,作者在测试一个接地不当的设备时差点触电身亡!

这些问题通常是由以下问题之一引起的:

1)接地电路中的电感或电阻过大,导致“接地回路”

2)系统中不同接地之间缺乏或隔离不足:接地、安全、数字和模拟接地

3)不理想的接地路径,导致电流在一个电路中流动,在另一个电路产生电压

这些问题的解决方案各不相同,这取决于问题的类型和发生问题的频率范围。

通常,它们可以简化为减少电路公共阻抗中的电流流动,这些电路需要使用单点接地和谨慎应用屏蔽和绝缘来保持隔离,以防止不必要的寄生信号耦合。

EMC和ESD效应

电磁兼容性(EMC) 现在,有大量电子设备无意中辐射出与通信、导航和仪器相同频率范围的电磁能,这些问题变得更加重要。

美国联邦通信委员会(FCC)、加拿大通信部(DOC)和欧洲类似组织等监管机构已经确定了允许此类电子设备在不同频率下发射的能量限制。

由于应用的敏感性,对生命关键设备(如飞机导航和生命支持设备)提出了更严格的要求。除其他外,这些设备需要提供对外部感应噪声(辐射和传导敏感度)的最低水平的抗扰度。

在解决EMC问题时,第一步是确定噪声源、到达问题区域的路径以及问题出现的目的地。一旦确定了EMC问题的这三个特征,工程师就可以评估消除源噪声、使用屏蔽和类似技术断开路径以及降低受影响电路灵敏度的相对优点。

有一些有用的资源,包括出版物、研讨会、测试实验室和专门解决EMC问题的顾问。最佳解决方案通常是在原型阶段尽早开始测试新设计,以确定潜在的问题领域,从而以最小的成本和进度影响来解决这些问题。

静电放电(ESD) 是嵌入式应用程序中的一个重要设计考虑因素,因为在存在外部电场的情况下可能会出现故障和错误操作。

当有人在低湿度环境中穿过地板,然后触摸电子设备时,ESD电压通常会施加在嵌入式接口上,约为数万伏。

这成为一个问题的最常见的地方之一是键盘或用户输入设备,它与外界直接接触。这种影响可能会立即造成损坏或混乱,或者可能导致ESD事件发生数月后出现的潜在故障。

设计师通常使用与安全和减排技术类似的屏蔽和接地技术,以最大限度地减少ESD的影响。可用于EMC问题的资源通常也可用于ESD问题。

容错

随着嵌入式系统进入故障无法接受的应用程序,容错已越来越成为嵌入式系统的一项要求。已经开发了许多硬件和软件解决方案来满足这一需求。

为了了解如何处理这些故障,我们必须首先识别和了解每种类型故障的类型和性质。每个故障都可以分为“硬”故障或“软”故障。硬故障会导致错误不会消失,例如,按下重置或断电不会导致从故障状态中恢复。软故障是由瞬态事件引起的,或者在某些情况下是由程序错误引起的。

如果故障不太严重,自检和诊断程序可能能够识别和诊断故障。

根据发生的故障类型和受影响的设备,可以设计一个系统来检测故障,甚至可能在某种程度上隔离故障的位置。在软故障的情况下,设计者可以使系统自动从故障中恢复。

可以为嵌入式处理器编写内置自检程序,该程序将能够检测以下类型设备中的故障:

•处理器(如果故障不太严重)

•内存

•ROM

•闸板

•打开(E/E)

•外围设备

请注意,即使不是不可能,也很难检测系统中控制电路或“粘合逻辑”的故障。其他设备,如存储器,有助于诊断方法。

可以使用以下技术中的一种或多种来测试ROM设备的数据内容的错误:

•奇偶校验

•校验和

•循环冗余校验(CRC)

RAM存储器和由处理器存储在RAM中的信息的完整性可以使用以下技术之一来测试是否正确操作:

•硬件错误检测和纠正

•数据/地址模式测试

•通过检查堆栈限制和地址范围有效性实现数据结构完整性

此外,可以使用以下一种或多种技术检查程序的完整性和CPU的正确执行顺序:

•硬件奇偶校验错误检测

•重复、冗余硬件和交叉检查或投票

•操作CPU芯片复位线的“看门狗”计时器

•当CPU没有其他事情可做时,持续运行的诊断

仪器仪表问题

设计者必须解决的最重要但往往被忽视的问题之一是测试仪器的正确选择和使用。这些工具的选择和应用不当往往是设计师浪费时间和困惑的根源。两个常见的使用问题与示波器和逻辑分析仪探头的使用有关。

典型的示波器或逻辑分析仪配备的探针可能不会对观察到的信号产生影响或使收集到的数据失真。输入阻抗在兆欧范围内,寄生电容为数十皮法,测试设备似乎对测量几乎没有影响,但事实并非如此。

测量问题有两个常见原因:接地引线电感过大和电容负载过大。这些事情至少会导致错误测量的可能性,或者在最坏的情况下,它们会导致被测电路表现不同。可以做两件事来缓解这些问题:

1)使用尽可能短的测试引线,尤其是快速逻辑上的接地连接。

2)使用高阻抗探针,特别是为高速应用而设计的探针,例如高速FET输入示波器探针。

其他仪器问题可能是由于对数字示波器中的采样效果的误解、逻辑分析仪中缺乏故障检测以及其他模糊但可能令人痛苦的“学习经验”造成的。只有对使用中的设备的操作有很好的了解并有一些实际经验,才能避免这些问题。

其他特殊设计注意事项

嵌入式系统设计者至少应该熟悉其他几个特性。其中包括系统的热特性、热阻、功耗的概念以及对设备温度和可靠性的影响。在便携式、手持式和远程定位系统中,另一个重要问题是电池储能的应用。

热分析与设计。 半导体器件(如电压调节器甚至CPU芯片)的温度是一个关键的系统操作参数。这些设备的可靠性也与温度密切相关,因为设备的可靠性随着温度的升高呈指数级下降。

幸运的是,计算设备的工作温度并不太困难,因为有一个简单的电路类比最常用于计算设备的温度。温度类似于电压,耗散的功率相当于电流,热阻相当于电阻。换句话说:

温升(ºC)=功率(瓦)*热阻(ºC/瓦)

堆叠在一起的多个机械部件的热阻相加,就像串联电阻器等效于单个电阻器,等于单个值的总和一样。

例如:给定一个5V线性电压调节器,其9V输入提供1安培的负载电流,调节器将耗散:

P=V*I=(9–5伏)*1安培或4瓦的功率

如果调节器的半导体结和外壳之间的热阻为1ºC/瓦(签署为 θjc),并且安装调节器的散热器从调节器安装表面到静止环境空气的热阻为10ºC/瓦(签署为 θ卡),则半导体结和环境空气之间的总热阻为:

θja=θjc+θca=1+10=11ºC/瓦

然后,接头的温升将高于调节器周围空气的温升,由以下公式给出:

T=P*θja=4瓦*11ºC/瓦=高于环境温度44ºC

如果调节器被指定在85ºC的最高连接温度下运行,则设备不应在温度高于85–44=41ºC的环境空气中运行,否则调节器将过早失效。

如果这是不可接受的,设计者必须降低输入电压以减少功耗,通过强制气流降低热阻,或将设计更改为另一种类型(例如,开关模式调节器),以使调节器接头保持在操作限制范围内。

性能指标:IPS、OPS和基准

为了比较不同类型的计算机,制造商提出了一系列指标来量化处理器性能。

这些设备在嵌入式系统中的成功应用通常取决于以下特性:

•IPS(每秒指令数)

•OPS(每秒操作次数)

•FLOPS(浮点OPS)

•基准(标准化和专有的“样本程序”),是指示小型应用程序中处理器性能的短样本

集成电路板,或更常见的形式,百万像素(百万IPS)和双翼飞机(数十亿IPS),通常被抛出,但本质上是毫无价值的营销炒作,因为它们只描述了机器上执行最快指令的速度。该指令通常是NOP指令,因此500 MIPS可能意味着处理器每秒无法执行5亿次!

响应于IPS测量中的弱点,操作(以及拖把防喷器,至少听起来很有趣)是基于不同指令的混合的指令执行时间。其目的是使用标准执行频率加权指令组合,更准确地表示“标称”指令执行时间。

触发器(megaFLOPS、gigaFLOPS等)类似,只是它们对浮点指令进行了大量加权,以表示大量计算应用,如连续模拟和有限元分析。

OPS度量的问题在于,得到的数字在很大程度上取决于用于计算它的指令组合,这可能不能准确地表示预期的应用程序指令执行频率。

基准 基准测试是一种简短的、自包含的程序,用于执行应用程序的关键部分,例如排序算法,并用于比较不同机器上功能等效的代码。

程序运行一定次数的迭代,并测量时间并与其他CPU的时间进行比较。这里的弱点是基准测试不仅是对处理器的衡量,也是对程序员和用于实现程序的工具的衡量。

因此,最好的基准测试是你自己编写的,因为它可以让你发现你编写的代码在给定的处理器上使用可用的工具执行的效率。这与您可能获得的实际应用程序性能非常接近,除了在评估中的每个处理器上完全实现应用程序之外。

本文基于“嵌入式硬件无所不知,”经爱思唯尔旗下Newnes公司许可使用。版权所有2008。有关本书和其他类似书籍的更多信息,请访问www.elsevierdirect.com。

在这个领域有30年的经验甘瑟尔是最早的嵌入式开发人员之一。他每月在嵌入式系统设计关于集成问题,著有两本嵌入式书籍:嵌入式系统的设计艺术和嵌入式系统编程的艺术Jack举办为期一天的培训研讨会,向开发人员展示如何更快地开发更好的固件。

肯·阿诺 ,的作者嵌入式控制器硬件设计,是嵌入式计算机工程项目协调员和加州大学可持续发展学院扩展分校的讲师,也是加州在线大学的创始董事。Ken还是高科技设备公司的创始人兼首席执行官、无线创新首席技术官和通用动力公司的工程主管。