2015/03/01

Free Device Monitoring Studioは1日5セッションまでだった

USBスニファとして使い始めたFree Device Monitoring Studioだが、前回は「12分まで」と書いたが、もう1つ制約があった。
1日5セッションまで、という制限だ。

image

うーん・・・、この制限はちときつい。
いまはデバイスのつなぎ初めとかを見たいので、しょっちゅう入り切りしていたのだ。
かつ、タイミング悪いとPCがブルースクリーンになってしまい、再起動という・・・。

 

そんなわけで、USBPcapとWireSharkで進めることにした。
お仕事だったらツールを購入するところなのだけど、お遊びでやってることだし。
それに、キーボードのカスタマイズをするのと同じようなもので、どこでも同じ環境を作りやすい方が優先されてしまう。
まあ、場合によりけりってとこですかね。

[win]休止状態にならないのはアクティブパーティションがないためだった

私はWindows7を主に使っている。
週に一回くらいはシャットダウンするが、通常は休止状態で電源を切っている。
SSDだと負担がかかってよろしくないような記事を見たことがあるが、うちは普通のHDDだし、まあそこまで目くじらを立てることはなかろう。

が、その休止状態が急に動作しなくなった。
いつも寝る前に休止状態にしているのだが、朝起きてもまだ電源が入っていたままだったのだ。
なんというか、スリープっぽい状態になっていただけというか。
休止状態に入ると復帰するには電源ボタンを押すしかないのだが、今回の状態だとマウスとかキーボードを触ると復帰してしまうのだ。

私のイメージでは、休止状態というのは現在動作しているアプリなどのプロセスが使っているRAMをディスクに退避させる技術だ。
ほら、RAMが少なかったらディスクにスワップさせるではないか。あれのRAMが0バイトになってしまった版。
プラス、プロセスの管理情報とかも一緒に保存して、とにかくRAMのものを全部消してしまっても復元できるようにしてしまう技なんだろうと思っている。

まあ、私のイメージがどうだろうと、休止状態にならないことには変わりがないが・・・。


急にならなくなったのだが、なんとなく思い当たりがあった。
週末からUSBのスニファをあれこれ試したりしていたので、そこら辺じゃないか、というものだ。
検索すると、USBキーボードが・・・とかでよく出てくるし。
しかし、今回はそれではなかった。
インストールしたスニファもアンインストールし、USBデバイスも外し、スリープから復帰させることができるようにする設定も外したが、現象変わらず。

次にそれっぽい情報として、パーティションがアクティブになっていないのがダメだった、というのがあった。
そういえば、「システム」の「既定のオペレーティングシステム」が何も表示されなくなっているな・・・。
ということで、ディスクの管理からCドライブの先頭パーティションをアクティブ設定にした。
そしたら、休止できるようになった!

 

アクティブなパーティションがなくなったから休止状態になれなくなったのか、というのはわからない。
次回、似たようなことが発生した場合の対処として残しておこう。

2015/02/22

[mbed]初mbedはNUCLEO-F411RE

スイッチサイエンスさんから、mbedを買った。
Cortex-M3は2つあるし、M0は1つあるので、M0+にするかM4にするか迷った末、M4にした。
ST Nucleo Board STM32F411RET6 - スイッチサイエンス
RS Onlineの方が本体価格は安かったんだけど、ブレッドボードもほしかったので。
一緒に、イーサネットをつなぐ部品も買った。まあ、使うかはわからんけど。
mbed用イーサネット接続キット - スイッチサイエンス

私の予定では、ブレッドボードを2枚横につなげて、そこにmbedを載せるつもりだった。
が、横につなげるとピンの幅が合わないのね・・・。
まあ、ばらばらにすれば使えるから、よしとしよう。

埋め込み画像への固定リンク

 

