terça-feira, 22 de janeiro de 2013

SCSI: de volta aos velhos tempos

Na década de 90, SCSI era um luxo. Hoje, é quase (?) sucata.

Adaptec AHA-2940UW

Firmware 1.34.3 original

Existiu durante um tempo o firmware 3.10, que por algum motivo foi retirado do site (tem apenas o 2.20 lá). Os arquivos desaparecidos da versão 3.10, 2940uw_bios_3100.exe e 2940u2w_bios_3100.exe, originalmente executáveis auto-extraíveis, estão (em ZIP) aqui:

- 2940uw_bios_3100.zip
- 2940u2w_bios_3100.zip

Essa minha placa veio com uma OTP ROM Atmel AT27C512R DIP-28, que não permite regravação.

Atmel AT27C512R

A primeira coisa a fazer foi dessoldá-la e colocar um soquete. Existe previsão na placa para chips DIP-32, logo, o soquete foi de 32 pinos.

Viva o ferro de solda

Faltava um novo chip. Tenho pencas de flash ROMs DIP-32 de 128KiB, mas, levando em conta que a imagem do firmware é de 64KiB, não sabia se funcionariam (talvez sim, mas qual seria a graça?). Já que estamos falando de sucata, nada melhor do que recorrer a ela mais uma vez!

Fujitsu MBM27C64 (x 2), Hitachi HN482764G, National NMC27C256Q
TI TMS27C512 (x 2), ST M27C1001

Credo! EPROMs apagáveis por luz UV. As quatro de cima não servem, pois são de 8KiB (as três primeiras) e 32KiB (a quarta). Além disso, usam tensão de programação muito alta (21V nas de 8KiB), são lentas e gastadoras de energia. Chips bem antigos esses. A tensão de programação até não seria problema, pois para leitura usam 5V.

As de baixo já são menos velhas. As duas primeiras são as mais próximas do AT27C512R. Um pouco mais lentas (150ns/120ns x 45ns) e gastadoras (260µA/30mA x 100µA/20mA), mas servem! A última é descartada por ser de 128KiB.

Então, depois de comprar um apagador UV, pude gravar o firmware no chip TMS27C512 num programador de EPROM. Colocado no soquete e voilà:

Chip "novo"

Primeiro boot com o firmware novo

Firmware 3.10.0

HDD listado no setup da placa-mãe

Se tivesse conseguido uma flash ROM tipo Atmel AT29C512, SST29EE512, Winbond W29EE512, poderia ter usado o programa de atualização para DOS da Adaptec (flash5.exe), cuja ajuda está aqui:

Stand-Alone BIOS Flash5 Program Command line Interface
Jan 1, 2001

The DOS-based flash5 engine is a command line utility. The engine runs in a "silent" mode and requires no user interaction. All parameters are passed in from command line. The name of the executable is "flash5.exe".

The usage of the utility is as follows.

