PIC32の開発環境を構築する

ちょいと頼まれで、USB HIDデバイスを開発することになった。
以前にCypressのEZ-USBを使ったことがあるので、それを軸に考えていたのだが、世の中ではPICをお使いの方のほうが圧倒的に多いようだ。
そこで、バックアップとしてEZ-USBを注文した上で、今回はPICを使ってみることにした。
PICでUSBといえばPIC18、もしくは16bit化されたPIC24が人気なのだが、なにをとち狂ったかPIC32を選択した。
(これが不幸の始まり)

実際には、これの最新バージョン、Starter Kit III(SK3)を購入した。
(さらに大きな過ち)


さてPICの開発環境だが、古よりMPLAB IDEがある。
これが近年刷新されて(ほら来たよ)MPLAB X IDEとなった。
これはIDE本体、PIC32用のコンパイラXC32、そしてデバイスコンフィグレーションのUIツールHarmonyからなる。
こいつをまずPCにインストールする。
今回試用したバージョンはそれぞれ

  • MPLAB X IDE: 3.65
  • XC32 Compiler: 1.43
  • Harmony: 1.11

だ。
それぞれMicrochipのサイトからダウンロードしてきて、順に黙々とインストールする。
Harmonyのインストールが完了するとMPLAB X IDEへのプラグインのインストール方法が表示される。

  • まずMPLAB X IDEを開く
  • "Tools" -> "Plugins"を選択
  • "Available Plugis"タブを開く
  • "MPLAB Harmony Configurator"にチェックを入れ、下の"Install"ボタンを押す


終わったら、PIC32 SK3をPCに接続する。
PIC32 SK3にはUSBの口が3つある。
今回はmini B(micro Bではない)につなぐ。
IDEをインストールした際にドライバもインストールされているので、問題が無ければデバイスマネージャー上に"HID準拠ベンダー定義デバイス"として認識される。
念のため、プロパティを開いて、VIDが0x04D8、PIDが0x8107になっていることを確認する。


さてなぜあちこちに煽り言葉が入っているかというと、ドはまったからだ。

  • PIC32 SK3はMPLAB IDEではサポートされていない、インターネットに公開されている過去の資産が使えない
  • MPLAB X関連のドキュメントが少ない、MPLABから移行した人にとってからは簡単、初めから始めると地獄

ということでTo Be Continued...

GPD Pocket、旅に出ます(探さないでください)


実は配送されたGPD Pocket、"D"の入力が渋く、普通にタイプすると20-30%ぐらいしか入らない。
何度かGPDの担当とやり取りし、入力しているビデオなど症状も送ったところ、修理対応をしてくれることになった。
出荷で大わらわのところ、大変ありがたい対応だ。
ということで、一週間遊び倒したGPD Pocketは一時帰国となった。
その前に、ユーザーデータを初期化した。


Windows 10からはユーザーデータの初期化はとても簡単にできる。
"設定" -> "更新とセキュリティ" -> "回復"から、"このPCを初期状態に戻す"を選べばよい。
あとはいくつかある選択をすれば、きれいにワイプしてくれる。
一時間弱で作業は終わり、サラのPCとして再起動する。


GPD Pocketは物理的にはポートレートのディスプレイを使っている。
つまり横1920x縦1200ではなく、横1200x縦1920だ。
なので、デフォルトの状態では左に90°回った状態で表示される。
初期化が終わるとこの状態だ、見難いことこの上ない。
なんとか必要な設定が終わってデスクトップが表示されたら、デスクトップを右クリック -> "ディスプレイ設定"から"向き"を"横"を選べば、見慣れた姿に戻る。

組み込みRAMーその2

さて、あまり弊ブログではあまり人気のない、しかし筆者が今ご執心なVerilogのことも書いておこう。

FPGA ボードで学ぶ組込みシステム開発入門 ?Altera編?

FPGA ボードで学ぶ組込みシステム開発入門 ?Altera編?

こちらで見て分かる通り、組み込みRAMからの読み出しは、RTLシミュレーションの通り、クロック立ち上がり同期だ。
組み込みRAMへの書き込みも立ち上がりでできるかのように書いている、上記の本でもコメントで書かれている。
RAMの世界では当たり前なのだが、果たして本当だろうか?
検証してみる。
今回は、ラッパーの回路を書かず、テストベンチで直接組み込みRAMを制御する。
こちらと同じ8bits/word x 16wordsの2-portのRAMを作って、以下のようなベンチを実行する。

in_clk <= 1'b0;
in_data <= 8'haa;
in_read_address <= 4'b0000;
in_write_address <= 4'b0000;
in_write_enable <= 1'b1;
#5                                                       
in_clk <= 1'b1;
#5
in_data <= 8'h55;
#5
in_clk <= 1'b0;
#5
in_write_enable <= 1'b0;
#5
in_clk <= 1'b1;
#5
in_clk <= 1'b0;
#5
in_clk <= 1'b1;
#5

結果はこんな感じだ。

果たして、アドレス0x0にクロック立ち上がり時にデータバスに0xaaを、立ち下り時に0x55をセットすると、次の立ち上がりで同じアドレスから0xaaが読み出される。
つまり、立ち上がりで書き込んでいるのだ。

GPD Pocketのホールセンサーの誤作動で、スリープさせたのに蓋を閉じると勝手に復帰してしまい、がんがんバッテリーを食ってお困りの貴兄に

  • "コントロールパネル"を開く
  • "システム デバイス"ツリーの"ACPI Lid"を右クリック
  • "ドライバーの更新"を選ぶ
  • "コンピューターを参照して・・・"を選ぶ
  • "コンピューター上の利用可能なドライバ・・・"を選ぶ
  • "互換性のあるハードウェアを表示"のチェックボックスを外す
  • "製造元"から"マイクロソフト"、"モデル"から"ボリューム マネージャー"を選択
  • "次へ"を押して、ドライバを置き換える

Facebookのユーザグループページによると、どうもハードウェアの不具合のある個体があり、この症状を呈するようだ。
もちろん、「ヘンピンコウカン」の呪文を唱えてもよいのだが、もし蓋を閉めてスリープができなくてもいいや、電源ボタンを押しゃあいいじゃん、という人がいれば、上記のようにしてデバイスを黙殺してしまえばよい。

スリープさせたGPD Pocketが勝手に復帰してディスプレイが点灯し、がんがんバッテリーを食ってお困りの貴兄に

  • "コントロールパネル" -> "電源の設定"を開く
  • "プランの設定"を選ぶ
  • 例えばバッテリー駆動の"ディスプレイの電源を切る"と"コンピューターをスリープ状態にする"を適当な値(3分とか)にする
  • "変更の保存"を押す

どうも一度これを書き換えれば、あとは元の"適用しない"に戻しても、スリープから勝手に復帰することがないようだ。

Visual Stdio 2015も動きます、GPD Pocket


Suface Pro 3との比較、どちらも150%拡大設定。
Surface Pro 3は267PPI、GPD Pocketは323PPI、実効200PPI弱のSurface Pro 3が老眼の筆者には限界だ、GPD PocketでフルのIDEはむりむり。
ちなみにコンパイルなどの処理は十分使える程度、ただしストレージの速度が遅いのでプロジェクトを作ったり、開いたりの作業はちょっと待たされる。

GPD Pocketのmicro HDMIで外部出力


FHD(1920x1080)のモニターで正常に動作しますが・・・スケーリングのせいでVirtual Boxはまぬけなほど字がデカい。