IntroductionPrior to testing the functionality of a semiconductor device, it is often a requirement to verify the structural integrity of the device including connections from the tester to the device. DC Parametric Measurement Units (PMU's) which are used to perform dc characterization tests on a device by forcing a voltage and measuring a current, and by forcing a current and measuring a voltage. This same PMU can be used to verify the integrity of connections between the UUT and tester.
This article focuses on how the the per-pin PMU capabilities of the GX5295 can be used to perform continuity and shorts / opens tests on the device under test. The test programs are written in ATEasy, although any modern programming language could be used. All screen captures are of the ATEasy application. The tests described here can be conducted on a wide variety of devices, from semiconductor IC's to printed circuit boards, so the ATEasy application was written to allow easier migration to other devices. | |
Continuity TestThe first step in the test process, and the focus of this article, is to determine if the Device Under Test (DUT) is connected to the tester resources – in this case the GX5295 Digital IO (DIO). This test is called a “Continuity” test, and it verifies continuity between the tester and DUT by detecting the ESD diode found on IC pins. Tester-to-DUT continuity is measured by forcing a small current on to the DUT pins, and measuring for the presence or absence of a voltage. This utilizes the Force Current, Measure Voltage (FIMV) capability of the GX5295’s PMU. The ESD protection diode is a semiconductor device, and the voltage developed across it when a current flows is consistent with the voltage drop across a semiconductor junction. If the ESD diode is not present, or in the case of continuity tests, if the tester is not connected to the DUT pin, current will not flow through the ESD diode and the voltage will be inconsistent with semiconductor junction voltage drops. If the ESD diode is defective, then other voltage anomalies can be detected, such as “0” volts measured across an ESD diode in cases where the diode is shorted. |
Pin MappingBefore any test or measurement can be performed, you must define the system configuration. An ATEasy "Command" was created that allows the test programmer to define the number of DUT's (Device Under Test) installed in the test fixture, and their pin counts. For additional information about defining commands in ATEasy, refer to the ATEasy Help/Commands on-line documentation. It is assumed that all of the DUT's are of the same type device. The command specifys the number of DUT devices to test (nCount), and the number of pins per DUT (nPins), takes the form:
Dut Define Counts(nCount, nPins)
In order to force currents and measure voltages on DUT pins, it is necessary to define in software the connections between the tester resources and the DUT IO. In this example, pin mapping is performed using another special command defined in ATEasy that will store the “Tester-Channel to DUT-Pin” correlation in a structured array. The pin-map structure also holds the DUT pin name and pin type (Output, Input, IO, Vcc1:4 and Ground) - which is useful for providing information about the pins being tested. When used, the “Dut Define PinMap” command specifies the DUT pin_type, the DUT pin_name, the DUT pin_number, and an array containing the DIO channel numbers channel_number. An array is used for the DIO channel numbers to support mapping pins from multiple DUT devices to appropriate DIO channels. | |
The command takes the form:
Dut Define PinMap pin_type ("pin_name", pin_number, channel_number[])
The sample device used is an SN74HC273 octal latch in a 20-pin TSSOP package. The commands for defining the number of DUT devices, the DUT pin count, and the DUT/DIO pin mapping are shown below.
Note: The DIO channel array is defined in line with the pin mapping commands for clarity, but could be entered via oteher means, such as reading from a file or spreadsheet, or by entering the channel numbers from a dedicated GUI, to mention a few:
Dut Define Counts(1,20)
Dut.DioChannels={0} Dut Define PinMap Input ("Clr-", 1, Dut.DioChannels) Dut.DioChannels={1} Dut Define PinMap Output ("Q1" , 2, Dut.DioChannels) Dut.DioChannels={2} Dut Define PinMap Input ("D1" , 3, Dut.DioChannels) Dut.DioChannels={7} Dut Define PinMap Input ("D2" , 4, Dut.DioChannels) Dut.DioChannels={4} Dut Define PinMap Output ("Q2" , 5, Dut.DioChannels) Dut.DioChannels={5} Dut Define PinMap Output ("Q3" , 6, Dut.DioChannels) Dut.DioChannels={6} Dut Define PinMap Input ("D3" , 7, Dut.DioChannels) Dut.DioChannels={3} Dut Define PinMap Input ("D4" , 8, Dut.DioChannels) Dut.DioChannels={8} Dut Define PinMap Output ("Q4" , 9, Dut.DioChannels) Dut.DioChannels={-1} Dut Define PinMap Ground ("Gnd" ,10, Dut.DioChannels) Dut.DioChannels={17} Dut Define PinMap Input ("Clk+",11, Dut.DioChannels) Dut.DioChannels={15} Dut Define PinMap Output ("Q5" ,12, Dut.DioChannels) Dut.DioChannels={10} Dut Define PinMap Input ("D5" ,13, Dut.DioChannels) Dut.DioChannels={13} Dut Define PinMap Input ("D6" ,14, Dut.DioChannels) Dut.DioChannels={12} Dut Define PinMap Output ("Q6" ,15, Dut.DioChannels) Dut.DioChannels={11} Dut Define PinMap Output ("Q7" ,16, Dut.DioChannels) Dut.DioChannels={14} Dut Define PinMap Input ("D7" ,17, Dut.DioChannels) Dut.DioChannels={9} Dut Define PinMap Input ("D8" ,18, Dut.DioChannels) Dut.DioChannels={16} Dut Define PinMap Output ("Q8" ,19, Dut.DioChannels) Dut.DioChannels={1000} Dut Define PinMap Vcc1 ("Vcc" ,20, Dut.DioChannels)
Note: Two special pin mapping parameters need to be mentioned. First, the "-1" DIO channel specified for the DUT "Gnd" signal indicates that this DUT pin is not mapped to any DIO channel. In this case, this is due to the layout of the DUT load board, which connected the DUT Gnd pin to a ground plane, rather than a DIO channel. Second, specifying DIO channel "1000" for the DUT "+5V" Vcc pin means the Vcc pin is connected to one of the four auxilliary IO pins on the GX5295. These "Aux" channels are mapped to DIO channels starting at 1000. Specifying DIO channel 1000 as the DUT Vcc input means that the GX5295 AUX 0 channel will be supplying the Vcc voltage for the DUT.
Continuity MeasurementTo test for continuity, another ATEasy command has been defined. This command accepts the DUT number and the DUT pin. The DUT pin is a type Variant and can accept the DUT name, as defined by the pin mapping command, the DUT pin number as a text parameter, or the DUT pin number as a numeric parameter. Two other parameters are passed by reference (pointer) and return the DUT pin number and DUT pin name associated with the DUT pin Variant. The command returns a type Double voltage measurement for the specified pin after a small negative current is first applied to the pin. The command takes the form:
dMeasurement = Dut PMU Measure Continuity (nDutNumber, varDutPin, pnDutPin, psDutPin)
As an object oriented programming language, ATEasy allow a unique name for each test defined in it’s Task/Test structure (see ATEasy Help/Test). The test name is accessible as a text string at run-time using the "Test" object variable and the “Name” property, as shown below:
string = Test.Name
This simplifies the overall test program to simply calling the Dut PMU Measure Continuity() command using Test.Name, and defining the Test.Name to be either the DUT pin name, or the DUT pin number. The example below measures continuity on the DUT pin defined by the test name, and using ATEasy’s internally defined TestResult variable to store the continuity measurement. The continuity measurements can all be invoked the same for each test:
TestResult=Dut PMU Measure Continuity (1, Test.Name, pnDutPin, psDutPin)
An example of the ATEasy Task/Test structure is shown in figure 1 below. Notice that each test name is unique and the same as the names used in the pin mapping commands from above. Notice also that each test provides the minimum and maximum voltages for determining the Pass/Fail status of the continuity test (Min/Max parameters are visible just above the highlighted command). ATEasy will automatically evaluate the measurement returned to TestResult against the Min/Max parameters to determine the Pass/Fail status of each continuity measurement, and will automatically report the results of the evaluation to the Test Log (standard output) or Test Executive (ATEasy’s Test Management driver utility).
Figure 1: Continuity Task/Test Structure and Test Command
The Test PMU Measure Command is attached to a procedure call where the continuity measurement occurs. The procedure, TestContinuity, is located in a driver called DUT, as are the commands discussed in this article. The procedure calls another procedure, _GetPinInfo, which searches the structure array for the name or number of the DUT Variant pin passed in by the command, and when found, extracts the DUT pin number and DIO channel number associated with that pin. The code for _GetPinInfo is shown below:
Procedure _GetPinInfo(nDutNumber, varDutPin, nDioPin, pnDutPin, psDutPin): Void -------------------------------------------------------------------------------- nDutNumber: Val Short !DUT device number varDutPin: Val Variant !DUT Pin ("Name", "Number" or valNumber) nDioPin: Var Short !DIO Channel number pnDutPin: Var Short !Returned DUT pin number psDutPin: Var String !Returned DUT pin name nHandle: Short !DIO handle iPin: Long !Pin index counter
{ ! Get the DIO session handle Dio Get MasterHandle(nHandle)
If VarType(varDutPin)=vtBstr ! The procedure searches the structure array for the "name" ! or "number" of the DUT pin passed in by the command,... For iPin=0 to m_nDutCount[1]-1 ! and when "name" is found... If LCase(m_astDomain[nDutNumber-1,iPin].Name)=LCase(varDutPin) ! the DUT pin number is saved, ... pnDutPin=iPin+1 ! the DUT pin name is saved, ... psDutPin=m_astDomain[nDutNumber-1,iPin].Name ! the DIO channel number is used for the measurement process nDioPin=m_astDomain[nDutNumber-1,iPin].DIO ExitLoop ! exit the loop ! or when "number" is found... ElseIf Val(varDutPin)=(iPin+1) ! the DUT pin number is saved, ... pnDutPin=iPin+1 ! the DUT pin name is saved, ... psDutPin=m_astDomain[nDutNumber-1,iPin].Name ! the DIO channel number is used for the measurement process nDioPin=m_astDomain[nDutNumber-1,iPin].DIO ExitLoop ! exit the loop EndIf Next
! If the DUT pin "name/number" was not found... If iPin=m_nDutCount[1] ! generate an error exception and return Error 1,"DUT pin name/number \""+varDutPin+"\" not found" Return EndIf Else pnDutPin=varDutPin ! If the DUT pin number exceeds it's limits... If pnDutPin<1 or pnDutPin>m_nDutCount[1] ! generate an error exception and return Error 1,"DUT pin number "+Str(pnDutPin)+" invalid" Return EndIf
! The DUT pin name is saved, and ... psDutPin=m_astDomain[nDutNumber-1,pnDutPin-1].Name ! the DIO channel number is used for the measurement process nDioPin=m_astDomain[nDutNumber-1,pnDutPin-1].DIO EndIf }
The DIO channel number returned by _GetPinInfo is used for the continuity measurement. The DIO channel is placed in the Force Current mode and the commutating voltages (voltage clamps) of +5V and -2V are applied to the DIO channel to keep the DUT pin voltage to a level that is safe for the DUT. A small negative current (-0.5mA) is applied to the DIO channel, and the resulting voltage is measured. Once the measurement is complete, the DIO channel is returned to dynamic mode (default) and the measured voltage is returned to the calling command. The full ATEasy algorithm is shown below:
Procedure TestContinuity(nDutNumber, varDutPin, pnDutPin, psDutPin): Double -------------------------------------------------------------------------------- nDutNumber: Val Short !DUT device number varDutPin: Val Variant !DUT Pin ("Name", "Number" or valNumber) pnDutPin: Var Short !Returned DUT pin number psDutPin: Var String !Returned DUT pin name nDioPin: Short !DIO Channel number dContinuity: Double !Continuity voltage measurement nHandle: Short !DIO handle { ! Get the DIO session handle Dio Get MasterHandle(nHandle) _GetPinInfo(nDutNumber,varDutPin,nDioPin,pnDutPin,psDutPin) ! The DIO channel is placed in the Force Current mode and... Dio Setup Channels Mode PmuForceCurrentMode RangeOfChannels(nHandle,nDioPin,nDioPin) ! commutating voltages (voltage clamps) of +5V and -2V are defined Dio Setup Channels PMU ForcedCurrentCommutatingVoltage RangeOfChannels(nHandle,nDioPin,nDioPin,5.0,-2.0) ! A small negative current (-0.5mA) is applied to the DIO channel, and... Dio Setup Channels PMU ForceCurrent RangeOfChannels(nHandle,nDioPin,nDioPin,-0.5,aPmuCurrentRange_n2ma_to_p2ma) ! the resulting voltage is measured Dio Measure PmuVoltage(nHandle,nDioPin,dContinuity,250) ! The DIO channel is returned to dynamic (default) mode and... Dio Setup Channels Mode DynamicIo RangeOfChannels(nHandle,nDioPin,nDioPin) ! the measured voltage is returned to the calling command Return dContinuity }
ResultsATEasy automatically evaluates the measurement returned to TestResult against the test’s Min/Max parameters to determine the Pass/Fail status of each continuity measurement, and reports the results of the evaluation to the Test Log (standard output) or Test Executive (ATEasy’s Test Management driver utility). Figure 2 shows the Test Executive output with a DUT open continuity failure for pin 2, and a DUT short continuity failure for pin 9.
Figure 2: ATEasy Test Executive Output with DUT continuity Failures
The ATEasy project files for this article can be downloaded here.
|