はじめに

先日、近所のハードオフのジャンクコーナーで、IT8212を搭載したPCIのATAカードが105円で売られているのを発見し、早速購入しました。
日本でITEのチップが載ったカードを販売しているのは玄人志向ぐらいかなと思い、玄人志向のホームページで確認すると、案の定「ATA133RAID-PCI2」という型番で販売されているカードのようです。

今回は、この「ATA133RAID-PCI2」を弄ってみることにします。

「ATA133RAID-PCI2」の概観

まず、このカードの概観を確認します。

image

搭載されているICは2つだけです。

image

このカードのメインのICである「IT8212」、ITE製のATA133コントローラです。

image

そしてもうひとつのIC「Pm39LV010」、PMC製の128KB Flash ROMです。

動作確認

このカードを評価用PCのPCIスロットに挿して電源をONにすると、BIOSのDiagnostic画面が表示されました。(BIOSバージョンの表示は「IT8212 RAID BIOS ver 1.7.1.93」)
なんか、そのまま使えそうです。

BIOSのアップデート

このカードにはFlash ROMが載っていて、ハード的にはBIOSのアップデートができそうです。
このため、このカードを利用する前に最新のBIOSを探してアップデートを行います。
(とりあえず使い始めてからでもいいのかもしれませんが、以前HPT370Aが搭載されたATA RAIDカードを利用していて、BIOSのアップデートを行ったら、構築していたRAIDアレイが見えなくなってしまったことがあるので、念のためです。)

最新のBIOSデータ/ITEFLASHの取得

玄人志向の「ATA133RAID-PCI2」のページに、製造元が「http://www.avlab.com.tw/」と記載されていたため、この製造メーカ(AVLAB Tecnology)のホームページを見てみましたが、このカードは「Dual Profile Ultra ATA/133 RAID PCI」という名前のようです。

AVLAB Tecnologyのページでは、BIOSを配布していないようなので、チップメーカの「ITE」のページを確認してみます。

ITEのページからは、IT8212のBIOSと、BIOSをFlash ROMに書き込むためのライターソフトウェア「ITEFLASH」が入手できます。

ITEFLASHを利用してBIOSのアップデートを試みるものの…

さて、入手したファイルを利用して、早速BIOSのアップデートに取り掛かります。
Windows98やMS-DOS等のブートFDでシステムを起動させ、MS-DOSプロンプトが出た状態で、ITEFLASHとBIOS ROMファイルが入ったFDに差し替え「ITEFLASH」とタイプします。

ITEFLASHが起動し、IT8212が認識されたメッセージが表示された後、現在のBIOSのバックアップシーケンスが走るのですが、ここでFDDのアクセスランプがつきっぱなしになってハングアップしてしまいます。

ITEのページには、ITEFLASHが対応しているFlash ROMとして、

SST 39SF512
SST 39SF010
SST 39VF512
ATMEL AT49F010

が挙げられていて、おそらくITEFLASHがこのカードに搭載されているFlash ROM「Pm39LV010」に対応していないのが原因のようです。
さすが玄人志向、利用者にやや高めのハードルを用意してくれます。

ITEFLASHが「Pm39LV010」に対応してくれれば問題はないのですが、manufacturerであるITEにそこまでのことを求めるのはちょっと酷な気がしますので(自社製品がどんなFlash ROMと組み合わせられて利用されるかなんて、全部把握しきれないでしょうし、ましてやそれらのFlash ROM一つ一つに自社のライタソフトウェアを対応させることまでは無理だと思います)、何か別の方法を考えなければいけません…。

UniFlashを利用してBIOSのアップデートに再チャレンジしたが…

ITEFLASHが対応していない「Pm39LV010」にBIOS ROMを焼きこむために、ちょっとリスキーですが、「UniFlash」というソフトウェアを利用することにします。

「UniFlash」は、様々な環境、様々なFlash ROMに対応したユニバーサルなフラッシュツールです。
Flash ROMである「Pm39LV010」に対応しており、PCI上のデバイスに接続されたFlash ROMも書き換えが出来るのですが、IT8212で利用できるのかは特に記載はありませんでした。
まあカードを入手した値段が値段なので、失敗して何ぼ、一か八かでこのツールで書き換えをしてみたいと思います。

UniFlashを利用してFlash ROMを書き換えるには、ITEFLASHの際と同じく、Windows98やMS-DOS等のブートFDでシステムを起動させ、MS-DOSプロンプトが出た状態で、UniFlashとBIOS ROMファイルが入ったFDに差し替えた後、下記のようにタイプします。

UniFlashを利用してPCIデバイス上のFlash ROMを書き換える
$ uniflash -pcirom

UniFlashが起動した後、リストに「Bus xx device xx function xx (VEN=1283, DEV=8212, 128K max)」と表示され、それを選択すると、「Flash ROM chip: PMC Pm39F010/5V or Pm39LV010(R)/3.3V」と表示されました。
どうやらIT8212上の「Pm39LV010」が無事認識されたようです。

すかさず「Flash BIOS image INCLUDING bootblock」を選択し、BIOS ROMファイル名を入力して書き換えを試みたものの、今度は「FILE SIZE DOES NOT MATCH FLASH ROM CHIP SIZE!」とエラー表示。
一難去ってまた一難です。

