一种MCU的测试解决方案

2017-03-16 03:40元,高
电子测试 2017年2期
关键词:测试程序寄存器串口

陈 元,高 剑

(集成电路测试技术北京市重点实验室,北京自动测试技术研究所,北京,100088)

一种MCU的测试解决方案

陈 元,高 剑

(集成电路测试技术北京市重点实验室,北京自动测试技术研究所,北京,100088)

对MCU进行测试时,如何高效生成测试向量是测试的难点。文章以8位MCU STC12C5410AD为例,详细地介绍了通过使用仿真环境,以C语言编写功能测试程序,完成芯片寄存器控制和主要逻辑单元运算,然后使用集成电路测试系统直接生成测试向量的解决方案。使用此解决方案,可根据测试要求,在较短时间内开发出MCU测试程序,节约测试开发成本。

单片机;MCU测试;测试向量

0 引 言

MCU(Micro Controller Unit)微控制单元,又称单片微型计算机,简称单片机,是随着大规模集成电路的出现和发展,将计算机的CPU、RAM、ROM、定时器和多种I/O 接口集成在一片芯片上,形成的芯片级计算机,为不同的应用场合做不同组合控制[1]。它具有体积小、使用灵活方便、成本低、易于产品化、抗干扰能力强等特点,在工业控制、智能仪表、外设控制、家用电器、机器人、军事装置等方面得到了广泛地应用。MCU的广泛应用和发展也给测试带来了挑战,集成电路测试一般采用实际速度下的功能测试,但半导体技术的发展使得测试开发工程资源按几何规律增长[2],测试成本也随之不断攀升。此外,由于MCU 芯片的复杂度越来越高,人工编写测试向量的工作量是极其巨大的。

本文以STC(宏晶科技)的STC12C5410AD 8位MCU为例,使用在仿真环境下编程生成测试向量的方法开发测试程序。首先以对芯片主要功能的应用为目的,编写了C语言程序;其次使用芯片开发器将编译无误的程序作为测试代码,将测试代码转化为矢量向量并下载到测试系统图形板卡中;最后将芯片通过适配器与测试系统相连,对芯片施加激励向量,同时从输出端监测测试结果,若测试结果与预期的响应向量一致,则说明激励与响应向量和实际MCU运行时的输入输出电平状态变化相一致,从而实现了对STC12C5410AD的测试。使用此方法对MCU进行测试开发,能针对MCU芯片应用开发人员关心的测试集合产生测试向量,高效并节约开发时间,可较好的控制测试成本。

1 MCU的测试方法简述

数字IC的测试主要包括功能测试和直流参数测试两个方面[3]。在MCU测试中,由于直流参数测试方法比较固定且简单,而功能测试中测试向量的生成是MCU测试的难点,所以本文着重介绍MCU功能测试中测试向量的生成。

1.1传统方法

1.1.1 伪随机测试向量生成法

伪随机测试向量生成法经历了三个阶段的发展:简单无系统的随机测试向量生成阶段,复杂约束模型和语言增强正向制导的随机测试向量生成阶段及覆盖率驱动的测试向量生成阶段。这类方法主要用于IC设计验证,在成测中较少直接使用,一般会通过借鉴或结合此方法的某些特点,将程序改进为更适合具体测试要求的测试向量。可以说伪随机测试向量生成法对成测来说是一种启发性的方法。

1.1.2 确定性测试向量生成法

采用确定性测试向量生成法可根据各种故障模型测试不同的模块, 包括中央处理单元、RAM 、中断/定时系统等等。用这种方法编写的测试程序通常包括成千上万条指令, 将指令翻译成测试向量的工作非常繁琐和重复。虽然这种方式可以很好地把握测试的进度和针对性, 但由于需要逐条翻译指令、逐行编写测试代码,实际开发测试程序的难度很大[4]。

1.1.3 学习法测试向量生成法

