ドライバ

 PC に USB と RS-232C を変換するデバイスを接続して使うには、デバイスドライバが必要です。これにより、PC のアプリケーションはデバイスを通常の COM ポートとしてアクセスし、RS-232C 信号を送受信できるようになります。FTDI 社、Prolific 社などの専用チップと専用ドライバで実現する方法が一般的です(市販のアダプタケーブルなど)。
 これとは別に、主要な OS では USB の上で RS-232C などの通信方式をサポートするため、CDC (Communication Device Class) のプロトコル処理のドライバを標準で装備しています。これを使えば、PC 側でドライバを作成せずに、USB <=> RS-232C 変換デバイスを仮想的な COM ポートとして利用することができます。

CDC プロトコル

 CDC プロトコルは、USB 上でさまざまな通信を行うために規定されたクラスです。RS-232C では、このなかの CDC-ACM クラスを用います。コントロール転送以外に2つのバルク転送パイプ(データ送受用)と1つのインタラプト転送パイプ(メッセージ用)が使われます。 ボーレートやパリティビットなどの設定をホストからデバイスへ伝えるしくみも備えています。USB 規格では、ロースピードのデバイスにはコントロール転送以外に2つのインタラプトパイプのみ認められています。バルク転送や規定以上のパイプを使うと、ホストコントローラやハブのパケット送出タイミングによってはデバイスが応答し難くなります。Windows では、ロースピードでの CDC プロトコル動作を安定化するために、パッチを当てています。
 

Windows XP/Vista ドライバへの補助フィルタ

Windows

 CDC プロトコルが組み込まれ、仮想COMポートを生成するドライバ(usbser.sys)はWindows 環境に含まれています。しかしながら、このドライバはマウスなどの HID クラスのデバイスと異なり 、最初にデバイスを接続したときに設定情報ファイル(INFファイル)を指定して組み込む必要があります。このとき、パッチ用の補助ドライバ(lowcdc.sys)も一緒に組み込みます。
 ロースピード USB での CDC プロトコル処理は、XP ではほとんどの場合に問題なく動作しますが、ホストコントローラやハブの組み合わせによってはパケット送出が連続し、データ転送が停止することがあります。また、Vista ではロースピードでのバルク転送が禁止されて おり、そのままでは動作しません。このパッチは usbser.sys ではあまり使われないメッセージ用のインタラプトパイプを停止し、 必要に応じてバルクとインタラプトのすり替えを行うものです。

【 転送速度 】
 デバイス側 RS-232C の設定(ボーレート、パリティなど)は、PC 側アプリケーションから自動的に行われます。とはいえ実質的なデータ転送速度は USB の転送モードに依存するため、ボーレートに見合った転送速度が得られないこともあります。ロースピード USB で1パケットのデータが 8バイトならば、概ねつぎの速度となります。

転送モード パケット間隔 転送速度 ボーレート
バルク 125uS 〜 〜 8KB / Sec 〜 57600 bps
インタラプト  8mS 〜 〜 1KB / Sec 〜 9600 bps


※ 転送モードは lowcdc.vbs で切り替えられます。
※ ハイパーターミナルでは、1バイトごとにデータ送信がブロックされます(1バイト/パケットで送出)。インタラプト転送でのデータ送出は毎秒125バイト以下となります。(TeraTerm や HypoTerminal を使えば8バイト/パケット、つまり毎秒1KBの送出が可能です。)

【 インストール 】
 avrcdc_inf.zip を解凍すると、以下のフォルダが得られます。

        /inf
            /raw -- Windows 2000/XP用
            /w2k -- Windows 2000用
            /xpvista7 -- Windows XP/Vista/7 x32用
            /vista64 -- Windows Vista/7 x64用
            lowcdc.vbs -- バルク・インタラプト転送切り替え

/raw
 補助ドライバを使いませんが、USB規格外の転送モードを使うため、不安定もしくは動作しない場合があります。Vistaでは動作しません。
/w2k
 補助ドライバ(lowcdc.sys)も組み込みます。バルク転送(高速) モードでのみ動作します。
/xpvista7
 補助ドライバ(lowcdc.sys)も組み込みます。インストール後に、データパイプのバルク転送(高速)とインタラプト転送(安定)を切り替えられます。 XP では SP3 への更新が必要です。

