软件辅助诊断接口卡故障

Author: (王志刚) Date: 1991-12-27

        一、测试原理
        我们可以将接口电路按功能大致分作三部分:一是端口译码电路,当CPU对某端口地址作访问时,正常译码电路其输出端应有跳变信号,而有故障时则无,如果让CPU循环访问端口,则译码输出端应有脉冲信号,借助于逻辑笔或示波器可方便地观察端口译码电路正常工作否。二是数据输出口,包括命令控制口等,这类口多半都可以逆向读回,通过写入读回后的比较可以很容易地找出是否输出寄存器或锁存器有故障。三是状态口,这类口是向CPU提供外设状态的缓冲口,CPU可以读取并分析外设的工作状态,当然我们也可以通过读取这些口的信息,然后和外设的当前状态进行比较,并可判断是否此类口的通路有故障。
        DEBUG有两个端口控制命令,分别为读端口命令I和置端口命令O,两命令的格式如下:
        I端口地址
        O端口地址  数据
        地址和数据都为十六进制数,通过这两条命令,我们可以直接和端口打交道,获取端口状态与发出控制命令。
        二、打印适配器检修示例:打印适配器由数据接收器、命令控制器以及打印机状态口组成,三者的数据都可通过缓冲器反馈到系统总线,CPU读相应端口寄存器可获得这些口的数据和状态信息。正常情况下,主机与脱机两种状态下如表所列两组数据;
        状态端口 联机ON LINE 脱机OFF LING
        数据口 AA AA
        控制口 EC EC
        状态口 DF 7F
        
        如若不是则可根据情况大致可以确定故障元器件部位:
        当两组数据相差甚远,特别是读取的数据呈随机性变化时,则多半是端口译码电路有故障,端口无法被选中,读回的是总线上的随机数据。当然也有可能是数据收发电路发生了故障,这种情况下可以在DEBUG下汇编与执行以下一段汇编语言程序:
        DEBUG2
        -A100
        MOV  DX,378
        MOV  AL,FF
        OUT  DX,AL
        MOV  AL,00
        OUT  DX,AL
        JMP  100
        
        -G=100
        再用示波器或逻辑笔观察接口卡上的数据锁存器(一般为74LS373)的第11脚有无脉冲信号,如果无则可以肯定是端口译码器坏了(一般为LS138),否则是数据收发器发生了故障,此器件一般为LS245,它控制数据的进与出。
        送往数据口的数据遂向读回时要经过数据缓冲器。若数据锁存器或缓冲器之一坏了则读回的数据和原写进去的数肯定不一致,自检不能通过,在BIOS通讯区的40:08和40:09两单元内容将为0,而非数据口地址378H。到底是锁存器坏还是缓冲器有问题?我们选假设锁存器是正常的,通过DEBUG将端口地址置到上述两单元中;如果控制口和状态口均无问题,
        -E40:08  78  03
        则经过上述处理后打印机应能正常打印,且说明锁存器无多大问题,故障出在数据缓冲器身上,此件一般为74LS244。否则说明数据锁存器故障。
        诊断上述故障的另外一种方法是在DEBUG下运行前面介绍过的汇编语言程序,然后用示波器观察数据锁存器的各输出脚,正常时应都有脉冲信号。
        排除数据口的故障后,可进一步测试控制口和状态口。测试控制口可采用类似于测试数据口的方法。状态口的各位定义如下:
        7 6 5 4 3 2 1 0× × ×
        0 I/O错1 无I/O错
        01
        0 有纸1 无纸
        0 响应1
        0 忙1 不忙
        
        接上打印机后,读取37A端口的状态信息,正常的应该为DFH,可以采用制造打印机无纸、不联打印机(OFF  LINE)等手段改变状态,再反复读取状态口的数据,比较前后几组数据中各位随打印机不同设置后的状态变化,找出故障位,然后用示波器跟踪测试该信号线路上各元器件的输入输出电平,根据逻辑关系可以推出故障元器件。
        例1:某接口卡无论打印机是ON  LINE还是OFF  LINE,读得的状态口信息最高位为0,也即BUSY信息位线路上有故障,因该信号经74LS240缓冲后送数据收发器,换下该元件后故障排除。
        例2:一台IBM一PC兼容机在打印机有纸的情况下,读得的状态口D5位始终为1,PE信号经一个异或门(起反相作用)到状态口缓冲器,通过示波器测试该异或门,无论有无纸,其输出端始终为高电平,换下该器件后故障排除。
        三、软盘接口卡检修示例
        601故障代码一般表明软盘接口卡故障。开机自检后报“601  ERROR  (RESUME=F1  KEY)”,按F1键后一般都能从硬盘启动,也有时死机或直接进入ROMBASIC状态。
        软盘接口卡主要由软盘控制器FDC(UPD765)、数据控制器DOR(74LS273)、定时电路、写预补偿电路和数据分离电路等组成。主机自检时将调用BIOS的INT13对软盘系统进行复位操作,如果成功则继续对第1道和34道进行寻道操作;否则将在BIOS通信区中的40:41单元置入错误代码,并报601错误。代码含义如下表所示。
        
        40:41单元软驱操作出错标志
        代码 代码含义
        01 I/O命令非法
        02 地址出错
        03 处于写保护状态
        04 找不到扇区
        08 FDC的DMA超时
        09 DMAC和DMA超时
        10 CRC出错
        20 复位失败
        40 寻道失败
        80 FDC超时
        软盘接口卡的控制信号主要通过FDC和DOR产生,开机复位后DOR和D3位变为恒高,允许FDC向系统发DMA请求,D2位变为0,经反
        相后向FDC的RST端发复位信号后恢复为1,μPD765在复位完成后向系统发出中断请求,表明复位成功,否则经2一3秒后系统向单元40:41H置80H,指明μPD765超时。然后读取FDC的主寄存器状态是否正常,若不正常则向内存40:41H单元置20H,说明软驱FDC异常。复位若成功则继续对1道和34道进行读操作,如果读成功则在40:42单元登记20H,否则仍在40:41单元写入40H表示寻道失败。显然,一旦主机自检后报601ERROR故障时,应争取在硬盘下进入操作系统,然后在DEBUG中用如下一段汇编语言程序对软盘接口卡进行初始化,再用D命令查看软驱卡错误代码
        MOV AH,0
        MOV DX,0
        INT 13
        INT 3
        保存单元40:41H,对照代码故障表,初步确定可能已坏的元器件或电路;在此基础上再进一步对症就具体电路进行信号测试。
        例1:一台PC/XT机自检时报“601  ERROR  (RESUME=F1  KEY)”,按F1键可从硬盘启动系统。
        执行上述复位程序后,内存40:41H单元的内容为20H,表明FDC初始化失败,估计为μPD765坏或译码电路有故障。将以上复位程序的INT3改为LOOP  100(转移到第一条指令循环复位)并执行之,然后用示波器观察μPD765的RST端,有脉冲信号,说明复位信号能产生,继续观察读写控制端2脚和3脚,均有脉冲信号,而14脚与18脚无信号,说明μPD765坏,更换后恢复正常。
        例2:故障现象同上,循环复位查RST端无脉冲信号,然而DOR的Q2端却有脉冲波,说明反相缓冲器74LS368坏,换下该件后仍报故障代码8OH,仍在循环复位方式下查得μPD765的14脚DRQ有示波而74LS175的Q3端无信号,换下该件后磁盘恢复正常。
        例3:一台XT机自检后只能从硬盘启动,查单元40:41H代码为4OH,执行以下程序后
        MOV DX,3F2
        MOV AL,0
        OUT DX,AL;置DOR输出全低
        MOV AL,FF
        OUT DX,AL;置DOR输出全高
        JMP 100;循环置
        观察得DOR的各输出脚有脉冲信号,和DRIVE  SELECT信号有关的元件74LS02的1脚无信号,换下该器件后恢复正常。
        (王志刚)