USB       
TOPページへもどる
USB-COM変換器 CDC-2313版 recursion社作 '07.11.17
Tiny2313 USB 汎用 I/O MorosanSoftさん作 '07.11.03
USB-COM変換器 FT232RL版 TXDとRXDのみ '07.06.10
USB-COM変換器 CP2102版 TXDとRXDのみ '07.06.10


USB-COM変換器 CDC-2313版
 recursion社のtamuraさんがTiny2313でできるUSB-COM変換器を発表しておられますので制作してみました。12MHzの水晶を使用して、9600bpsで通信できるとのことです。例によってプログラムの内容は理解できないのですが、安価に入手できるtiny2313でUSBが使えればおもしろいと思いました。作り上げてからテストするための9600bpsターゲットが無いのに気づいて、今はもう使わなくなったAT90S2313で簡単なターゲットを作っています。

CDCは Communication Device Class の略で、WindowsのUSBに標準で準備されたドライバ usbser.sys を使うために特定のドライバが必要ではありません。作者によって用意されたavrcdc.infを用意するだけで実行できるそうです。上記の作者の AVR-CDC.2007-07-07.zip をダウンロードすると含まれています。

CDC-2313変換器と9600bpsターゲットボードの写真と回路図を示します。



回路図のLED(red)はUSBが5Vでは動かないコンピュータがあるために約3Vにするための物ですが同時にパイロットランプになっています。なお、手持ちの部品を使うために原典から変更しているところがありますので、必ず原典を参考にされるようお願いします。
例によって基板は1mmガラスエポキシの両面の物をプラカッターで絶縁溝を付けてプリント風にしています。いくつか刻む内にあとの配線が楽になるパターンがわかってきました。プラカッターは切れ味が鈍くなってきますが、\100のダイヤモンド鑢で時々修正すると作業が楽になります。基板に鉛筆で概略を書いてから刻むと間違いが少なくなります。下図を書くことも無く大体の配置を考えてまず穴を開け、それにあわせて溝を作っています。すこしはましになってきたかと本人は思っています。

配線完了後にUSBポートに差し込み、デバイスの認証を試みましたが、はじめは認証されませんでした。何回か繰り返す内に理由はわかりませんが新しいデバイスとして登録されました。(私のコンピュータはUSB1.1のポートとUSB2.0のポート2個を常用していますので、接続するポート毎に違ったCOM番号で登録されます。)
次にテストボードを作りました。プログラムは簡単で、teratermから"1"が送られてくると"one"を返し、"2","3" で "two","three" を返し、それ以外の文字では"Select 1,2,3"を返すものです。もちろんボーレートは9600bps固定になっています。
完成の後、誤配線による異常がありましたが、それを修正しても、返る文字が3文字の間は正常なのですが、4文字異常になると3文字を超えた分に異常が生じます。CP2102使用のUSB-COMコンバータでは正常に動くことから、ターゲットボードのUARTの制御をしてもCDC-2313の処理が間に合わなくてデータが欠落するのではないか(上書きされてしまう)と考えて、1文字送信の度にウエイトを入れてみました。結果的に、2.0msでは異常が起こり、2.5msのウエイトを入れると正常な通信ができました。テストプログラム

このことについて、シバ某 さんから丁寧な説明をいただきましたのでここに再掲します。
 初めまして Kumanさん。
 CDC-2313 〜 TARGET2313 で「フロー制御」をしていなければ、TARGET2313の送信バッファが空きになっても、 CDC-2313が 次を受信受け付け可能であるとは限りません(受信バッファが空いてないのに、一方的に 送りつけられても困る ということ)。
 また、CDC-2313 〜 TARGET2313 間は 9600bps通信でも、CDC-2313が受信データを PCに送るのには USBの規格に関連する 1ms単位の「フレーム」という時間間隔の縛りがあります(実際は、最短でも 2ms単位 での受信データ引取りと思われます)。
最初の 2バイトはよくても、3バイト目が UART受信バッファに入った時点では CDC-2313がUSB通信の ソフト処理に掛かりきりな状態で TARGET2313が 4バイト目を送ってくるので異常になっているのだと 思います。フロー制御していないなら、解決策としては十分な waitを掛けるしかないでしょう。 オシロをお持ちなら、USBと UART双方の通信路の信号を同時に観測すれば状況がつかめると思います。