学习法测试向量生成法是汲取了伪随机测试向量生成法和确定性测试向量生成法各自优点的一种方法,是通过使用硬件学习功能的思路开发的一种测试向量生成方法。应用此方法首先要对单片机搭建最小系统,如适配器上除了被测器件,一般还包括EEPROM和RAM及数据锁存器等,这些器件及构成的外围电路是用于辅助生成测试代码的。首先ATE为适配器上所有元器件提供电源、接地及其他必要的信号,使DUT能稳定地工作在某种状态。其次,DUT与EEPROM及RAM之间有数据交换,同时这里的数据被ATE监控,即DUT所有的输入输出数据都会被ATE记录下来。在软件、硬件的配合与支持下,DUT运行在EEPROM中的检测程序,由ATE记录所有的数据(高、低电平)。DUT工作时的外部时钟由ATE按照要求给定,所以ATE记录数据也是严格与DUT的工作时钟同步。最后通过整理,包括区分输入输出信号、定义管脚等后期工作,就可以得到测试代码[5]。学习法需要测试开发人员对芯片进行系统的学习,从而设计故障模型和用于输入端的测试代码,且输出端数据正确与否的判断标准不明确。需要分析测试结果,不断修改并装载测试向量,逐行得到正确的测试向量集[6]。

1.2在仿真环境下编程生成测试向量的方法

使用C语言对MCU功能模块的运行进行编程,借助对应的MCU开发工具产生测试代码,再由专用的测试向量生成器生成测试向量。测试向量生成后,通过自动测试系统的软件开发环境下载到测试系统图形卡中,启动测试程序,激励向量依序施加到被测MCU的输入端口,同时对输出端口进行监测比较获得测试结果。测试向量生成器如图1所示。

图1 测试向量生成器

这种方法不苛刻地追求故障覆盖率,能灵活地针对MCU芯片应用开发人员关心的测试集合产生测试向量,因为比较高效,测试成本也能控制在比较低的水平上。

2 STC12C5410AD的测试

2.1 STC12C5410AD系列单片机简介

STC12C5410AD系列单片机是宏晶科技生产的单时钟/机器周期的高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8~12倍。

STC12C5410AD系列单片机的内部结构框图如下图所示。包含中央处理器(CPU)、运算单元(算术逻辑单元ALU,累加器ACC,B寄存器)、程序存储器(Flash)、数据存储器(SRAM)、定时/计数器、中断系统、UART串口、I/O接口、高速A/D转换、SPI接口、PCA、看门狗及片内R/C振荡器和外部晶体振荡电路等模块。其主要功能包括CPU计算功能、指令系统功能、定时及中断功能、串口及并口功能、程序和数据存储、最小系统扩展功能。

STC12C5410AD的主要功能与MCS-51系列单片机相同,但也有个别不同的结构并有一些扩展的功能。其中MCS-51系列中一些单片机需要使用片外程序存储器,其外部总线结构不同于STC12C5410AD,没有P0口或ALE/~PROG允许地址锁存输出/编程脉冲输入口、~PSEN外程序存储器读选通信号输出口和~EA/ Vpp片内、片外程序存储器选择输出/编程电压输入口。

对拥有外部存储器结构的MCS-51系列单片机,在系统上电后,会逐条从外部存储器中读取指令并运行程序。CPU 开始向外部存储器取指令时,地址锁存允许信号 ALE 升高,8位地址/数据总线上的地址被设置到所要求的状态。在 ALE 信号的下降沿,外部存储器控制电路将该地址锁存起来,从而达到把地址信号从地址/数据总线上分离出来的目的。随后读信号~RD 变低,这时候外部存储器应把有效数据提供到总线上,以便 MCU 读入数据。当~RD 升高时,数据被 MCU 取走[7]。这些管脚的状态变化和P0口的数据输出都可作为使用确定性测试向量生成法的测试依据,测试系统模拟MCU取指令的方式为其发送指令和数据,从而控制芯片进行测试。

图2 STC12C5410AD系列单片机的内部结构框图