Flash5.exe [-version] [-scan] [-bus #] [-dev #] [-1mb] [-r] [-s] [-w] [-hv] [–bv] [-checksum] <romimage>

Flash5.exe                      Report to console the usage of the utility. All other options are ignored.

Flash5.exe -?                   Report to console the usage of the utility. All other options are ignored.

Flash5.exe /?                   Report to console the usage of the utility. All other options are ignored.

Flash5.exe –version             Report to console, the version number of the program, and exit immediately.  All other command line options are ignored.

Flash5.exe -scan                Scans all the Adaptec SCSI devices and displays the information about them.

Flash5.exe -r [-bus #] [-dev #] Read the current BIOS. Calculate & display the checksum.
                                The bus # and device # can be specified in hex also. To specify them in hex append 0x to the hex number.
                                Example:
                                To specify bus no. 0 and device no. 0f (in hex),
                                Flash4.exe -bus 0 –dev  0x0f ...

Flash5.exe -s [-bus #] [-dev #] <romimage>
                                Read the current BIOS and save it in the file and calculates the checksum.  All other options are ignored.
                                If a filename is specified, save the contents to the file. Otherwise, use the default filename "8bios.com".
                                The bus # and dev # can be specified in hex also. To specify them in hex append 0x to the hex number.
                                Example:
                                To specify bus num 0 and dev num 0f ( in hex ),
                                Flash5.exe -bus 0 -dev 0x0f ...

Flash5.exe [-bus #] [-dev #]  -w <romimage>
                                Update the BIOS with the image specified in the file.  Always read the BIOS back after the flash and report error if the read-back image does not match the file.
                                If "-bus" or "-dev" are specified, update only the matched adapter.
                                By default, the program updates all the adapters that matches the Vendor ID and Device ID in the new BIOS image.

Flash5.exe [-checksum] <romimage>
                                Calculate the checksum of the file specified in the argument and display the same.

Flash5.exe [-bus #] [-dev #] –hv
                                Displays hardware version information about the host adapter.

Flash5.exe [-bus #] [-dev #] –bv
                                Displays BIOS version information about the BIOS on the host adapter.

Flash5.exe –hv <romimage>
                                Displays hardware version information embedded in the supplied romimage file.

Flash5.exe –bv <romimage>
                                Displays BIOS version information embedded in the supplied romimage file.

Flash5.exe –1mb < -r | -s >  <romimage>
                                When used in conjunction with –r or –s, it will allow reading and saving of 1Mbit ROM Image. This switch is not necessary when performing a checksum on a 1Mbit BIOS image file.
                                Note: -1mb is supported inherently for –w. In other words, it will write 1Mbit if the romimage file is 128KB.

When no arguments are specified to the flash5 utility. It just displays the usage of the utility.

The arguments can appear in any order.  If an argument requires a parameter, it must appear immediately after the argument.  For example, a valid number must follows, immediately either the "-dev" or "-bus" option.

Unless the program receives the "-verbose" option, it prints.  Otherwise, it reports the status of the execution.

The "-version" option has the highest precedence.  If this option is present, all others are ignored. The -scan option has the next precedence. The "-r" option has the precedence after that.  The program will read the current BIOS when this option is present.

The "-verbose" option does not apply if the "-version" option is present.

Upon exit, the program returns the status of the execution. The possible return values are listed in the table below.

Status Code         Meaning
    0               Program ran successfully.
    1               Command line syntax error.
                    Possible Cause is Invalid option at the command line
    2               Invalid parameters following the argument.
    3               File System error.
                    Reasons:
                    1) Can not open BIOS image file.
                    2) Can not read from or write to the specified file.
    4               Invalid bios image file
                    Reasons:
                    1) Bios image size may be incorrect. We assume 64k or 128k bios image size.
                    2) Bios signature (55AA as first two bytes) may be incorrect.
                    3) Bios image size may be greater than installed expansion ROM.
    5               Unable to determine PCI Bios support. The underlying hardware may not be supporting PCI interface.
    6               Memory allocation error. Unable to allocate sufficient memory.
    7               Expansion ROM is not present.
                    The adapter card doesn't have an expansion ROM.
    8               Verification failed. Unable to verify the updated Expansion ROM image.
    9               Unable to read or write the configuration registers. Probable cause may be problem with a PCI Bios interrupt.
    10              Device not existent. Cannot locate any Adaptec device. No Adaptec SCSI devices are present on the PCI bus.
    11              File System write error. Insufficient disk space.
    12              Unable to flash any of the host adapter
    13              Unable to flash some of the host adapters
    14              Unable to retrieve information for BIOS version less than 2.20.

Additional Notes:
1) Flash5 utility can not run when "EMM386.EXE" is active. Please disable "EMM386.EXE" by running "EMM386.EXE OFF" at the DOS prompt before running flash5.
2) The Flash5, utility is a DOS-based program and should be run under a pure DOS environment. Do not run the Flash5 utility from a DOS window.

Página de suporte da Adaptec para o modelo:
http://www.adaptec.com/en-us/support/scsi/2940/aha-2940uw/
(até driver para Windows 7 tem...)

2 comentários:

  1. Muito bacana! Essa controladora devia custar uma nota preta na época.

    Mas e os discos SCSI? É fácil encontrá-los com um preço bom? Vai fazer um RAID com eles?

    ResponderExcluir
    Respostas
    1. Não é muito fácil achar e são geralmente pequenos. Eu estou com um de 18GB. Pelo menos, comparado com HDs IDE da mesma época, esse SCSI é muito mais rápido. Claro, comparado com um HD SATA atual, é lento. Essa controladora é Ultra Wide (e suporta Ultra não-Wide no conector de 50 pinos), que tem uma taxa máxima de 40MB/s. Não suporta RAID.

      Tenho também uma Adaptec AHA-29160N, que é mais recente e suporta Ultra-160, até 160MB/s. Como ela já tem uma flash ROM, preferi colocar no post a placa mais antiga por causa do trabalho adicional. :-)

      Excluir