Windows CE (.NET) とか IoTとか

組込みWindows と IoTの話を扱います

CE.NETでPromise Ultra66を使う

CE.NET4.2のIDE/ATAPIドライバATAPI.DLLは、Intel 82371、ALI1543、National (AMD) GEODE以外に、Promise PDC20262用のコードとレジストリ設定が含まれています。ここでは実際にUltra66を入手して、ATAPI.DLLの動作を確認してみました。

SANY0096.JPG

使用したのはおなじみBCOM WINNET6です。写真のように3.3V PCIスロットにUltra66を挿し、80ピンケーブルでハードディスクと接続しました。

ATAPI.DLLのソースコードはPlatform Builder 4.2内の

%_WINCEROOT%\PUBLIC\COMMON\OAK\DRIVERS\BLOCK\ATAPI

にあります。レジストリ設定によりハードディスク/CD(DVD)-ROMのそれぞれでDMAモードを使用するかどうかを設定することが可能です。ここでは素直にDMAモードでを動かしてみました。(※)

で、結果的にはまったく問題なく動作しました。CETKのコードを改造して作成した転送速度テストでは約4MB/secの転送速度が得られました。

ただし、ソースコードを見てみると実際にサポートされているのはマルチワードDMA Mode0までのようです。

以下、atapiio.cppの356行目あたりですが、

WriteFeature(ATA_SET_TRANSFER_MODE);

WriteSectorCount( bMode);

WriteSectorNumber(0);

WriteLowCount(0);

WriteHighCount(0);

WriteCommand( IDE_COMMAND_SET_FEATURE);

これがATA/ATAPI-6の 8.46.11 Set Transfer Modeに相当します。ali.cppやpromise.cppでは SetTransferMode(0x20)を呼び出していますが、これはマルチワードDMA Mode0 (最大4.16MByte/sec)なんですね。ということで、スペックどおり正しく(???)動作していることが確認されました。

※ちなみにGEODE本体のIDEポートではMultiword DMAはうまく動作しませんでした。