USBは身近な存在となりましたが、専用チップを必要とし、なかなか自作派にとっては手が出ないものです。
USBの専門知識も必要であり、障壁が高いものです。
ここでは勉強を兼ねて、スロヴァキアのイゴールさんが作ったフリーの通称IgorUSBを作成してみます。
ちなみにスロヴァキアはチェコ・スロヴァキアから独立しました。
USB 規格は USB 1.1(1.0) と USB 2.0 があります。
この2つの規格で3つの転送速度の上限が規程されています。USBインターフェースとして通常は専用のUSBコントローラを必要とします。
USBフルスピード 480Mbps USBハイスピード 12Mbps USBロースピード 1.5Mbps
代表的なUSBコントローラを列記してみます。※USB 2.0 に準拠しているからと言って必ずしもフルスピードの転送速度とは限りません。実際、ハイスピードまでです。
メーカー チップ 用途 準拠規格 Cypress Semiconductor EZ-USB(AN2131,AN2135, 8051コア) USB<->パラレル,シリアル USB 1.1 National Semiconductor USBN9603,USBN9604 USB<->パラレル USB 1.1 FTDI FT232BM USB<->シリアル USB 1.1, 2.0 FTDI FT245BM USB<->パラレル USB 1.1, 2.0 microchip PIC16C745, PIC16C765 USB<->パラレル,シリアル USB 1.1 microchip PIC18F2455, PIC18F2550,
PIC18F4455, PIC18F4550USB<->パラレル,シリアル USB 1.1, 2.0
USBデバイス(機器)にはデバイスを区別するために、VID(ベンダーID:メーカ番号)とPID(プロダクトID:製品番号)があります。
これはUSB規格団体で管理されています。例えばATMEL社は VID=03EBh で登録されています。
IgorUSB では非公式に VID=03EBh, PID=21FF としてしています。デバイスの衝突を避けるため、必要であればPIDを変更します。
この VID, PID はファームウェアとUSBドライバ(AVR309.inf)で設定されています。
さて USB をアマチュアとして利用する場合、早い転送速度を要求されることは稀です。
従来のRS232Cシリアル転送でも PC の通常上限は 115200 baud つまりは 115200 bps です。
これはUSBロースピード1.5Mbpsの1/13です。
最近のノートPCはRS232Cを搭載しておらず、USBのみが多くなりました。
以上から、アマチュアとしてUSBに求めることをまとめると以下のようになります。USBコントローラを用いることが正攻法ですが、かなりの知識を必要とします。
- USBから5V電源を利用できること。
- USB<->シリアル、パラレル。
- 転送速度の上限は115200 bps程度。
- 安価であること。
- 制作が容易であること。
そこで IgorUSB の登場になります。IgorUSB は安価でしかも制作が容易です。IgorUSBの仕様、制限事項
- USBコントローラとしてAT90S2313を使用。
- 外部電源不要。
- AT90S2313は安価(\180)。USBN9603やFT232BMは\600程度。
- ファームウェア、USBドライバ、アプリケーションDLLがフリーで提供されており、変更なくそのまま利用可能。
- USB<->シリアル、パラレルが可能。
- 回路が非常に簡単で制作が容易。
IgorUSBはUSBデータをAT90S2313のソフトウェアで処理します。
RS232Cシリアル baud=[4800, 9600, 19200, 38400, 57600],
8ビット固定, 1ストップビット固定、最大32バイトバルク転送FIFOパラレル 8ビット入出力 EEPROM AT90S2313内臓のEEPROM(256バイト)を読み書き 注意事項 AT90S2313の上限クロックは10MHz のところオーバークロック 12MHz を使用。
これはアマチュアとしてのみ許される。
USBのポート電圧の規程から、3.3Vロジックで動作している。
このため外部とは CMOS ではなくTTLレベルでの動作となる。
そのためデータの高速転送には向きませんがアマチュアとしては十分です。
ファームウェアはそのまま利用できますし、あるいは機能を独自に追加することもできます。 (AT90S2313の代わりにATmega8を使用すると、制限事項がかなり緩和されます。たとえば、800バイトのバルク転送ができたり、通信速度も115200 baud も可能になります。)
IgorUSB の詳細は以下を参照ください。
部品の入手問題で3.3Vレギュレータを変更しました。
LEDの点灯テストをできるようにしました。
基板例
部品表概ね500円くらいです。
型番 数 備考 単価 AT90S2313 1 ATMEL AVR 180 12MHz 1 水晶発振、セラロックは精度の問題で使用不可 50 NJU7202L33 1 低ドロップ3端子レギュレータ3.3V、5Vから3.3Vを生成 50 0.1u 1 積層セラミック 10 10u 1 縦型電解コンデンサ、耐圧16V 10 USB 1 USB-Bコネクタ 50 1.5K 1 カーボン抵抗1/4W 10 LED 8 テスト用、緑LED 10 120 8 テスト用、カーボン抵抗1/4W 10
USB to RS232 Application Note.zip をダウンロードし展開します。
ファームウェア Firmware/USBtoR232_AT90S2313/AVR Studio 4 project/usb90s2313.hex USBドライバ Driver/AVR309.sys アプリケーションDLL DLL/Delphi7 project/AVR309.dll デモプログラム Application/Delphi7 project/AVR309demo.exe
設定手順は次の通りです。
- まず、ファームウェアusb90s2313.hexをAT90S3213にライターで書き込みます。
- 回路に間違いがなければ、IgorUSBをUSBケーブルでPCに接続します。
- USBデバイスを認識してUSBドライバをインストールするように催促されますので、 指示に従います。
- あとは AVR309.dll を使うアプリケーションを作成するだけです。
プログラム(独自アプリケーション)作成者は AVR309.DLL の関数だけを意識します。
デモプログラムとして、AVR309USBdemo.exe が用意されているので、試します。
実際に作成するアプリケーションはAVR309.dll に登録されている関数を呼び出すだけです。
言語はDLLを呼び出せれば C, Delphi, Basic どれでもかまいません。状態取得関数
- まずはじめに DoGetInfraCode 関数で、IgorUSB が接続され使用可能な状態にあるか検査します。
- あとは、各関数を呼び出すだけです。
パラレル操作関数
- DoGetInfraCode
シリアル操作関数
- DoSetDataPortDirection
- DoGetDataPortDirection
- DoSetDataPortDirections
- DoGetDataPortDirections
- DoSetOutDataPort
- DoGetOutDataPort
- DoSetOutDataPorts
- DoGetOutDataPorts
- DoGetInDataPort
- DoGetInDataPorts
EEPROM操作関数
- DoSetRS232Baud
- DoGetRS232Baud
- DoRS232Send
- DoRS232Read
- DoGetRS232Buffer
- DoRS232BufferSend
作成した独自アプリケーションも動きました。(LEDを点灯させているところ)
- DoEEPROMRead
- DoEEPROMWrite
非常にお手軽で簡単ですので、利用価値はありそうです。