Tue 03/08, 2011

Freescale JM Badge Board [Electronics ]

先日、新適当マイコン電子工作研究所の @noritan_org さんから Freescale 社のデバイスや評価ボードなどを多数分けていただいた。noritan_org さん、ありがとうございます。で、今日はその中から JM Badge Board (Rev.C) を使ってみた。これは同社の ColdFire V1 シリーズで USB 機能を搭載した MCF51JM128 MCU の評価/デモボードだ。
この評価ボードについては http://www.canyourbadgedothis.com/ というポータルサイトがあったのだけれども、現在はすでに閉鎖されている。パッケージに同梱の DVD メディアに含まれる開発ツールもインストーラが壊れていて使えない上、サンプルプログラム等の推奨開発ツールである CodeWarrior for Microcontrollers v6.2 は Freescale サイトでの配布が終了している。そうした事情もあって、これらの開発ツール無しでの実験として Windows 7 の「Sensor and Location プラットフォーム」を試してみた。こちらについては「Freescale JM Badge Boardを使ってSensor and Locationプラットフォームを動かす ―― センサ応用システムの開発を助けるWindows 7の新機能」の記事に詳しい。

ざっと追試してみる。
  • まず、"Sensor Development Kit for Windows 7" を取得する。
    Windows Sensor And Location Platforms ページの download タブから "Sensor Development Kit for Windows 7" を取得して展開しておく。
  • 次に JM Badge Board のファームウェアを更新する。
    JM Badge Board のスイッチはオフのまま、Windows 7 PC につないで LED に "Press E4 for Bootloader" のメッセージが出たらタッチスイッチ E4 にタッチすると、Bootloader モードになり、リムーバブルディスクとして認識、マウントされるから、ここに先ほど展開した中から \Sensor_Development_Kit\Firmware\Binaries フォルダにある BadgeSensorsGreenBootloader.S19 をコピーする。 一旦、PC から JM Badge Board を取り外し、JM Badge Board のスイッチをオンオフする。
  • Windows 7 にデバイスドライバをインストールする。
    \Sensor_Development_Kit\Driver\Binaries\{amd64|x86}\SensorDriverInstaller.exe を実行する。 JM Badge Board を接続し、そのままにしておくと LEDマトリクスの左端の上下が点滅して ”USB HID sensor demo for HC9S08JM devices” とて認識される。
  • テストアプリケーションによる動作確認。
    \Sensor_Development_Kit\Tools\DiagnosticTool\Binaries フォルダの SensorDevKitDiagnosticApp.exe で JM Badge Board に搭載された加速度センサ(3D Accelerometer)の出力と E1-E8 タッチセンサの状態をモニタできる。なお、Rev-C ボードには照度センサ(Ambient Light Sensor)は搭載されていないため、その表示は無効である。
でもって今度は NetBSD5 機につないで見ると次のように HID として認識される。
uhidev0 at uhub1 port 1 configuration 1 interface 0
uhidev0: CMX Systems USB HID sensor demo for HC9S08JM devices, rev 1.01/0.00, addr 3, iclass 3/0
uhid0 at uhidev0: input=64, output=64, feature=0
まず、usbhidctl -r でデバイスの様子を確かめる。
-bash-4.1$ usbhidctl -f /dev/uhid0 -r
Report descriptor:
Collection page=Microsoft usage=0x0001
Output  size=8 count=1 page=Generic_Desktop usage=Counted_Buffer, logical range 0..0
    :
Output  size=8 count=1 page=Generic_Desktop usage=Counted_Buffer, logical range 0..0
Input   size=8 count=1 page=Generic_Desktop usage=Counted_Buffer, logical range 0..0
    :
