usbserial

PIC 18Fシリーズを使ったUSB-シリアル変換器

https://raw.github.com/iruka-/ATMEL_AVR/master/web/jpg/PIC/14k50.jpg

元ねた 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ダウンロード(仮)