MCP2150でIrDA


はじめに

Microchip Technology Inc.MCP2150は、CPUのSerial I/Fと繋ぐだけで、IrDAのIrCOMMを実現できるチップです。

ICを買ってきて評価したほうが安上がりだけど、今回は遊びというより、仕事関係だったので、DigikeyDM163008開発キット(35,824円)を買ってしまいました。

そのレポートをします。


キット到着

2002年12月26日に注文したのに、1月6日会社が始まるとすぐ荷物が届きました。

中身は結構いろいろ入っています。

同じような基板が3枚ありますが、MCP2150がついた物が1枚と、MCP2120がついた物が2枚です。

IrDAのIrCOMMを実験するだけなら、MCP2150だけでよいのですが、別のIrDA Protocol Stackを実験するときは、

  1. MCP2120 (ASCII) <-> MCP2120 (ASCII)
  2. MCP2120 (IR Driver) -> MCP2120 (IR Driver)
  3. MCP2150 (ASCII) <-> MCP2120 (IR Driver)
  4. MCP2120 (IR Driver) -> IrDA Standard Port
  5. MCP2150 (ASCII) -> IrDA Standard Port

のようにいろいろのレイヤーの試験ができます。

電源は、RS-232Cケーブル、ジャンパー用リード線、予備のMCP2120、MCP2150、マニュアルとMicrochipのカタログCD-ROMが入ってます。

ACアダプタ以外に006P電池ホルダーもついているので、どちらも使えます。

また、RS-232Cに変換する前のTTL Level信号もコネクターより取り出せますし、一体化したIrDAトランシーバーと、ディスクリートで組んだ送受信部がついていて切り替えて試験することができます。


繋いでみる

これだけそろっていれば、実験の準備はまったくないようなものです。いきなりIrDA Portのついたパソコンと繋いでみました。

Windows98は、IrDAがIrCOMMで仮想COM Portとして見えるので、そのまま当然のようにTera Termで、交信できました。


USB IrDA Bridge

翌日、1月7日には、ACTiSYSに注文した、IrJACKも届きました。

線がつながっていないのが本体で、ノートパソコンの場合は、直接挿して使い、デスクトップの場合は、延長ケーブルを繋いで使うようになってます。

CD-ROMからドライバーをInstallして繋ぐだけです。

Windows Meも、IrCOMMが仮想COM Portとして見えるので、難なくつながります。


WindowsXP

ただ、Windows2000, WindowsXPは、IrCOMMが隠蔽されてしまい、直接触れなくなってしまいました。

でも、IrCOMM2kというGPLで公開されたフリーソフトがあり、これをInstallすると仮想COM Portが復活します。早速やってみると、WindowsXPは難なくつながりました。

ところが、手持ちのWindows2000のマシンは、どうも具合が悪く仮想COM Portはできるものの、うまく交信できません。もっとも、このマシンはIrJACKを挿したまま、起動すると途中でフリーズするなど、IrCOMM2kの問題の以前に、何か不具合がありそうです。

とりあえず、「Windows2000は、サポートしない」事にしました (^o^)


他のを探す

Win2Kは無視するといっても、やはりクライアントからクレームが出そうです。そこでもっと安定な、USB IrDA Bridge探しが始まりました。

まず、IrSTICKを買ってきました。ところが、中身はIrJackとまったく同じものです。

SigmatelのSTIr4200が入っていることがデバイスドライバーでわかりました。

BAFO IOBF120もやはり同じもの。Usbgear.comも然りでだいぶ参ってきた。

Sigmatel, ACTiSYS, Link evolution, Microchipにメールで助けを求めても返事がないし(まあ、製品の不良というわけじゃないから)うーむ。

MA 620 Infrared Adapter USB,ACTiSYS 2000Uなどは、Sigmatelとは別物のようなので、とりあえず注文してみた。

2/21になって、ACTiSYSから、連絡がありました。IR-200UもSigmatelのチップを使っているとの事。もうちょっと早く言ってくれれば注文しなかったのですが...

MCP2150でなくって、自社のIR8200シリーズにしては...と言う提案をしています。


ACtiSYS 8200

せっかくですから調べてみました。

MCP2150に最も近いのは、IR8200P-Cなんだが、通信速度が9600bpsしかありません。(MCP2150は115.2kbps)おまけに機能がすくない割りにQFP64pinとでかい。

サポートしているのは、IrCOMM, IrLPTつまり、MCP2150にくらべた利点は、IrDA Printerに直接つなげられるだけ。

IrOBEXをサポートしているIR8200Lは、TQFP44と小型でIrCOMM, IrLPTもサポートしていて、速度も115.2kbpsなんだけど、IrPHY Layerを持っていないので、IR220VACFと言う別チップと組み合わせて使う以外通信不能。

IR8200Hは115.2kbpsで、IrCOMMを持っているが、IrOBEXをサポートしてないし、IrLPTもなく、QFP80と馬鹿でかい。なんだって、こう中途半端な商品群になってしまったんでしょうかねえ。