STC12C5410AD在执行指令时,由于它没有外部存储器,也没有P0或ALE/~PROG等管脚,总线结构和CPU取指令的方式不同于上述片外存储器结构的MCS-51单片机,若使用确定性测试向量生成法,则无法通过翻译指令编写测试代码。此时,就需要使用不同于确定性测试向量生成法的方法对STC12C5410AD进行指令功能的测试。

2.2测试STC12C5410AD

在仿真环境下使用C语言编程生成测试向量的方法测试STC12C5410AD的具体操作如以下步骤所示。

首先添加STC仿真驱动到keil软件中并按要求编写程序;其次,使用编程器将程序烧入MCU,由MCU测试向量生成器生成测试向量,通过BC3192V50集成开发环境下载到测试系统图形卡中。最后,将MCU通过适配器与BC3192V50相连,启动测试程序,激励向量依序施加到被测MCU的输入端口,同时对输出端进行监测比较获得测试结果。

在完成测试向量生成步骤的过程中,最核心的部分是对程序的设计。

MCU的主要功能是控制指令执行和外设运行。MCU执行一条指令的流程可归结为:取指令、译码、取操作数、执行、保存结果。指令集存储在CPU内部,Flash负责存储程序代码和为MCU提供指令,SFR和RAM提供ALU所需的操作数并存储ALU处理后的结果[8], ALU的功能是对数据进行处理[9],包括对数据的运算处理和传送操作。外设部分的功能包括定时/计数器、中断控制、UART串口、并行I/O口。设计功能测试程序控制指令执行和外设运行即可对CPU、Flash、SFR等模块的功能进行测试。

设计程序为乘法运算和串口发送字符串数据,生成测试代码用以验证芯片主要功能。程序设计如下:

(1)串口初始化:设置系统时钟,可使用片内R/C振荡器或者外接晶振,设置使用片内R/C振荡器时钟,在5V单片机常温下频率约6MHz(XTAL1和XTAL2管脚浮空);设置时钟是否分频,要对时钟分频寄存器CLK_DIV进行设定。设置串口的工作方式,即设置串行接口控制寄存器SCON。设置波特率发生器(可用定时器1作波特率发生器),需要设定TMOD和SMOD,确定波特率。再进行启动定时器,允许串行接口中断,CPU开中断。

(2)发送数据或字符串:等待前面的数据发送完成;数据送入累加器ACC(奇偶校验位P始终体现累加器ACC中的1的个数的奇偶性),根据P来设置奇偶校验位;奇偶位送TB8;数据由ACC送到UART数据寄存器SBUF中。发送字符串则需要检测字符串结束标志位后,发送当前字符。

(3)中断服务程序:发送/接收串口数据/字符串,响应中断后,RI/TI需要软件清零。

(4)运算:STC12C5410AD中的指令与MCS-51兼容。

设置进行乘法运算,用到MUL AB指令,即累加器ACC中的8位无符号二进制数乘以B寄存器中的8位无符号二进制数,将乘积低8位送ACC累加器,高8位送B寄存器。如果乘积大于256,即高位B寄存器不为0,则OV置1;否则OV清0,CY总是清0。

使用Keil做乘法运算编程,往往只需要利用乘法表达式来编译,只要编译通过Keil就会自动地寻找寄存器把运行结果存放在里面。通常可编写一个乘法表达式把乘积结果赋值给一个存储单元[10]。

程序的基本流程图如图3所示。

图3 生成器法程序流程图

通过使用测试向量生成器,最终生成测试向量,可对MCU进行功能测试。

3 测试实验

本文采用国产集成电路测试系统BC3192V50 对STC12C5410AD进行了测试,具体的程序设计说明如下:

(1)串口初始化设置

设置使用片内R/C振荡器时钟,时钟不分频时,CLK_ DIV=0x00。

设置串口以方式3工作,SCON=0xDA。

选择定时器,TMOD = 0x20,即选择定时器1为波特率发生器,定时方式为方式2。

设SMOD=1,电源控制寄存器PCON=0x80。

