處理老舊技術會帶來有趣的挑戰;雖然現代的可程式化元件透過JTAG或SPI介面很容易實現電路測試(tested in circuit,或稱「線上測試」),但測試較老的元件就沒這麼方便了。

我從事的是一個大型有線數位電話交換系統的維護工作;這些系統最早是在1980年代初期設計的,但目前在美國各地仍能看到這些系統提供服務,因此需要經常維護和修理。其中,經常需要維修的板卡是音訊產生卡(tone generation card),負責產生電話系統中用到的所有聲音訊號,比如鈴聲、忙線音、雙音多頻訊號(DTMF)和多頻(MF)訊號音。

這些聲音的產生是透過將數位化的聲音片段組合成完整的複合音;這片音訊產生卡上共有6顆採用24pin DIP封裝的老式1k×8可程式唯讀記憶體(PROM),聲音片段就儲存在這些PROM內。這片板卡最常見的問題,是其中一顆PROM上的某個單元出現故障,但由於電路配置的原因,除非從板子上把PROM拔下來然後用編程器一顆顆讀,根本無法得知道是那一顆故障。

還好這些PROM都是插在板子上,比較容易拔;但畢竟已經待在原位許多年,有時也不太容易移動;無論如何,損壞良好PROM的風險很高,而且移除、測試和替換的工作十分繁瑣耗時。本設計實例分享一種電路測試器,可以夾在每顆PROM上進行測試,不用將RPOM從電路板上拔下;PCB板上有一個測試點(test point),它能夠禁用PROM的位址驅動器(address driver),所以其接取完全受測試電路控制。

只要將該測試點接地,測試器就可以依次安裝到每顆PROM上;該測試器上有一顆PIC16F887微控制器,透過計算縱向檢查總和(longitudinal checksum)驗證PROM,將計算出來的檢查總和與6個已知的正確檢查總和值進行比對。

如果能匹配,6顆綠色LED燈中的一顆就會點亮,顯示發現一顆良好PROM並做為辨識(這是很有用的,我就曾經插錯過PROM);如果檢查總和都不匹配,則是會點亮紅色LED燈,顯示測試器連接的是一顆故障/無法識別的PROM。

該測試器的電路是用Diptrace設計的,軟體碼則是用Microchip的MPLABX開發。

測試器PCB連接到一個24接腳的DIP測試夾具;測試夾的一排接腳以穿透方式插入電路板,另一排接腳則以電線連接電路板,因此可以用擠壓方式張開。電路在測試中從電路板汲取店員,也可以透過6腳插頭(header)連接到5V電源,用以測試平台上鬆散排列的PROM。

測試器的電路很簡單(參考圖1):10位元PROM位址匯流排與PIC上的8位元PORTA以及2位元PORT E連結,PROM資料輸出連結至PORTD;LED連到PORTC,6腳插頭用於將PIC連接到PICkit編程模組進行程式下載。

20161005TA01P1
圖1 PROM測試器內部電路圖。



在上電重置後,程式設定連接埠並初始化變數,然後進入無限迴路(infinite loop)。首先清除LED狀態,然後逐個讀取所有1k位址,同時將從每個位址讀出的資料逐步累計;在讀完整個地址範圍時,累計總值就等於待測PROM的縱向檢查總和。

將這個值與6個已知正確的檢查總和進行比較;如果發現匹配,相應的綠色LED就被點亮。如果未找到有效的檢查總和,則是亮紅色LED燈 (圖2)。延遲迴路將插入一個暫停,然後程式返回到迴路的起點,將LED關閉;這樣相對應的LED就會發出我們想要的閃爍狀態——確認電路在正常運作。

20161005TA01P21
圖2 PROM電路測試器運作機制。