やっぱ18pin SOIC 300milで115.2kbps, IrCOMM DTE Modeのみに機能を絞って商品化したMCP2150の割り切りのよさは、PICの割り切りの良さと同じでMicrochip社のお家芸なんですね。

MCP2150とIR-4000Uとの通信でトラブルが起こるのは、MAC2150の方に原因が...などと、言い訳しているんですが、MCP2150を能動状態にしてなくっても、私のWindow2000マシンは、IrJackや、IrStickを刺しておくとブートしなくなるし、WindowsMEは、電源を切らないで、IrJackや、IrStickを外すと、不安定になったりフリーズします。


IrDA Serial Dongle

USB IrDA Bridgeは、ひとまず物が届かないので保留にして、手元にZaurus用に買ったSharp CE-IR5赤外線インターフェースがあるのを思い出し、Windows 2000で再挑戦してみました。

このデバイスの中身は、ACTiSYS IR-200Lで、Windows 2000のDiskにも最初から登録されているデバイスです。

果たして...

見事にRebootしてしまいます。

COM Port接続、USB接続で同じ挙動をするとなれば、これはたぶん、今まで考えていたより、もっと上のIrDA Protocol Stackで問題を生じていることを示唆しているようです。たぶんMCP2150も変な信号を送ってるのでしょうが、変な信号を受け取ってRebootしてしまうのとは、別次元の問題ですね。


Microsoft

ということは、このMCP2150開発ボードと電池を持って、気に食わないやつがWindows 2000でIrDAを使っているのを見たら、スイッチを入れるだけで、システムをDownできるのだから脅威です。Microsoft Security Response Centerにレポートを送ると速攻で返事がありました。

Hello Shigeru,

Thank you very much for your report. I have opened an investigation on

this and will let you know the status. Our Dev team may have additional

questions or need clarification during the reproduction of this. Will it

be ok for me to contact you if needed?

Again, thank you for your report. I look forward to working with you on

this matter.

Regards,

Terri

-----Original Message-----

From: Shigeru Makino [mailto:]

Sent: Tuesday, February 25, 2003 11:50 PM

To: Microsoft Security Response Center

Cc: Shigeru Makino

Subject: Windows2000 will be crashed by IrDA

Dear Sirs:

Windows2000 will be crashed by IrDA.

The method only brings Microchip MC2150 in the operation to the

communication zone.

http://www.microchip.com/1010/pline/analog/anicateg/interface/infrared/devices/mcp2150/index.htm

Any application has not started.

The machine was only set to possible for IrDA communication.

Windows2000 is going to reboot state suddenly.

I checked this fact on Windows 2000 5.00.2195 Service Pack 3 Japanese Ed.

CPU : Intel Pentium4 2.6GHz

M/B : ASUS P4PE

Memory: 1GB

IrDA Devices:

ACTiSYS IR-4000U USB IrDA Bridge.

Link evolution IrStick.

ACTiSYS IR-200L COM Port IrDA Dongle.

This phenomenon did not happen in Windows series other than Windows 2000.

Best Regards,

-- mac

早くパッチが出てくれるのを期待しましょう。


Microchipからの連絡

Microchip Japanに連絡をとったものの、どうも的確な答えをもらえませんでした。この際だからアメリカ本社のtech.support@microchip.com に聞いてみました。

すぐ明確な答えが返ってきました。私が調べたことあわせ、対策をまとめます。


MCP2150は、Device IDを変更することができ、Windows付属のHyper Terminalで開発キットのボードをつなぎ通信した場合は、ある条件下で、この書き換えを行うDTR/RTSのシーケンスを、発生してしまうことがあります。

偶然このモードに入り、規格外のDevice IDになっても、MCP2150はそれを受け入れEEPROMに書き込み、以後、このDevice IDを送信するようになります。

Windows 2000は、こうして発生した規格外のDevice IDを受け取ると、RebootするバグをIrDA Protocol Stackに持っていました。

英語版Windows 2000 SP2には、この問題を回避するパッチが配布されましたが、日本語版Windows 2000 SP3には、未だそのバグが残っています。

MCP2150に規格に則ったDevice IDを書き込めば、Windows 2000は、Rebootすることはなく、IrCOMM2kを介してMCP2150と通信可能です。

また、Microsoft Windows開発チームには、日本語版Windows 2000 SP3に英語版ではfixedされたバグが残っていることをレポートし、Patchを配布するよう要請しましたので、MCP2150に故意に規格外のDevice IDを書き込み、Windows 2000をクラックさせる危険性も、このパッチが配布されれば回避できるようになると思います。


それでどうするの?

本来だと、それを何に繋いで使うのか書きたいところですが、Clientがばれてしまうので、このレポートはこれでおしまいです。

大量生産なら、IrDA Protocol stackを作ったり、出来合いのミドルウエアを買ってきても良いでしょうが、少量多品種で納期が短かったり、Protocolの検証が不十分でバグが残るリスクを考えると、MCP2150はずいぶんお手軽なICです。

「評価用のキット」を使うのも、私の場合あまり多くはないのですが、これだけお手軽に実験ができると、それほど高いものでもないと思いました。


mac's junctionに戻る


Copyright 2003