整理した物をここに

PIC18F4550でカーソルが回転する DEMO HID プログラムを実行
Microchip社のPIC18F4550とPICDEM. FS USB DEMONSTRATION BOARD USER S GUIDEに有るカーソ
ルが回転するHID プログラムを確認しました。
USBの動作を確認するには、内容が判る物が必要です。PIC18FXxxとそのフレームワークは内容が公開さ
れているので動作確認用に適していると思い動作させることにしました。
ハードウエアは、写真の様に汎用基板で手配線です。動作確認は単純な物の方が分かりやすいので最小
必要品だけにしました。
プログラムは、PICDEM. FS USB DEMONSTRATION BOARD USER S GUIDEをインストールすると
_MCHPFSUSB_v12\MCHPFSUSB\fw\Hid\Mouse に有るカーソルが回転するHID プログラムをC18(期間限
定版)でコンパイルしました。
そのままコンパイルしたら動くだろうと簡単に考えていたのですが、難儀しました。単純な思いこみで時間
が掛かりました。それをクリアしたら変更無しで問題なく動きました。
単純な思いこみは、「バスパワーセンスの処理」をしてなかったのです。リセットしてプログラムを開始する
と、1秒程度で停止しました。停止する時間はバラツキが有ります。かなり悩んだのですが、usbcfg.hの次の
様にコメントアウトで解決しました。
//#define USE_SELF_POWER_SENSE_IO
//#define USE_USB_BUS_SENSE_IO
//See MCHPFSUSB Firmware User's Guide
// for more details about these features.
プログラムを動作させてカーソルが回転するのを確認しました。又、USBスコープでパソコンとのやり取り
を調べて、プログラム内容やUSB規格と見比べました。詳細な見比べは今後の課題とします。
PIC18F4550 DEMO HID プログラムのカーソルが回転する仕組みを
USBスコープで調査
PIC18F4550 DEMO HID プログラムのカーソルが回転する仕組みをUSBスコープで調べた内容は左と上
です。そして、デバイスクラスが判るSOF = 520の詳細とReport Descriptor (Mouse)を、矢印で示します。
又、 Report Descriptor (Mouse)で定義されたデータフォーマットを下に示します。
PIC18F4550 DEMO HID プログラムは、リセットして、プログラム開始からUSBスコープで調べています。デ
ータ長を調べるGET_DESCRIPTORから始まり、SET_ADDRESSで固有アドレスの設定とエニュメレーションが
続きます。ここでは、カーソルが回転する仕組みを調べるのでエニュメレーションの中から、SOF = 520とSOF
= 54Cに注目します。SOF = 520とSOF = 54Cの詳細は矢印で示します。
SOF = 520でデバイスクラスをHID,サブクラスをMouse、転送タイプ、転送方向等を定義しています。
SOF = 54Cで下のデータフォーマットをDevice Class Definitionで定義しているのですが、このUSBスコー
プでは見えないので「Device Class Definition for Human Interface Devices (HID)」を参考にしました。
PIC18F4550 DEMO HID プログラムの「usbdsc.c」に同じ内容が定義されています。
上のSOF = 568を見ると、3バイト単位のデータ転送です。データの内容はマウス移動量です。
USBスコープのデータを省略していますが、データは、「00 FC FC」→「00 FC 00」→「00 FC 04」→「00 00
04」→ 「00 04 04」→ 「00 04 00」→ 「00 04 FC」→ 「00 00 FC」→ 「00 FC FC」→ を繰り返しています。変化
点のSOFは78h毎です。「FC」は、ー4です。
データ転送は、PIC18F4550 DEMO HID プログラムの「user_mouse.c」のEmulate_Mouse(void)にそのような
内容がプログラムされています。
Report Descriptor (Mouse)
Item
Value (Hex)
Usage Page (Generic Desktop),
05 01
Usage (Mouse),
09 02
Collection (Application),
A1 01
Usage (Pointer),
09 01
Collection (Physical),
A1 00
Usage Page (Buttons),
05 09
Usage Minimum (01),
19 01
Usage Maximun (03),
29 03
Logical Minimum (0),
15 00
Logical Maximum (1),
25 01
Report Count (3),
95 03
Report Size (1),
75 01
Input (Data, Variable, Absolute),
;3 button bits
81 02
Report Count (1),
95 01
Report Size (5),
75 05
Input (Constant), ;
5 bit padding
81 01
Usage Page (Generic Desktop),
05 01
Usage (X),
09 30
Usage (Y),
09 31
Logical Minimum (-127),
15 81
Logical Maximum (127),
25 7F
Report Size (8),
75 08
Report Count (2),
95 02
Input (Data, Variable, Relative), ;2 position bytes (X & Y)
81 06
End Collection,
C0
End Collection
C0
データフォーマット
Byte
0
1
2
3 to n
Bits
0
1
2
4 to 7
0 to 7
0 to 7
0 to 7
Description
Button 1
Button 2
Button 3
Device-specific
X displacement
Y displacement
Device specific (optional)