これまでAVR中心に扱ってきましたが、AVRにおけるArduinoと似たような存在として、PICの方でもUBW(USB Bit Whacker)というものがあることを知りました。こちらはマイコンにUSBコントローラを内蔵しているPIC18F2550を使用可能で、しかも、秋月で売っている18F2550マイコンボードをほぼそのまま使えるようです。しかも、ホストとの通信にはデバイス内臓のUSBコントローラを使うということで、極小サイズでデバッグができるようです。
というわけで、試してみることにしました。
ハードウェアの準備
ハードウェアは千秋ゼミのサイトを参考に、AE-18F2550を使ってブレッドボード上に構成しました。
ブートローダの書き込み
UBWでは、ブートローダのことをFirmware Bと呼ぶようです。このFirmware Bは、こちらのページの「UBW driver」というリンクの先にあるB.zipファイルに入っています。これを展開すると、FW_B_20MHz.hexというファイルが「output_20MHz」フォルダの下にあるので、これをWindows上の「PICkit 2 Programmer」で書き込みます。
書き込み完了後、UbuntuマシンにAE-18F2550を接続しても・・・・なにも起きません。動いてないと困るので、ポートRC2をGNDに落としながらMCLRをリリースすると、LEDが交互点滅し、どうやらブートローダが動いていることがわかりました。
ダウンロード用プログラムのコンパイル
次にダウンロード(ブートローダにアプリケーションを流し込んで書き込む)用のプログラムをコンパイルします。
こちらのサイトを参考に fsusb-0.1.11-2.tar.gz をダウンロード、コンパイルします。一次配布サイトなのかどうかよくわからなかったのですが、make一発でコンパイルします。
ファームウェアの書き込み
次に、Firmware D と呼ばれるアプリケーションをダウンロードします。こちらのページの途中に「・・・・ UBW Firmware D released」というリンクがありますので、それをクリックすると、Firmware D の圧縮ファイルが入手できます。これを展開したら、ポートRC2をGNDに落としながらMCLRをリリースして、LEDを交互点滅させます。この状態でブートローダが待機しているようですので、
$ sudo ./fsusb FW_D_2553.hex
として書き込んで、再度MCLRでリセットをかけると、異なるパターンのLED点滅が始まりました。
追伸
fsusb をルート権限で動かすのは面倒くさいので、こちらの記事で追加した /etc/udev/rules.d/60-local.rules に
# PICkit2 programmer ATTRS{idVendor}=="0d48",ATTRS{idProduct}=="0033",GROUP="usbuser",MODE="0660" # UBW bootloader ATTRS{idVendor}=="0d48",ATTRS{idProduct}=="000b",GROUP="usbuser",MODE="0660"
を追加してみました。再起動しないと効果がわからないので、うまくいくかわかりませんが・・・。
追伸の追伸
やっぱりダメでした・・・。何でroot権限要求するのかソース読んでみないと・・・。