また、いつもお世話になっているすんさんからもコメントをいただきました。
 私も、USBはPCと最小で1msecで通信すると聞いたことがあります。1msecなのは、USB機器はホスト(PC)からの問い合わせに対し応答する機器なので、データがあるからと言ってPCへ送れないためだと思います。
PC-USB機器間がUSB1.1の1.5Mbpsの速度でるのは、USB機器に十分な処理速度とバッファがある場合だと思います。ソフトウエアUSBだと一度に扱えるバイト数や時間に制約がでるのですね。なるほどです。

私にはフロー制御する力がありませんのでこのまま使うことになるのですが、使い回して常用するコンバータには cp2102 を使った物か、FTDI232RL を使った物の方がボーレートの選択性もあり格段に便利かと思います。価格的には少し高くなりますが使い回しでは1個あれば良いわけですからその方がいいと思います。ただ、ボードに組み込んで、かつ低速でも良いのならそのボード用にウエイトルーチンを組み込んだプログラムを書けば良いので汎用の低価格のICを使用する点で利点はあると思います。

同様の実験をされた方がおられましたらご連絡をお願いします。



Tiny2313 USB 汎用 I/O
  MorosanSoftさんがTiny2313だけを使ったUSB汎用I/Oを開発されました。少ない部品と簡単な回路で8ビットのポートの読み書きができるということなので内容は理解できていませんが組み立てて見ましたので報告します。

 原典と違っているところは、@D+、D-の入力抵抗が75Ωでなく手持ちの82Ωになっていること、AI/Oコネクタと並列に9ピンICソケットを準備してLEDアレイが簡単につながるようにしたこと、B手持ちのコンピュータは3.3V対策をしなくても正常に動くのでダイオードを省略したこと、C電源のコンデンサは0.1μFだけにしたこと、さらにD20MHzのクリスタルがなかったので手持ちの20MHzクリスタル発振器(発振回路内蔵の物です)で代用したこと、があります。

はずかしい出来ですが、参考のために裏面も出しておきます。近頃は生基板にプラスチックカッターでパターンを作って遊んでいます。図を書くこともなく、適当に穴あけして部品配置を考えますので間違った穴があったり、使わないパターンができたりします。カットもハンダも大倍率ルーペがなくては確認できません。

配線は0.2mmUEWを使っていますが、基板を通すときは穴の面取りをしておかないと皮膜に傷が付いて導通してしまいます。今回の基板は表裏とも使っていないところはGND電位になっています。
I/Oポートには拡張基板がコードレスでつながるようにピンソケットを付けています。写真では相手基板に付けるピンヘッダまで付いた状態で写っています(取り忘れました)。USBコネクタに4ピンのピンソケットを使うのは私のスタンダードになっています。

余談ですが私の作り方は部分配線が終わると通電してテストをします。Tiny2313に電源とプログラム用の配線をするとPCに接続して(内蔵発振器のまま)読み取りテストをします。ほとんどの場合はokなのですがたまには勘違いで誤配線することもありますが、配線部分が少ないのでチェックは楽です。つぎは、LEDアレイのテストができるようにソケットの接続をして(このときI/O端子もハンダ付けしました)手近にあったLED点滅プログラムを書き込みます。思い通りに走れば出力ポートはokです。20MHz発振器をつけてfuseビットを外部クロックに切り換えます。うまく動作しました−−やれやれ。最後にUSB接続部分の配線です。5V回路がショートしているとPCが落ちますので念入りにチェックしました。

PCに接続すると「新しいデバイスが見つかりました」、「デバイスドライバを探します...」などとあって、MorozanSoftさんのドライバを指定すると簡単にインストールが完了しました。引き続いてTestApp.exeを実行すると期待通りにLEDアレイが点灯しました。

わがPCにはVCがありませんのでどうしてアプリを作れるのかはわかりませんができるところから勉強することにします。

(2007.11.11) このデバイスをUSBの異なるポートで使いますとそのたびに新しいcomポート番号が設定されます。シリアル番号を持っていないために起こるそうですが、増えすぎたcom番号を削除するには、そのUSBポートに実装しておいてデバイスマネージャを開きデバイスドライバーを削除するとcomポートが削除されます。実装しおかないとデバイスが表示されません。



