Главная » Статьи о компьютерах » POST-код 53h означает System Hang

POST-код 53h означает System Hang

POST-индикатор, реализованный с помощью чипа Attansic ATP80В AMIBIOS есть модуль SMBUSARP.ASM, реализующий ARP (Address Resolution Protocol) для SMBus 2.0. Это обес­пе­чи­ва­ет программное присвоение адресов устройствам на SMBus-шине. В данном модуле есть подпрограмма CheckFor­RemovedDevices, опрашивающая состояние SMBus-устройств на шине и считывающая информацию UDID (Unique Device Identifier), используемую при реализации протокола ARP. В подпрограмме есть фрагмент, сравнивающий ранее сохраненное и текущее значение UDID. При неожиданном изменении UDID устройства, что возможно при сбое считывания, генерируется 16-битный POST код 4853h = “HS” что расшифровывается как Hang System или System Hang. После этого выполняется останов (JMP сам на себя в цикле).

Средства диагностики

Очевидно, что 16-битный POST-код невозможно наблюдать на 8-битных POST-картах. Мы специально приводим выше фрагмент материнской платы EPoX со встроенным индикатором контрольных точек, выполненным на базе контроллера Attansic ATP80 для того, чтобы подчеркнуть: на нем визуализируется только POST-код 53h. В аналогичной ситуации окажутся и все прочие владельцы персональных платформ с 2-х позиционным индикатором, независимо от того, является ли он встроенным или установлен на POST-карте в PCI-слот.

Встроенный POST-индикатор вывод в 80-й порт только код 53h

Исходный код модуля SMBUSARP.ASM

CheckForRemovedDevices PROC NEAR PRIVATE
push ds
pusha
push cs
pop ds ; DS = CS
mov di, offset slave_device_info_array; DS:DI = Ptr to array
mov cx, (size slave_device_info_array)/(size GET_UDID_STRUC)
cfrd_00:
push di
push cx
; DS:DI = Ptr to next entry in the array
mov al, ds:(GET_UDID_STRUC ptr [di]).bDeviceAddress
cmp al, DEVICE_ADDRESS_NOT_ASSIGNED
jz short cfrd_01
; This entry contains a valid device
; Get UDID information from this device using already assigned slave address.
; If successful
; Then the device is still present.
; Else the device does not exist any more.
; AL = Assigned slave address in Bit7-1
mov si, offset udid_buffer
call GetUDIDDirectedInformation
jnc short cfrd_02
; Error in getting UDID information, so device does not exist any more
; Remove this entry from the array and mark the address as available
; AL = Assigned slave address in Bit7-1
; DS:DI = Ptr to concerned entry in the array
call MarkAddressAsFree
; DS:DI = Ptr to concerned entry in the array call DeleteSlaveDeviceInfo
jmp short cfrd_01
cfrd_02:
; DS:SI = Ptr to buffer having the information returned by UDID command
; DS:DI = Ptr to entry containg the information of previous detection
; Match these two information. If mismatch, this indicates a BUG
push es
push ds
pop es
and ds:(GET_UDID_STRUC ptr [si]).bDeviceAddress, 0FEh
mov cx, size GET_UDID_STRUC
repz cmps ds:byte ptr [si], es:byte ptr [di]
pop es
jz short cfrd_01
; MISMATCH
mov ax, 'HS' ; System Hang
out 80h, ax

jmp $
cfrd_01:
pop cx
pop di
loop cfrd_00
popa
pop ds
ret
CheckForRemovedDevices ENDP


21.07.2017
Яндекс.Метрика Рейтинг@Mail.ru