usbserial
PIC 18Fシリーズを使ったUSB-シリアル変換器
元ねた mcc18
ダウンロード
割り込み使用版ダウンロード
senshuさんの差分を適応した版
mchipcdc-14k2.zipからの変更点
- PIC 18F14K50 / 18F2550 / 18F4550 の3品種に対応しました。
- セルフエコーバックのルーチンを入れてみました。
- シリアル転送のベンチマークが出来るようにしてみました。(w32term)
結論
- 専用ドライバーを用いずに、USB汎用のCDCデバイスクラスのままでは、それほど速度が出ないことが分かりました。
あくまでもターゲットデバイスがPIC 18Fの場合ですが、
- セルフエコーバックでUHCI直結の場合=600Kbps程度が上限。
- セルフエコーバックでHubを挟んだ場合=800Kbps程度が上限。
- Tx/Rx接続によるエコーバック=200Kbps程度。
- 但し、Tx/Rx接続の場合ProcessIO()関数内ではUSARTとのやりとりが1文字単位なので効率が悪いです。
- USART送受信を割り込みで処理すれば多少は改善するかもしれません。
おまけ:USBシリアルファームとpic18spxファームの共存について
- PIC 18F14K50などにはFlashメモリーが16kB乗っていますので、pic18spx簡易モニター兼PIC/PIC24/AVRライターを全部詰め込むことも可能です。
- やり方は、まず、以下のusbシリアルファームを最初に焼いて、次にpic18spxを焼きます。
- 焼く方法はbootloader(picboot.exe)を使います。
もしくは外部ライタのどちらでも構いません。- 外部ライタで焼く場合は2つのhexを適当なテキストエディタを使って切り貼りする必要があります。
- 後から焼いたほうが強いので、起動するのはpic18spxのほうです。
C:picspx> picmonitor.exe PIC>
- そこで、usbシリアルを起動するために、以下のコマンドを実行します。
PIC> boot 2c00 PIC> q C:picspx>
- この状態でUSBバスが一旦リセットされ、アドレス2c00から配置されたファームウェアに制御 が移っている(usbシリアル変換デバイスになっている)はずです。
- 同様にして、picmonitor.exeの状態から、bootloaderに制御を戻すには
PIC> boot 0
- で行うことが出来ます。(但しbootloaderはboot jumperを見ますのでboot 0を行うまえにjumperの設定が必要です)
- picboot.exe -r を使用してpicspxに制御を移している場合ならjumperそのままの状態でloaderに戻ります。
usbシリアル:ダウンロード(仮)
senshuさんの差分を適応した版(上記アーカイブに差分usbserial-0407.diffを適用したものです。)
pic18spxダウンロード(仮)