设TH1=TL1=0xFF。

所以,当实时片内振荡器时钟频率为5.9MHz时,波特率=2 x 5.9MHz/32=357100 bps。

启动定时器1,TR1=1。

允许串行接口中断,ES=1。

CPU开放中断,EA=1。

(2)发送数据或字符串设置

设置发送字符串“BJ TEST/n”,字符串可从TxD管脚按二进制格式(低位在前)输出,字符对应的二进制数如表1所示。

字符串的正确输出测试了定时/计数器模块、中断控制模块、UART串口模块、CPU、Flash、ACC累加器和SBUF寄存器等。

表1 字符对应二进制数

(3)中断服务程序设置

发送数据,中断响应后,TI软件清零。

(4)运算设置

只需要利用乘法表达式来编译,通过编译即可。

判断运算结果是否正确,结果正确由并口输出规定数据,既测试了运算所用到的CPU、ALU、ROM、Flash、ACC累加器和B寄存器,也测试了并口I/O功能。

图4 TxD管脚输出第一和第二个字符的波形图

图5 TxD管脚输出第一至第六个字符的波形图

4 结语

使用上述方法编制MCU测试程序,简单易操作,可以缩短编制测试向量的时间,按照测试要求增加测试向量的故障覆盖率,节省测试程序的开发成本。

[1]吕艺,张可.高效低成本的MCU测试解决方案[J]电子工业专用设备,2007(146):23-27.

[2]蒋常斌,生晓坤,李杰等.ARM Cortex-M3 微处理器测试方法研究[J]电子测试,2013(4):8,9,26.

[3]电子计量测试应用手册编委会.电子计量测试应用手册[M]北京:电子工业部电子计量测试研究中心站,1986.

[4]胡勇,李轩冕,贺志容.单片机测试向量生成技术研究[J]计算机与数字工程,2010(9):90-92,150.

[5]赵雪莲,杨新涛,李坤.一种CPU测试程序的开发方法与实现[J]国外电子测量技术,2006(2):37-41.

[6]赵雪莲.微控制器测试向量生成方法的研究和实现[D]西南交通大学,2006.

[7]席筱颖.8位MCU设计验证及测试向量故障覆盖率分析[D]哈尔滨理工大学,2007.

[8]姚土生.一款兼容MCS-51指令8位微控制器的研究与设计[D]西安电子科技大学,2011.

[9]刘海涛.基于8位MCU核的智能编码ASIC设计[D]电子科技大学,2003.

[10]严克剑,张淼,黄先伟.单片机C语言编程中多位乘法运算问题探讨[J]广东工业大学学报,2006(12):23-26

MCU Test Solution

Chen Yuan,Gao Jian
(Beijing Key Laboratory of Integrated Circuit Testing Technology, Beijing Institute of Auto-Testing Technology, Beijing 100088, China)

How to quickly and efficiently generate the test pattern is a difficulty for MCU Test. This article introduces a test solution for STC12C5410AD 8-bit MCU, which can also be applied to test MCU with the similar structure. The solution of test is introduced in detail in this paper. C-language is applied in the programming for the control register and main logical operations in simulation environment first, and then the test vectors are generated directly by ATE. By this solution, MCU test program can be developed in a relatively short period of time according to the test requirements.

MCU; MCU test; test vectors

北京市自然科学基金委员会-北京市科学技术研究院联合资助项目(资助编号:L150009)

陈元,学士,主要研究方向为仪器与测试技术。

猜你喜欢
测试程序寄存器串口
浅谈AB PLC串口跟RFID传感器的通讯应用
Lite寄存器模型的设计与实现
基于Castle型机械手的三温量产测试平台实现
分簇结构向量寄存器分配策略研究*
手机APP交互界面人因适合性测试程序的设计与实现
中心主导制订的《VHF/UHF频率范围内测向系统测向灵敏度的测试程序》等两项国际标准在ITU官网正式发布
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
电气自动化控制设备可靠性测试探讨