Presently preferred embodiments are described below in conjunction with the appended drawing figures, wherein like reference numerals refer to like elements in the various figures, and wherein:
The computer 108 includes a processor, data storage, and machine language instructions stored in the data storage executable by the processor as is well known in the art. The computer 108 is not limited to having any particular type of processor, data storage, or instruction format. The computer 108 may select a test application dedicated to a particular type of circuit board design. Generally, the test application drives information to the test head 106 and receives information in response.
The test head 106 receives the information from the computer 108 and responds by driving a number of test pins 110 on the test head 106, including those test pins 110 that provide data and address information to the test fixture 104. The test fixture 104 includes contacts 112 aligned with at least some of the test pins 110, which are routed to corresponding spring probes 114. The spring probes 114 are positioned in such a manner so that when the PCB 102 or the circuit board panel 200 is placed on the test fixture 104, the spring probes 114 establish contact with various test pads (not shown) located at a bottom surface of the PCB 102 or the circuit board panel 200. These test pads are routed to various pins of the components attached to the PCB 102 or the circuit board panel 200.
The processor in the computer 108 may be a vector processor, which facilitates testing the PCB 102 or the circuit board panel 200. The vector processor generates an input that is sent to the PCB 102 or the circuit board panel 200, and in response, the vector processor expects a particular output from the PCB 102 or the circuit board panel 200. If the vector processor receives the expected output, then that particular test pattern may be considered as a passing test. Otherwise, the vector processor may identify a test failure, which may indicate that there is a problem with the PCB 102 or the circuit board panel 200. While the vector processor provides efficient testing of the PCB 102 or the circuit board panel 200, this type of processor is unable to make a decision.
The ICT 100 may also be used to program memory components on the PCB 102 or the circuit board panel 200. For example, the ICT 100 may be used to program flash devices located on the PCB 102 or the circuit board panel 200. Generally, the ICT 100 sends programming commands to the flash device, applies the address and data to be programmed, and then polls to verify completion of the programming. Typically, each flash device type has specific instructions for programming that is provided to the ICT 100.
Some flash devices are designed to be programmed using vendor specific programs designed to program more than one word at a time. For example, Spansion LLC provides a MirrorBit™ flash family that includes write buffer programming. Spansion's write buffer programming allows the programming system to write to a maximum of 16 words/32 bytes in one programming operation. To use this write buffer programming, the 32 bytes must be contiguous and not cross sector boundaries. Using write buffer programming allows the flash device to be programmed faster than when using word-programming. According to Spansion's documentation, word-programming takes approximately four times as long as the write buffer mode.
As another example, STMicroelectronics provides a double word or quad byte programming mode. Note that two words and four bytes are the same, and both are referred to as double word mode herein. The double word mode requires four continuous bytes for programming. However, with a standard Motorola S-Record or Intel HEX file, words that are 0xFF at the end of a line or complete lines of 0xFF are stripped from the file, which may leave an odd number of bytes per line.
Unfortunately, the ICT 100 cannot program flash devices using the write buffer mode or the double word mode due to the inability of the vector processor to make decisions. For example, the ICT 100 cannot search forward in a file and determine which addresses can use the double word mode and which addresses cannot. Thus, it would be beneficial to provide a solution that allows the ICT 100 to use write buffer mode and/or the double write mode to program flash devices on the PCB 102 or the circuit board panel 200.
By overcoming the limitations of the vector processor, the ICT 100 can be used to program flash devices in write buffer and double word modes. For the write buffer mode, this may be accomplished by implementing a flash byte alignment program, followed by a write buffer program as described with reference to
The byte alignment program 300 is described using the non-limiting example of a Motorola formatted S-Record file, which is executable code stored in some flash devices. The total number of lines in the final Motorola S-Record file is evenly divisible by 2048 to allow program loop multiples that are evenly divisible. The format of the Motorola S-Record file is AABBCCCDDDDEE, where:
AA (1 byte): The record type starts with an S followed by a single digit. The record type defines what format and type of data is to follow. The standard types are: start record, data record, and end record. The byte alignment program 500 uses the following record types:
S0=Start record.
S1=Data Record (4 character address, 2 bytes).
S2=Data Record (6 character address, 3 bytes).
S3=Data Record (8 character address, 4 bytes).
S7=End Record
S8=End Record
S9=End Record
BB (1 byte): Record length is the byte count of the record for that line. The byte count is the total number of bytes used by the address, data, and checksum fields. Each byte of data is depicted as two characters.
CCC (2, 3, or 4 bytes depending on record type): The address location the data that follows belongs to. The first piece of data is located at the address listed in AAAAH.
DDDD (0 to n bytes): This is the data that is location at the address listed.
EE (1 byte): The checksum. The checksum is created by taking the one's complement of the sum of all the bytes in the length address and data fields. The Record type bytes are not part of the checksum calculation.
While the current example uses a Motorola formatted S-Record file as the input and output, it is understood that other file formats may be used, such as Intel Hex, binary, and code image files.
At block 302, the byte alignment program 300 is initialized. A user interface may be used to assist in the selection of options.
The S-Record file is processed based on the selected File Conversion Attributes. The File Conversion Attributes depicted in
The default offset check box allows for selection of either TI or Broadcom file offset. Other default offset selections are also possible. The offset is used when an initial value address location is not located at address 0. This may occur when a product requires the beginning flash address to be shifted in memory. The offset values for the two options depicted in
The “S0 Label” box allows the user to insert a comment at the top of the S-Record file as the ICT 100 typically ignores the S0 line. The user interface may allow the user to provide additional information to initialize the byte alignment program 300. Alternatively, the byte alignment program 300 may be designed so that the byte alignment program 500 is automatically initialized, without any user input.
Initialization typically occurs with an array of 0xFFs created for the file size of the flash. This is essentially a blank flash from address 0x00 to the end. When the user clicks the “Process” button on the user interface or the byte alignment program 300 is otherwise started, the byte alignment program 300 verifies that the file settings and configuration options are valid, and then begins processing the selected S-Record file.
Returning to
At block 312, the byte alignment program 300 counts the number of lines in the array that have data. Any line that is still contains 0xFF is ignored. These ignored lines may be created during the initialization of the array and, subsequently, are not overwritten by the S-Record file that was read and written into the array.
In the process of counting the number of lines containing data, each line that has data is initially considered as the last address. The array starts at the base address of 0x00 and continues up from there until the last address. So as the byte alignment program 500 finds a line containing data, the address of that line is larger than the previous line. In this manner, the highest address with valid data is known.
At block 314, the number of lines counted as having data is adjusted to the next even multiple of 2048 and that adjusted number becomes the number of lines included as an output of the byte alignment program 300. As described above, the total number of lines in the final Motorola S-Record file is evenly divisible by 2048 to allow program loop multiples that are evenly divisible. However, the number of lines counted may be adjusted to any other number as appropriate for loop alignment so as to provide the ICT 100 with a consistent number from which to work.
The byte alignment program 300 outputs each line with data, as well as the number of lines needed to end on an even multiple of 2048. The byte alignment program 300 may store its output in a file with an appropriate extension to identify the file type, such as a file ending with the .hpf extension. The output file may be stored in memory in the computer 108. The stored file may then be used by a write buffer program 500 described with respect to
The byte alignment program 300 may also be used to align to a number of bytes different than 32. For example, the byte alignment program 300 may be used to provide a continuous four byte alignment as needed for STMicroelectronics double word mode programming. Because words that are 0xFF at the end of a line or complete lines of 0xFF may be stripped from a standard Motorola S-Record or Intel HEX file resulting in an odd number of bytes per line, the byte alignment program 300 is needed to perform double word mode using the ICT 100. The byte alignment program 300 reintroduces the missing 0xFF bytes where needed to ensure a contiguous four byte alignment.
The write buffer program 500 is described as follows using the Write Buffer Command Set as provided by Spansion LLC, but it is understood that other flash device commands sets may be used. In Table 1, SA is sector address, WC is word count, PA is program address, PD is program data, and WBL is write buffer location. The total number of cycles in the command sequence is determined by the number of bytes written to the write buffer. The maximum number of cycles in the command sequence is 37, including the “Program Buffer to Flash” command. Additional information can be found in the Spansion LLC documentation.
At block 502, initialization occurs. Initialization may include disabling other devices that may attempt to write or otherwise access the flash devices during programming. Additionally, control lines may be set to the appropriate values (e.g., a logic-0 or a logic-1) to initiate write buffer programming. A write-enable pulse may complete the initialization process and may also occur after each bus cycle described with reference to blocks 504-514. The data in the array obtained during the byte alignment program 300 may be used during the bus cycles 504-514.
At blocks 504 and 506, the write buffer programming command sequence is initiated by writing two unlock cycles. During the first bus cycle, the data on the address bus is equal to 555H, while the data the data bus is equal to AAH. During the second bus cycle, the data on the address bus is equal to 2AAH, while the data on the data bus is equal to 55H.
At block 508, a third bus cycle writes the Write Buffer Load command (i.e., data on the data bus is equal to 25H) at the Sector Address (SA) in which programming occurs. At block 510, a fourth bus cycle writes the SA and the word count (WC) to be programmed. At block 512, the fifth bus cycle writes the first address location and data to be programmed from the array. The write-buffer-page is selected by address bits AMAX-A4. All subsequent address/data pairs must fall within the selected-write-buffer-page.
At block 514, additional bus cycles write the remaining address/data pairs into the write buffer. After the address/data pairs are written, at block 516 the “Program Buffer to Flash” confirmation command sequence is performed with the data on the address bus equal to the SA and the data the data bus is equal to 29H. After another write-enable pulse, a delay may be necessary.
The write buffer program 500 then determines whether all the lines in the S-Record have been programmed at block 518 based on the adjusted count of lines having data in the array. If not, the program 500 loops back to block 504 to repeat the process at the first bus cycle. Otherwise, at block 520 the “Write-to-Buffer-Abort Reset” command sequence is performed to reset the flash device for the next operation.
An example write buffer program segment is also provided as follows:
While an example program segment has been provided for the write buffer program 500, it is understood that there are a variety of different ways to program a function, and the write buffer program is not limited to any particular software code or structure. Moreover, instead of using the write buffer program 500, another vendor supplied specification may be used in conjunction with the byte alignment program 300.
The byte alignment program 300 and the write buffer program 500 (or other vendor write program) may be performed by the computer 108. By using these programs, the ICT may be able to implement vendor specific programs designed to program more than one word at a time. As a result, flash devices may be programmed quickly, resulting in near-free programming costs during ICT testing.
It should be understood that the illustrated embodiments are examples only and should not be taken as limiting the scope of the present invention. For example, while the invention has been described herein with reference to Spansion flash devices, the invention can be implemented with other flash devices, such as the flash devices manufactured by Sharp, Samsung, ST, Atmel, and Intel. The claims should not be read as limited to the described order or elements unless stated to that effect. Therefore, all embodiments that come within the scope and spirit of the following claims and equivalents thereto are claimed as the invention.
The present patent application claims priority under 35 U.S.C. § 119(e) to U.S. Provisional Patent Application Ser. No. 60/797,716, which was filed May 4, 2006. The full disclosure of U.S. Provisional Patent Application Ser. No. 60/797,716 is incorporated herein by reference. This application is related to the following concurrently filed U.S. Applications, which are incorporated by reference herein: U.S. patent application Ser. No. ______; filed on Jun. 15, 2006, entitled “Flash Programmer for Programming NAND Flash and NOR/NAND Combined Flash,” to Amidon et al.; andU.S. patent application Ser. No. ______; filed on Jun. 15, 2006, entitled “Parallel Programming of Flash Memory During In-Circuit Test,” to Amidon et. al.
| Number | Date | Country | |
|---|---|---|---|
| 60797716 | May 2006 | US |