I2C是一种中低数据速率主/从通信总线。物理层是一种简单的信号交换协议,该协议基于总线设备以及用于驱动或释放总线线路设备之上的集电极开路输出。简单的硬件设计和较低的数据速率使得所有的工程师都能利用I2C作为一种通信解决方案。由于大多数微控制器供应商在其大部分器件上均提供了I2C主控器和从动器功能,因此嵌入式产品设计师在利用I2C时不会遇到任何障碍。测试策略源于设计策略平稳顺利的设计需要采取有计划的校验策略。当
I2C是一种中低数据速率主/从通信总线。物理层是一种简单的信号交换协议,该协议基于总线设备以及用于驱动或释放总线线路设备之上的集电极开路输出。简单的硬件设计和较低的数据速率使得所有的工程师都能利用I2C作为一种通信解决方案。由于大多数微控制器供应商在其大部分器件上均提供了I2C主控器和从动器功能,因此嵌入式产品设计师在利用I2C时不会遇到任何障碍。
测试策略源于设计策略
平稳顺利的设计需要采取有计划的校验策略。当采用主/从通信系统时,这两部分均需进行校验。把校验推迟到主控器和从动器通信操作完成之后进行是错误的策略。下文所述是一种旨在尽可能独立地对主控器和从动器进行有效测试的策略。 在实现成功设计的规则和指导方针中,以下四点支持有效校验:
1)明确定义的接口
2)主控器初始化所有的转换,并支持从动器的“紧急”调用
3)使从动器的通信协议与主功能保持独立
4)从动器始终保持数据相关性。
虽然设计阶段中的每项工作都对校验产生影响,但以上事项是支持测试策略的特殊考虑。该策略可被概括为:
分别测试主控器和从动器
通过采用尽可能“真实”的环境来提高测试覆盖率
把从动器和主控器放在一起,以实现早期和经常性的集成
分别测试主控器和从动器 主控器和从动器被设计成分离、非耦合式的,而且设计过程专注于开发与设计细节没有关联的接口。不管是在物理结构上还是在时间顺序上,主控器和从动器的这种分离设计都支持对每个部分进行单独测试。但为了成功地测试主控器并获得可以信赖的结果,在早期必须存在某种形式的从动器,即测试从动器。这种测试从动器应该是一种设计外壳程序,用于提供商定的接口和一些额外的测试连接程序(如一个环回或一个包含稍有改动的数据的附加寄存器)。
“外壳程序(shell)”从动器使得主控器能够实现并测试其接口。适合这种“外壳程序”或测试从动器的最佳平台是将被用于从动器开发的微控制器。事实上,如果采用相同的设备来测试最终将被用于开发末级从动器的主控器,则该“外壳程序”将提供用于从动器接口的测试平台(从动器的第一级开发)。
为了使从动器的测试侧成为一个单独项,需要比实际主控器所能提供的更多主控器功能。最后需要做的就是为实际主控器开发更多的功能,为测试提供支持。测试主控器应是一个通用主控器,而且,采用一种基于PC并通过PC-I2C总线桥接器件与从动器进行通信的应用程序,将有利于大多数计划的实施。
采用“真实”环境提高测试覆盖率
最后是完成主控器和从动器的单独测试,并了解它们何时被放在一起,旨在实现最终集成。在最终集成中,主控器和从动器均未得到“实际”测验。如果在一个与最终结果不相似的环境中对它们进行测试,则至少需要重复某种冗余的测试。事实上,如果测试环境与实际环境不严格近似,则得出的将是一个令人惊讶的糟糕结果。
为避免浪费精力,应先了解测试和设计的相关知识。而且,测试将首先要求接口必须稳固(形式固定)且不变。如果定义精确并得到了严格遵守,则接口将确定“实际”环境,并规定测试环境的设计。某些信令和定时特性只在最终集成时才呈现出来,不过,当主控器和从动器测试均采用接口驱动型测试环境时,则大多数功能测试都能反映出最终结果的特征。在小概率(不受欢迎的、需要避免的、可预防的)事件(接口发生变化)中,必须立即联系到测试环境。 提早并经常性地集成从动器和主控器
单独测试的主控器和从动器只在集成和同时测试时才是完整的。如上文所述,某些特性将仅在集成过程中才表现出来。项目截止期限之前的一周(或前夜)并不是第一次遇到这种情况。接口驱动、单独测试型策略还支持早期集成,不是作为覆盖率良好的单独测试的替代方案,而是作为一种保险方案(对接口和器件特性有充分的了解)。为了支持集成,主控器和从动器均必须位于彼此都接受的完成点上,设计计划必须包括这些集成阶段。
这里给出了部分需要制定早期集成计划的阶段或测试场合,并说明需要对其加以注意的原因:
1)基本的总线电气兼容性:虽然I2C具有简单的特性,但这并不能排除诸如上拉电阻器阻值的选择以及即将共用I2C总线的其他设备的总线定时特性等基本问题。重要的是在实际的总线上进行基本的通信操作(并将所有的实际设备与总线相连)。
2)功能定时:主控器需要具有针对从动器中的响应或定时的容限,这是一个现实问题,而且,很难以书面的形式来明确地给出应具有怎样的容限。
3)紧急情况:制定从动器对主控器的紧急调用或中断计划并测试它们的发生方式和响应有可能导致从动器中的功能变化。
I2C主控器
I2C主控器通常是一种用于系统中的许多其他功能的控制装置,并具有针对增加要求或做出变更的最低灵活性,主控器负责控制接口。在定义阶段,主控器和从动器均具有输入,但是,当需要做出详细决定时,主控器可以强制一个接口决定,因为采用一种方法对主控器来说比较简单。使主控器的决策变得较为简单将给从动器带来额外的好处。主控器将(而且应该)阻碍对接口的变更,所以从动器设计师必须及早实施自己的设计并接受接口的变更。
另外,虽然对接口的变更只应由主控器来执行(或在主控器同意的情况下进行),但是,测试所产生的影响(尤其是对专为测试而构筑的“环境”的影响)也是必须考虑的。设计之初专注于接口,获得主控器、从动器和测试小组的同意,了解测试影响以及特定接口决定带来的好处,然后不要做任何变更。让新的功能逐步融入到从动器可实现方案的细节(而不是接口)。
设计一个代理从动器来支持主控器测试,如果这可以通过开发从动器来实现,效果更好。该代理从动器可能与末级从动器并不相似,因为它的主要作用是支持接口测试和校验;对于从动器来说,这意味着代理/测试从动器中将拥有额外的、非生产性功能。额外功能可能仅用于测试目的的附加寄存器和/或用于指示功能或确认命令的特殊I/O动作。把这些功能置于具有条件编辑能力的末级从动器中或许有助于在日后发生变更的情况下支持回归测试。
最后,应提早并经常性地集成主控器和实际从动器(在一个规定的开发级上),以了解不可避免的“未规定”特性。实际设备在实际I2C上彼此相遇得越早,就能越早地了解并适应其特性。
I2C从动器
设计活动的中心是从动器,而且它将耗费设计师大部分的精力(除非能够重复使用另一个项目的从动器设计)。测试工作的重点也放在从动器上,而且,从动器需要按照主控器及其测试的要求来实现。从动器很可能需要针对集成期间所了解到的信息做适应性调整,于是,这种情况出现得越早、测试的“真实性”越强,效果就越好。使主控器小组确认:集成点越多越好;它将对项目的实施提供帮助,并直接令从动器开发受益。
对大多数测试而言,一个I2C主控器测试设备(而不是实际主控器)将负责控制从动器。获得从动器完整测试覆盖率所需的灵活性将不太可能存在于实际主控器中,而在大部分时间里实际主控器将担负其他任务(配置其他器件、定时要求、以最终用户为中心的接口)。采用I2C的好处是主控器测试设备并不复杂,而且可行性好。设计小组的每一位成员都需要一个测试主控器,但它们不必是昂贵或精细复杂的主控器。
对于I2C测试主控器,根据应用场合的不同,共有三种获得途径:
1)购买一款商用I2C主控器:这些主控器通常附随一些测试软件,售价从100美元到500美元以上不等。如果选择了一款,则应确定它支持脚本编程和记录,因为在某些点上正式测试对此有所需求。
2)采用一种免费软件应用程序和自行安装硬件:许多此类产品都可以通过互联网搜索的方法找到。虽然这会使工作量略有增加,但成本较低。而且,由于用于PC的参考应用程序是开放式源代码,因此可对其进行修改以满足要求。
3)采用一个微控制器(或主控器MCU)设计主控器:明显的好处是目前的测试主控器在特性上更加接近于实际主控器,而且已经获得了用于对其进行更新和扩展的专业知识。可以把回归测试设计在测试主控器中,而不是依靠PC应用程序来完成。
结论
I2C总线通信是许多嵌入式设计的普遍现象。每种嵌入式设计都能够从把部分功能交由从动器来完成的做法当中获益,这既是出于效率的考虑,也是为了让许多项目能够重复使用经过精确测试的功能部件。如能遵循以下拟订的设计和测试策略,则定制从动器项目应能够比较顺利地继续下去:在从动器和主控器之间进行功能划分、采用功能强大的不变接口、独立地对主控器和从动器进行尽可能多的测试、在设计过程中对主控器和从动器进行早期和经常性的集成。 采用微控制器实现的定制I2C从动器设备令设计师能够重复使用一系列产品设计重复部分的即插即用功能。如果遵照用于设计和测试的规则和指导方针,则能够成功地在产品中充分利用I2C,并把更多的时间集中在市场期待的下一个出色功能上,并满足设计进度要求。