Input   size=8 count=1 page=Generic_Desktop usage=Counted_Buffer (1:0x3a), logical range 0..0
End collection
Total   input size 64 bytes
Total  output size 64 bytes
Total feature size 0 bytes
-bash-4.1$
様子がわかったところで、データを取得してみる。
-bash-4.1$ usbhidctl -f /dev/uhid0 -av
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=1
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=1
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=236
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=131
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=131
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=127
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=236
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=211
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=92
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=73
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=168
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=207
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=184
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=187
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=232
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=92
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=41
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=32
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=13
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=100
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=63
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=157
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=222
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=118
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=96
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=31
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=108
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=115
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=1
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=1
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=232
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=250
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=29
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=1
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=24
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=21
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=1
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=1
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=31
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=108
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=115
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=1
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=1
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=236
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=131
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=131
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=127
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=236
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=211
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=92
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=73
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=168
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=207
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=184
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=187
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=232
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=92
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=41
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=32
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=13
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=1
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=68
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=190
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=212
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=120
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=105
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=189
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=117
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=147
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=138
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=191
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=0
-bash-4.1$
このように 64 バイト(x2 前半は output、後半が input。オプションに v を4個付けるとレポートの種類(kind)などまで表示される)のレポートが得られるが、この内容は \Sensor_Development_Kit\Firmware\Sources\Sources\Microsoft\hid_sensor.h の out_struct で定義されている。大雑把に参照すべき内容をまとめてみた。
オフセット名称内容
1sensor_id1:加速度
2:照度計
3:タッチセンサ(E1-E4)
4:タッチセンサ(E5-E6)
4-11report_idSENSOR_DATA_TYPE_MOTION_GUID
(0X3F8A69A2, 0X7C5, 0X4E48, 0XA9, 0X65, 0XCD, 0X79, 0X7A, 0XAB, 0X56, 0XD5):
加速度センサデータ型UID
SENSOR_DATA_TYPE_GUID_MECHANICAL_GUI
(0X38564A7C, 0XF2F2, 0X49BB, 0X9B, 0X2B, 0XBA, 0X60, 0XF6, 0X6A, 0X58, 0XDF):
GUIスイッチデータ型UID
16-19dword_data[0]タッチセンサ
bit 0 - E1 or E5
bit 1 - E2 or E6
bit 2 - E3 or E7
bit 3 - E4 or E8
16-27float_data[0:2]加速度センサ X,Y,Z
16-19float_data[0]照度センサ
sensor_id を見ることで出力されるデータ種別を特定できるが、念を入れるなら report_id で UID の確認もできる。
更に usbhidctl では item を指定することで必要なものだけを表示させることができる。sensor_id だけを表示させてみると通常は 1 (加速度)で、タッチセンサに触れると 2 に変化する。
-bash-4.1$ usbhidctl -f /dev/uhid0 -lv Microsoft:0x0001.Generic_Desktop:Counted_Buffer#1
Microsoft:0x0001.Generic_Desktop:Counted_Buffer=1

Microsoft:0x0001.Generic_Desktop:Counted_Buffer=2
これを複数指定し、-l オプションで繰り返し input レポートを取得すると次のようになる。item のページ名は省略できる。
-bash-4.1$ usbhidctl -f /dev/uhid0 -ln 1.Counted_Buffer#1 1.Counted_Buffer#4 1.Counted_Buffer#5 1.Counted_Buffer#6 1.Counted_Buffer#7 1.Counted_Buffer#8 1.Counted_Buffer#9 1.Counted_Buffer#10 1.Counted_Buffer#11 1.Counted_Buffer#12 1.Counted_Buffer#13 1.Counted_Buffer#14 1.Counted_Buffer#15 1.Counted_Buffer#16 1.Counted_Buffer#17 1.Counted_Buffer#18 1.Counted_Buffer#19  1.Counted_Buffer#20 1.Counted_Buffer#21 1.Counted_Buffer#22 1.Counted_Buffer#23 1.Counted_Buffer#24 1.Counted_Buffer#25 1.Counted_Buffer#26 1.Counted_Buffer#27 1.Counted_Buffer#28 1.Counted_Buffer#29 1.Counted_Buffer#30 1.Counted_Buffer#31  1.Counted_Buffer#32 1.Counted_Buffer#33 1.Counted_Buffer#34 1.Counted_Buffer#35
1
162
105
138
63
197
7
72
78
169
101
205
121
122
171
86
213
1
0
0
0
170
241
74
190
66
96
69
189
237
124
133
191

1
162
105
138
63
197
7
72
78
169
101
205
121
122
171
86
213
1
0
0
0
194
245
180
190
129
149
59
190
252
169
123
191
こうした出力を適当なフィルタに通して加速度センサやタッチスイッチの状態を取得することができるが、とりあえずはここまで。フィルタを使うなら、そこまでせずとも usbhidctl -al の出力でも十分ではある。

Posted by masato at 10:55 PM
このエントリーのトラックバックURL: http://bird.dip.jp/cgi-bin/mt/mt-tb.cgi/1795
コメントする

おそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。










名前、アドレスを登録しますか?