(1) これまでにAVR-CDC のドライバをインストールしているときは、「アンインストール」の手順に従って旧いドライバを削除します。
(2) デバイスを USB 接続すると、「新しいハードウェアの検出ウィザード」ダイアログが現れます。ここで、Windows Update 接続や自動検索をせずに、解凍した INF フォルダ下の /xpvista、または /w2k のフォルダを指定します。警告が出たら承認(続行)してください。Windows内蔵のドライバ (および補助ドライバ)がロードされます。
 ダイアログでは、つぎの選択肢を選びます。
        「いいえ、今回は接続しません。」
        「一覧または特定の場所からインストールする。」
        「次の場所を含める」 (参照)でフォルダ指定
(Vista)
 Vistaではつぎも選んでください。途中で何度か「操作の続行を確認するダイアログ」も現れます。
        「ディスクはありません。他の方法を試します。」
        「コンピュータを参照してドライバソフトウェアを検索します。」
(Windows 7 RC)
 7 RC ではハードウェア検出のウィザードが現れません。手動でドライバをインストールしてください。デバイスマネージャで "USB-232" または "USB-PIO" を右クリックし、インストールを選びます。

(3) 仮想COMポートが正しく生成されているか確認します(コントロールパネル/システム/ハードウェア/デバイスマネージャ/ポート(COMとLPT))。COM ポートの番号を覚えておき、ターミナルソフトを設定してください。

【 アンインストール 】
 ドライバを入れ替えるときなど、すでに組み込まれているドライバをはずす手順です。
(2000/XP)
(1) デバイスを接続する。
(2) コントロールパネル・デバイスマネージャを起動して「ポート(COMとLPT)/Virtual Communications Port(COM*)」を右クリックし、[削除]を選ぶ。
(3) デバイスを取り外す。
(4) /Windows/INF/ のフォルダ内で、"AVR-CDC" の文字列を含む oem**.inf (**は数字)のファイルを検索する。見つかった oemXX.inf と、そのプリコンパイル版の oemXX.pnf の両方を削除する。
(Vista/7)
(1)-(3) までXPと同じ操作ですが、[削除]ボタンを押したときの確認ダイアログで(このデバイスのドライバソフトウェアを削除する)をチェックします。oem**.inf を削除する必要はありません。

【 その他 】
※ デバイスにシリアル番号が設定されていない場合は、同じPCでも異なるUSBポートに接続するたびに「新しいハードウェアが検出」されます。インストール済のドライバを選んでください。別のCOMポートが割り当てられます。
        「いいえ、今回は接続しません。」
        「ソフトウェアを自動的にインストールする。」

※ デバイスを取り外すまえに、必ずアプリケーション側のシリアル接続をクローズしてください。忘れたときはアプリケーションを再起動しないと次回接続できません。

※ Vista/7 64 bit での使用
 Vista/7 の64 bit版では、認証を受けていないカーネルモード・ドライバを組み込めません。起動時に「ドライバ署名の強制認証」を解除する必要があります。しかしながら、指定したドライバに限ってこの強制認証を解除しておくツールがあり、動作報告が得られています。
        Driver Signature Enforcement Overrider
 インストールの詳細は、/vista64 のなかの Readme64.txt をご覧ください。

Mac OS

 Mac OS9, OS X で動作を確認しています。接続すれば、ただちに認識されます。アップルメニューの「このMac について」/(詳しい情報..)/ ハードウェア/USB でUSB 機器(USB-232)として登録されていることを確認します。USB デバイス名は、/dev/cu.usbmodem のあとに数字や文字が並んだものになります。
 Mac ではシリアル通信プログラムとして IntelMac も含め安定に動作するのはシェアウェアの ZTerm です。 必要なら送受信の改行コード設定も調整してください。Zterm では Settings/Text Pacing.. の Delay はどちらも 0 にしてください。  

Linux

 Linux 2.4 および 2.6.31 以降では接続すれば /dev/ttyACM* としてデバイスが認識されます。
 Linux 2.6.31 以前ではロースピードのバルク転送が止められていますので、2.6.31 以上にカーネルを交換してください。産総研の KNOPPIX 6.2 DVD 版は 2.6.31 カーネルです。
 

?e???v???[?g??ondt