嵌入式系统设计中的串行总线解码测试
PicoTechnology胡为东
图1所示为一个典型的嵌入式系统,包含有微处理器、外围接口、内存、电源等主要部件。微处理器上有多种串行总线信号,如CAN、UART、LIN、SPI、I2C等,不同总线有不同的用途,如CAN信号主要用于微处理器与微处理器之间进行互连,I2C、SPI等信号主要用于微处理器与外网接口进行互连。
图1 典型的嵌入式系统
图2 串行总线数据的二进制、十六进制、数据信息包形式
串行通信中传输的信号即为串行总线数据。图2所示为NRZ编码数据,高电平代表二进制数据“1”,低电平代表二进制数据“0”,信号波形中传输的是一连串的“0”和“1”信息,这些数据信息也可以用十六进制表示。对于特定的串行数据标准,这些信息的组合代表了特定的数据信息包,每个数据信息包都具有不同的含义,如图2中所示,Addr=50表示的是地址信息,Start=0表示数据传输的开始。如果信号波形受到干扰或者编码方式出现问题,都有可能导致信息发生错误,不能够被接收端芯片进行正确的识别,从而导致系统工作出现故障。因此,无论是嵌入式系统硬件工程师,还是嵌入式系统软件工程师,都需要对波形信号进行解码分析,以验证是否存在软件或者硬件方面的错误,理解总线上所传输的信息情况。
许多工程师可能会通过手动测量的方法,从物理波形上获得“0”、“1”信息,然后再通过计算获取数据包信息,如图3所示。这种方法不仅非常枯燥、费时,而且极其容易出错,特别是当有多个连续“1”电平或有多个连续“0“电平时,工程师往往更难以准确地测量出波形中所包含的高低电平信息。
图3 手动方法获取数据包信息
其实,目前大部分示波器都已经具备对采集到的串行数据进行解码分析的功能,可以方便地将串行总线数据解码成二进制、十进制、十六进制、ASCII、数据帧信息,甚至直接显示应用层信息。
图4所示为英国比克科技(Pico Technology)的PicoScopes对CAN总线信号的解码示例。解码信息在屏幕上分别以总线形式或者以表格形式显示,不同的数据包信息会以不同的颜色进行标注,非常清晰。表格中的每一条解码信息与模拟波形是关联的,便于工程师查看某一个数据信息包所对应的模拟波形信息。表格中的信息包也可以进行相关的设置,工程师可以选择查看数据信息包的全部内容或感兴趣的部分内容,可以对数据信息包进行搜索、过滤,也可以对数据信息包进行保存等等。
图4 PicoScopes对CAN信号的解码
实际情况中,由于购买一台示波器(尤其是进口的设备)价格不菲,而且解码软件往往不是免费提供的,通常一个串行总线解码软件选项可能需要几百上千美金,而嵌入式系统中总线数量很多,如果都要配齐解码软件,将会是一笔不小的开支。这也导致很多嵌入式系统工程师或者嵌入式系统专业的学生无法使用上先进的工具来提升他们的工作或学习效率。英国比克科技(Pico Technology)的基于PC的便携式示波器是适合于嵌入式系统总线解码的高性价比方案,特别是所有的软件(包括解码软件)都是标准配置,而且将来还可以免费升级使用最新的软件和新增加的解码选项,图5所示为PicoScope 2000及其标配的解码软件选项。