PCにUSBでつなぐと、ST-Linkとかのドライバがないと言われる。
mbedのページに行って、アカウントを追加して、デバイスとしてF411REを追加すると、情報ページが出てきた。
そこにFirmwareを新しくしてね、とあるのでリンク先に飛ぶと、先にST-Linkのドライバを入れる、というリンクが出てきたので、そこからダウンロードして実行すると、ドライバが追加された。
Firmwareのファイルも、ダウンロードして実行すると、焼かれた(USBスニファを起動していたためか、最初はNUCLEOに焼いているFirmwareを読めなかった)。

あとは、作ったアカウントにプロジェクトを新規作成し、ひな形としてLED点滅のを選び、適当に時間を変更してコンパイル。
そうするとbinファイルがダウンロードされるので、それをUSBメモリとして見えているNUCLEOに置くだけ。
焼いてる間は、USBコネクタ近くのLEDがちかちかするみたいだ。

LEDは3つあり、1つはUSB通信の状態とかを表すやつ、1つがユーザ用、もう1つが電源状態用になっている。
で、この電源LEDなんだけど、とてもまぶしい。
基板の文字が読めないくらいだ。
これはマイコンとはつながっておらず、電源から直につながっている。
R32をはずせばいいんだけど、それもなぁ。
というわけで、シールを上から貼る、というアナログな方法で対応した。
まあ、一種のOut of Bandな対策ですな。

そういえば、Nexus5でUSBメモリをマウントできたので、Androidから焼けるかどうか試そうとした。
が、Nexus Media ImporterがFAT12に対応してないらしく、マウントができなかった。
残念。

USBのパケットキャプチャ

今まで、USBのパケットキャプチャにSnoopyProを使っていた。
よかったのだけど、Windows7にしてから動かなくなったように思う。
まあ、元々がXPで動作確認と書いてあるから仕方ないのだが・・・。

以前、TIのBLEスニファをWireSharkで見る際、USBpcapを使った。
これは、USBのパケットをWireSharkで見たかったので使ったのだけど、キャプチャする対象がハブかポートかわからないけど大きなまとまりでしかできなかった。
なので、場合によっては意図してないパケットまで入り込んでしまい、ちょっとわずらわしい。

今回見つけたのは、Free Device Monitoring Studio
これはなかなかよかった。
フリー版の制限で12分までってなってるが、それなら困りはしない。
が・・・さっき気付いたんだが、Grace Periodってことで4日間だけなのか。
がーん。
4日間はフル機能が使える、という意味だったらよいのだが・・・。

でも、こっちのサイトを見ると、お金のことは書いてないな。
そもそも、上のページでも「Zero price software」とあるしなぁ。
しばらく使ってみよう。

[libusb]Enumerationができていなかったのは、私が悪かった

前回、USB_NODE_CONNECTION_INFORMATION_EXのメモリ確保について書いたが、よくよく考えるとそれが原因ではないと思う。
もしメモリが足りないのだったら、APIがエラーを返すべきなのだ。
メモリが足りない→APIは未接続で返す、ということにはならないだろう。

 

デバッグ出力を追加して見ていったのだが、どうもNoDeviceConnectedで返しているときはVIDやPIDが0x0000になっていて、usbviewでNoDeviceConnectedを返しているタイミングと同じようだ。
libusb_open()で失敗しているのはこんな深いレベルじゃなくて、単に判定のしかたが足りてないだけか?
うわっ・・・私のEnumeration、甘過ぎ・・・?

 

こんな順番で、対象の機器を探していた。

  1. libusb_init()
  2. libusb_get_device_list()
  3. libusb_get_device_descriptor()
    1. VIDとPIDが一致するまで、ぐるぐる回す
    2. break
  4. libusb_open()

この4番でopenに失敗するとみなしていた。
しかし今回のデバイスは、デバイスマネージャーで見ると同じ名前で複数出てくる。
zadigでも、Interface0、Interface1、みたいに出てきていた。
だからかわからないが、最初にVIDとPIDが一致しただけで判断するのではだめなようだ。

  1. libusb_init()
  2. libusb_get_device_list()
  3. libusb_get_device_descriptor()
    1. VIDとPIDが一致するまで、ぐるぐる回す
      1. libusb_open()
      2. 成功したらbreak

こんな感じで、できた。
libusb、疑ってすまんかった。