余談ですが「UniFlash」を「-pcirom」パラメータなしで実行すると、マザーボードのBIOS ROMを見つけにいきます。
間違ってマザーボードのBIOSを書き換えてしまうと、そのマザーボードは二度と起動しなくなってしまいますので、注意してください。

BIOS ROMファイルを48KBから128KBに拡張

先ほどのUniFlashのエラーは、単純にFlash ROMのサイズとBIOS ROMファイルのサイズが一致していなかっただけのようなので、このエラーを回避するために、BIOS ROMファイルのサイズを48KBから128KBに拡張します。

Flash ROMには先頭アドレスよりプログラムが順番に書き込まれるため、前のほうでプログラムが完結していれば、プログラム以降の領域にどんな値が入っても、特に問題ないはずです、多分。
このため、ファイルサイズの拡張には、BIOS ROMファイルのサイズ(48KB)以降のデータを全てゼロで埋めることにします。

ファイルサイズの拡張およびゼロ埋めについては、バイナリエディタ等で編集が可能ですが、手元のPCにバイナリエディタがインストールされていないため、下記のような簡単なプログラムを用意して、BIOS ROMファイルの拡張することにします。

BIOS ROMファイルを48KBから128KBに拡張するプログラム
#include <stdio.h>
#include <stdlib.h>

#define INPUT_FILE_NAME     "input.bin"
#define OUTPUT_FILE_NAME    "output.bin"
#define INPUT_FILE_SIZE     (48*1024)
#define OUTPUT_FILE_SIZE    (128*1024)

void main()
{
    FILE *tFileHandler;
    unsigned char *tBuffer;
    int tCount;

    if((tFileHandler=fopen(INPUT_FILE_NAME,"rb"))==NULL)
    {
        puts("Cannot open input file.");
    }
    else
    {
        tBuffer=(unsigned char*)malloc(sizeof(unsigned char)*OUTPUT_FILE_SIZE);

        if(tBuffer==NULL)
        {
            puts("Cannot allocate buffer.");
        }
        else
        {
            for(tCount=0;tCount<OUTPUT_FILE_SIZE;tCount++)
            {
                tBuffer[tCount]=0x00;
            }

            fseek(tFileHandler,0,SEEK_SET);
            fread(tBuffer,INPUT_FILE_SIZE,1,tFileHandler);
            fclose(tFileHandler);

            if((tFileHandler=fopen(OUTPUT_FILE_NAME,"wb"))==NULL)
            {
                puts("Cannot open output file.");
            }
            else
            {
                fseek(tFileHandler,0,SEEK_SET);
                fwrite(tBuffer,OUTPUT_FILE_SIZE,1,tFileHandler);
                fclose(tFileHandler);
            }

            free(tBuffer);
        }
    }
}

LinuxやFreeBSDならばデフォルトでインストールされているgccを、WindowsならばBorland C++等をインストールして利用すれば、上記プログラムをビルドできると思います。

再びUniFlashを利用してBIOSをアップデートする

サイズを拡張したBIOS ROMファイルを利用して、UniFlashで再度BIOSの書き換えを試みます。
今度はうまく行き、再起動するとBIOSのDiagnostic画面で「IT8212 RAID BIOS ver 1.7.1.94」のバージョン表示がされるようになりました。

どうやら無事にBIOSのアップデートは成功したようです。

IT8212のATAPI BIOS

ITEのサイトから最新のBIOSをダウンロードするときに気が付いたのですが、IT8212にはATAPI用のBIOSも提供されているようで、こちらを適用することにより、CD-ROM/DVD-ROM等のATAPIデバイスを利用できるようになるみたいです。(数名の方から動作報告を頂きました、ありがとうございました!)

どうせならば、ひとつのBIOSでIDE RAID/ATAPIの両対応にしてもらいたい気もしますが、それでもないより便利なので、RAID機能が不要で、ATAPIデバイスを利用したい方は、試してみるとよいかもしれません。

ちなみに、ATAPI BIOSも、BIOS ROMファイルのサイズが48KBになっていますので、書き込みにはファイルサイズの拡張およびゼロ埋めの作業が必要になります。


あなたの探し物は見つかりましたか?
まさにこれだ
参考になった
ちょっと違う
これじゃない

何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まさにこれだ
1 (50%)
参考になった
1 (50%)

【まさにこれだ】 貴重な情報ありがとうございます。 マザボのSATAポートを全部使ってしまったので物置で埃を被っていたATA133RAID-PCI2を引っ張り出してきて低速でも問題ない光学ドライブをSATA/IDE変換ブリッジを使ってATA133RAID-PCI2に接続しようとしています。 ATAPI用のBIOSをダウンロードしてきてUniFlashで無事アップデートに成功しました。ただダウンロードしたBIOSのサイズが48KBではなく44KBだったので「#define INPUT_FILE_SIZE (48*1024)」の部分を「#define INPUT_FILE_SIZE (44*1024)」に書き換えて使いました。BIOSのDiagnostic画面の表示は正常でバージョンも正しいです。まだドライブは接続していません。こんな使い方で問題なかったでしょうか? (2019/10/12 Sat 14:35:48)
→ 良いのではないかと思います。