USB-COM変換器 FT232RL版
  AVRのUARTはTXDとRXDの2本をつなげばPCと通信することができます。データをPCに収集するだけでなく、特定の場所にデータ(文字)を埋め込んでデバグに使ったり、 反対にPCからキャラクタを送ってプログラムの選択をすることができます。プログラムを書くときには、tera-termで通信することでずいぶん重宝します。  このデバグの方法はSDカードの読み取り実験では大きな役割を果たしてくれました。
UART通信は本来COMポートなのですが、PCにはCOMポートは1つしかなく、私はそれをプログラマに使っていますのでUSB経由のCOMポートが必要になっています。

 変換器としては、これは3代目で、まず最初はFT232BMによるもの、続いて下記のCP2102によるものを制作した後、新しいデバイスであるFT232RLを購入しましたので作った 次第です。最初のFT232BMに比べて、外付け部品が極端に少なく、制作は楽になっています。
過去の経験から、TXDとRXDだけ取り出せば通信はできるので、今回もその接続だけを考えました。デバイスはSOPで、ピッチが0.65mmですからAVRのTQFPよりは厳しい状態で すが必要な端子にとりあえず0.2mmUEWを半田付けしています。これを万能基板に取り付けるときには半田がはずれることが多いので、取り付ける前にエポキシ接着剤で 固めてしまいました。
IC周りのアップです。
写真ではエポキシ接着剤はほとんど見えませんね。

回路図は次のとおりです。

USBを受ける側も、UARTにつなぐ側も自分流のピンヘッダで済ましています。(これが一番簡単で嵩が低いのです)

FT232RLは(FT232BMもそうですが)、VccIO端子があって、これを5VにつなぐとUART関係のIOが5V動作となり、これを3.3V(内部レギュレータ端子)につなぐと3.3V動作と なります。AVRを3.3Vでも使うことがありますので、ショートピンを使ったジャンパで切り換えることにしました。
PC関係は、以前にFT232BMのドライバをインストールしてあったためか、接続するとCOM6と離れた番号にはなりましたが問題なく動きました。

多くの機能を持つこのデバイスをRXとTXだけで使うのはもったいないとは思うのですが、私には十分ですからよしとしましょう。このデバイスが\380とは安くなったもの です(最近、秋月は値上げをしています。\450になっています)。


USB-COM変換器 CP2102版
 上記と同じ理由でRXDとTXDだけを取り出しています。ピッチ0.5mmでリードがありませんから半田付けは厳しくなります。

半田の量が多くは使えないので、半田直後は正常でも、時間が経つと温度変化のためか半田が離れることを多く経験しています。写真のものは以前に作ったものを 変更したものです(2009.11.12)。 別項のUART通信でHIDaspxを使っていますが、senshuさんの話ではwinXP以外ではうまく働かないそうです。現在はXPのみを使っていますから問題はないのですが、これからのことも考えて作り直してみました。回路図はつぎのとおりで、外付け部品は極端に少なくなっています。なお、遊び心でUSBコネクタを基板のカッティングで作ってみました。遊びでは十分耐えられるようです。このため幅16mm×長さ50mmの大きさとなりました。uartリードは約30cmになっています。

電源はUSBバスの5Vを使用していますが、このデバイスは内蔵のレギュレータで3.3Vに変換し、すべての回路が3.3Vで動いているようです。したがって、TXD端子も出力が3.3Vしか出ていません。AVRが5V動作の時は必要なH入力は5V*0.6=3.0Vですから、かろうじて使えています。一方、入力端子(RXD)は5Vトレラントらしく、5V入力を 直接加えている回路を見ます。この場合も10kの保護抵抗?は入れてありますが、5V動作のAVRに接続するときは5Vがかかることになります。結果的には切り換えなく5Vと3.3Vで 使えます。
このデバイスのドライバも、今ではWinXPかWEB上にあるようで(無責任?)何となくインストールできています。私の場合は過去のWinインストール時に最初にインストールしましたからCOM3で使えています。































inserted by FC2 system