lynxeyedの電音鍵盤

MBDとFPGAと車載で使うデバイスの備忘録

Avalon-MM Master Bridgeを探す

USB付きで簡単に使えるBridge

Qsysを使ってAvalonバスにモジュールをぶら下げて使えるシステムを開発中です。
Alteraのデバイスの以下のシリーズで検討しています。

  • Cyclone IV E / GX
  • Cyclone V E
  • MAX V CPLD

Nios IIは規模が500LE未満と軽量なソフトマクロなのでこれをAvalon-MM マスタとしてインプリメントするのが正解かもしれませんが、以下の理由からこれを見送りました。

・CPUとロジックの各部を物理的に分けておきたい(問題発生時の切り分け、USBによる外部との通信)
CPLDの場合はNios IIは通常インプリメントできない
・システム動作中に適宜、リコンフィグレーションする用途を考えているので、CPUは外部に欲しい

そこで外部にUSBデバイスorOTG対応マイコンの採用を考えました。Avalonバスを選択してもバスマスタが別個に選択できるのは便利な点です。マスタ候補は以下の通りです。

  • Vinculum II
  • LPC11U37
  • PIC32MX250F128/220F032

ここから、安価で、部品点数が減らせて、開発が容易でそこそこ演算能力がある(配列を持たせ、その積和を求める事があるので)デバイスを探しました。

  • Vinculum IIはおなじみFTDIのチップでUSBホストにもなるフレキシブルなデバイスですが、開発が謎のRTOSベースでちょっとよくわかんないし思考回路が爆発四散したのでやめ(ぉぃ
  • LPC11U37はNXPUSBLibなど豊富なライブラリに支えられており、とても使いやすい環境を提供されているのですが、BOMが増大する傾向にあったので今回は採用を取りやめました。残念。
  • PIC32MX250Fは(ESDプロテクションを考慮しないなら)そのままUSBバスに直結が可能な32bit MIPS M4KコアPICです。ライブラリが豊富でUSB OTGにも対応しているので今回採用しました。高速ADコンバータも魅力です。

PIC32MXでUSB

PIC32MXでLチカ - Lynx-EyEDの電音鍵盤 新館で触れていたので、MPLABXで開発しました。USB-CDCで動作確認をします
ハードは以前作ったものに、USB mini-Bを追加工したもの。
おもて↓
f:id:Lynx-EyED:20130527232550j:plain

うら↓
f:id:Lynx-EyED:20130527232530j:plain


必要なソフト

基本的にこのライブラリにはいっている"Device - CDC - Serial Emulator"で良いのですが、PIC32MX220F/250Fベースのものがないのと、パイロットランプ用LEDやプッシュスイッチなどは不要、またifdefで宣言されているPIC16/18/24のコードは不要ですので、ばっさり削除しました。

githubにそのときのコードを上げてあります
lynxeyed-atsu/USB_CDC_on_PIC32MX220 · GitHub

ファイルツリー構成は以下の図の様にしてください。
f:id:Lynx-EyED:20130527231144p:plain

メイン動作はUSB_CDC.cのProcessIO()関数が行っています。
この関数の後半部を

if(USBUSARTIsTxTrfReady()) {
		numBytesRead = getsUSBUSART(USB_Out_Buffer,64);
                putUSBUSART("unko",4);
	}
	CDCTxService();

とかきかえて、PIC32MX220F/250Fに書き込み。
Macでは

$  screen /dev/tty.usbmodem621

のようにオープンすると、怒濤のunkoが出迎えてくれる*1
f:id:Lynx-EyED:20130527232241p:plain
うん。もういい。

ちゃんと認識されてる事も確認。
f:id:Lynx-EyED:20130527234646p:plain

というわけで、サクッと動くことがわかったので、コレから作るデバイスのブロック図を作ってみました。以下の図はCyclone Vのものですが、他のデバイスもおおよそ同じ構成となります。
f:id:Lynx-EyED:20130527233200j:plain

設計途中の基板の3Dビュー(下図はMAX V(5M2210)+PIC32MX)
PIC32MXはボード裏側に配置しました。
f:id:Lynx-EyED:20130527233249p:plain
f:id:Lynx-EyED:20130527233258p:plain



◆参考
no crystal usb
PIC32MX220F032B クリスタル無し、内蔵FRCでUSB|marumonのページ

*1:githubに上げてあるコードはちゃんとエコーバックのコードなのであしからず