張春宇
(中國電子科技集團公司第四十七研究所,沈陽 110032)
集成電路的發(fā)明與應(yīng)用是20世紀(jì)人類科技發(fā)展史上一顆最為璀璨的明珠,它改變了人類的生產(chǎn)生活和思維方式,為世界的經(jīng)濟繁榮、社會進步做出重大貢獻。進入二十一世紀(jì),集成電路產(chǎn)業(yè)得到空前發(fā)展與壯大,各種各樣的電子產(chǎn)品被科學(xué)家們研制出來,并應(yīng)用于各行各業(yè),這對集成電路生產(chǎn)者來說是一個巨大的挑戰(zhàn)??s短生產(chǎn)周期、及時提供高質(zhì)量的產(chǎn)品成為他們研究的首要問題,而在集成電路的整個生產(chǎn)過程中,測試過程是一個非常關(guān)鍵和耗時的工序,所以提高集成電路測試技術(shù),縮短測試時間,可大大縮短生產(chǎn)周期。計算機作為一種高速精準(zhǔn)的高科技產(chǎn)品,被科學(xué)家們應(yīng)用到集成電路測試中。計算機輔助測試(Computer Aided Testing,CAT)技術(shù)在此背景下應(yīng)運而生,被廣泛用來搭建集成電路測試系統(tǒng),達到測試的目的[1]。
DS1302 是DALLAS 公司推出的萬年歷時鐘芯片,內(nèi)含7 字節(jié)實時時鐘、日歷寄存器和31 字節(jié)靜態(tài)RAM 寄存器。 實時時鐘、日歷電路提供秒、分、時、日、月、星期和年的信息設(shè)置及讀取,平年和閏年每月的天數(shù)可自動調(diào)整;通過設(shè)置小時寄存器可決定采用24 或12 小時工作模式。在應(yīng)用系統(tǒng)中DS1302 芯片只能作為從設(shè)備,它與主控設(shè)備之間的聯(lián)系是通過串行外設(shè)接口(Serial Peripheral Interface,SPI)來實現(xiàn)的。SPI 總線是一種同步串行外設(shè)接口,它可以使MCU 與各種外圍設(shè)備以串行方式進行通信以交換信息。DS1302 芯片通過 SCLK、I/O、RST 三個管腳與主控芯片的SPI 接口或普通I/O 口進行連接。編寫主控芯片的底層程序,即可實現(xiàn)對DS1302芯片的讀寫控制。
根據(jù)DS1302 芯片的功能特點,經(jīng)過詳細的需求分析,搭建上位機-下位機(主控設(shè)備)-從設(shè)備的系統(tǒng)架構(gòu)。選擇PC 機作為上位機,負責(zé)將測試命令發(fā)送給下位機,并接收下位機的返回信息,進行顯示與存儲。選擇單片機作為下位機,負責(zé)接收上位機發(fā)送的命令,根據(jù)命令再對DS1302 進行控制,并負責(zé)將DS1302 返回的數(shù)據(jù)發(fā)送給上位機。DS1302 作為從設(shè)備只能被單片機控制,執(zhí)行單片機發(fā)送的命令并返回信息。這里單片機在與上位機通訊的網(wǎng)絡(luò)中稱為下位機,在與DS1302 芯片通訊的網(wǎng)絡(luò)中稱為主控設(shè)備,起到了承上啟下的作用[2-3]。
在系統(tǒng)硬件架構(gòu)中,采用PC 機作為上位機,8位單片機STC89C51 作為下位機;上位機與下位機之間經(jīng)過串口串行端口進行連接[4]。由于上位機的RS232 接口為負邏輯電平,不能直接與下位機的串行端口連接,因此在兩者之間添加MAXIM 公司的MAX232 電平轉(zhuǎn)換芯片。由于STC89C51 沒有專用SPI 接口,特別采用P2 端口的3 根口線,與DS1302的SPI 接口進行連接。系統(tǒng)的硬件連接如圖1所示。
圖1 系統(tǒng)硬件連接圖
系統(tǒng)整體的軟件設(shè)計基于上位機與下位機之間通訊協(xié)議,包括上位機軟件設(shè)計和下位機軟件設(shè)計。
上位機與下位機之間的通訊協(xié)議是指兩者之間按照約定的數(shù)據(jù)幀格式進行通訊,每一數(shù)據(jù)幀中,都會包含開始字符、結(jié)束字符、數(shù)據(jù)幀長度和命令碼等信息。上位機發(fā)送給下位機的數(shù)據(jù)幀中的命令碼,以及下位機返回給上位機的數(shù)據(jù)幀格式中的命令碼的定義如表1所示。
表1 通迅中使用的命令碼
3.2.1 上位機程序設(shè)計
上位機軟件采用Visual Studio 2010 中的C#語言,在Windows 7 環(huán)境下開發(fā)[5]。C#是一種最新的、面向?qū)ο蟮木幊陶Z言,它使得程序員能夠更快捷地編寫各種基于Microsoft.NET 平臺的應(yīng)用程序[6]。在Visual Studio 2010 中編寫串口通訊程序要比在微軟早期版本的編程環(huán)境下更為方便,它提供了一個SerialPort 類,所有與串口相關(guān)的操作都可以用此類的實例來完成,如SerialPort.Open()方法為打開一個新的串行端口連接,SerialPort.Close()方法為關(guān)閉已打開的串行端口連接,SerialPort.Read()方法為從接收緩沖區(qū)讀取數(shù)據(jù),SerialPort.Write()方法為發(fā)送數(shù)據(jù)到發(fā)送緩沖區(qū)[7]等等。軟件界面如圖2所示。
圖2 上位機程序主界面
上位機程序設(shè)計包括對DS1302 芯片的功能測試、時間寄存器測試和RAM 寄存器測試三個部分。
(1)功能測試模塊
系統(tǒng)依次提取功能測試時間列表中設(shè)置的時間,將時間信息寫入到待發(fā)送數(shù)據(jù)幀中,然后發(fā)送命令碼為0 的數(shù)據(jù)幀,再延時發(fā)送命令碼為1 的數(shù)據(jù)幀,讀取下位機返回的數(shù)據(jù)幀,并進行判斷與顯示。如果返回的時間按照1 秒遞增變化,則芯片功能正確,反之則芯片功能錯誤。在功能測試時間列表中,設(shè)置了一些關(guān)鍵時間點,如設(shè)置平年的月末、年末,閏年的2 月28 日,2 月29 日,年末等。為適應(yīng)不同的測試要求,功能測試時間列表中的測試項可按照需要增加或減少,而不需要改變程序代碼。功能測試模塊程序流程圖如圖3所示。
圖3 上位機功能測試模塊程序流程圖
(2)時間寄存器測試模塊
和時間相關(guān)的寄存器共有7 個,分別有:秒、分、時、日、月、星期和年。每個寄存器存儲的數(shù)值范圍不同,要實現(xiàn)全覆蓋測試,需要分別進行測試。以秒寄存器為例,它存儲數(shù)值的范圍為0~59,上位機程序需要將從0 到59 共60 個數(shù)分別寫入寄存器,并且在每次寫入成功之后能準(zhǔn)確讀出,則證明秒寄存器正確。其它6 個寄存器的測試方法與秒寄存器類似。上位機發(fā)送給下位機的數(shù)據(jù)幀中,設(shè)置秒寄存器的數(shù)據(jù)幀中的關(guān)鍵數(shù)據(jù)為寄存器地址0x80,命令碼為4;讀取寄存器的數(shù)據(jù)幀中的關(guān)鍵數(shù)據(jù)為寄存器地址0x81,命令碼為 5。
(3)RAM 寄存器測試模塊
將從 0 到 255 共 256 個數(shù)寫入到 RAM 中,再讀出,寫入的數(shù)據(jù)與讀出相同,則RAM 寄存器正確??墒褂脙煞N方式進行RAM 寄存器測試:單字節(jié)模式和多字節(jié)模式。
在單字節(jié)模式中,上位機發(fā)送給下位機的數(shù)據(jù)幀格式和時間寄存器測試方法中的格式相同,設(shè)置RAM 寄存器的數(shù)據(jù)幀中關(guān)鍵數(shù)據(jù)為RAM 寄存器地址,命令碼為4;讀取RAM 寄存器的數(shù)據(jù)幀中關(guān)鍵數(shù)據(jù)為RAM 寄存器地址,命令碼為5。
在多字節(jié)模式中,上位機發(fā)送給下位機的數(shù)據(jù)幀中,設(shè)置RAM 寄存器的重要數(shù)據(jù)為寄存器地址0xFE,命令碼為2,讀取RAM 寄存器的重要數(shù)據(jù)為寄存器地址0xFF,命令碼為3。
由于DS1302 時間寄存器中存儲的數(shù)據(jù)為BCD碼(Binary-Coded Decimal,又稱二進碼十進數(shù))格式,將時間數(shù)據(jù)寫入DS1302 之前,或者從DS1302讀取的時間數(shù)據(jù)在顯示前要進行格式轉(zhuǎn)換。此步轉(zhuǎn)換操作可由上位機程序完成,也可由下位機程序完成,在該系統(tǒng)中是由上位機程序完成的。比如上位機要發(fā)送55 秒這個數(shù)據(jù)給下位機,實際發(fā)送的是十六進制的55,上位機收到的秒寄存器的數(shù)據(jù)為23,實際的秒時間為17 秒。
3.2.2 下位機程序設(shè)計
下位機軟件是在Keil μVision 4 環(huán)境下使用C語言編寫。Keil C51 是美國Keil Software 公司出品的51 系列兼容單片機C 語言軟件開發(fā)系統(tǒng)。與匯編語言相比,C 語言在功能、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,選擇C 語言進行單片機程序開發(fā)已成為大多數(shù)程序員的第一選擇[8]。Keil 提供了包括C 編譯器、宏匯編、鏈接器、庫管理和一個功能強大的仿真調(diào)試器在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(μVision)將這些部分組合在一起。
在下位機主函數(shù)程序中,先進行系統(tǒng)的初始化,包括設(shè)置定時器1 工作模式,選用串口工作模式,定時器設(shè)置初值,中斷允許寄存器設(shè)置,啟動串口的接收中斷,啟動定時器1 等。使其處于while(1)循環(huán)中,在循環(huán)中判斷標(biāo)志位變量的值。當(dāng)發(fā)生了串口接收中斷后,接收上位機發(fā)送的數(shù)據(jù)幀,并置位標(biāo)志位變量USART_RX_STA 的值。在主函數(shù)中檢測到標(biāo)志位變量USART_RX_STA 的值被置位則開始解析接收到的數(shù)據(jù)幀,根據(jù)接收到的不同的命令碼來驅(qū)動DS1302 芯片,達到測試的目的。下位機的主函數(shù)程序流程圖如圖4所示。
當(dāng)上位機發(fā)送數(shù)據(jù)幀給下位機時,觸發(fā)下位機的串口接收中斷,下位機串口接收中斷程序流程圖如圖5所示。
圖4 下位機主函數(shù)流程圖
圖5 下位機串口接收中斷流程圖
應(yīng)用上述方案設(shè)計的DS1302 測試系統(tǒng),對DS1302 芯片進行了批量測試,測試效率有顯著的提高,實現(xiàn)了預(yù)期的測試目標(biāo)。該系統(tǒng)還具有可移植性高的優(yōu)點,用于其它接口的被控器件時,在硬件方面上/下位機結(jié)構(gòu)都不需要修改,只需考慮單片機與被控器件的連接及軟件方面,簡單修改上/下位機程序和通訊協(xié)議即可實現(xiàn)對該被控器件的測試。因此該設(shè)計方法對于集成電路測試具有較高的推廣價值。