2016年2月20日土曜日

WLI-UC-GNM2でmonitor modeを使う(Debian Jessie版)

以前WLI-UC-GNM2でmonitor modeが使えるようになるまで
を投稿しましたが、Debian Jessieでは若干手順の修正が必要だったため再度投稿して忘備録にしておきます。 
かなり抜けている内容でしたしね。。。

使用しているチップセットのおさらいから。
https://wikidevi.com/wiki/Buffalo_WLI-UC-GNM2
使用しているチップセットはRT8070のようです。

RalinkはMediaTekに買収されたので、MediaTekのサイトよりドライバをダウンロード
http://www.mediatek.com/jp/downloads1/downloads/
 RT8070/ RT3070/ RT3370/ RT3572/ RT5370/ RT5372/ RT5572 USB USB    2012/10/22     v2.6.1.3 Linux
のリンクより名前とメールアドレスを入力してダウンロード。

参考元
Elecom WDC-433SU2Mで802.11acな通信を実現したかった

ダウンロードしたドライバファイルDPO_RT5572_LinuxSTA_2.6.1.3_20121022.tar.bz2を展開
(2016/2/19時点です。LinuxSAT以降のバージョンや日付は今後変更される可能性があります)

下準備

以降の作業はrootユーザーで行います
gcc、make、カーネルヘッダファイル、wireless-tools(iwconfigを使うため) tcpdumpのインストール
# apt-get install -y gcc make linux-headers-$(uname -r) wireless-tools tcpdump

VID PIDの確認
WLI-UC-GNM2を接続して
# lsusb
うちの環境だとこんな感じ。
Bus 002 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 007: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]
Bus 001 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 004: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 001 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

ソースの修正

以下の通り。

DPO_RT5572_LinuxSTA_2.6.1.3_20121022/RT2870STA.dat
オリジナル 修正版
1#The word of "Default" must not be removed 1#The word of "Default" must not be removed
2Default 2Default
.3CountryRegion=5  3CountryRegion=1 
4CountryRegionABand=7 4CountryRegionABand=7
.5CountryCode=  5CountryCode=JP 
6ChannelGeography=1 6ChannelGeography=1
.7SSID=11n-AP  7SSID= 
8NetworkType=Infra 8NetworkType=Infra
.21AuthMode=OPEN  21AuthMode=WPA2PSK 
22EncrypType=NONE  22EncrypType=AES 

DPO_RT5572_LinuxSTA_2.6.1.3_20121022/common/rtusb_dev_id.c
lsusbで取得したVID、PIDを追記
オリジナル 修正版
105#endif /* RT2870*/  105#endif /* RT2870*/ 
106#ifdef RT3070 106#ifdef RT3070
. 107    {USB_DEVICE(0x0411,0x01ee)}, /* WLI-UC-GNM2 */ 
107    {USB_DEVICE(0x148F,0x3070)}, /* Ralink 3070 */  108    {USB_DEVICE(0x148F,0x3070)}, /* Ralink 3070 */ 

DPO_RT5572_LinuxSTA_2.6.1.3_20121022/os/linux/config.mk

オリジナル
修正版
24# Support Wpa_Supplicant 24# Support Wpa_Supplicant
25# i.e. wpa_supplicant -Dralink 25# i.e. wpa_supplicant -Dralink
.26HAS_WPA_SUPPLICANT=n  26HAS_WPA_SUPPLICANT=y 
27 27
.35HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n  35HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y 
36 36
952    # Linux 2.6 952    # Linux 2.6
.953    EXTRA_CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include  953    EXTRA_CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include -Wno-date-time 
954    endif 954    endif

DPO_RT5572_LinuxSTA_2.6.1.3_20121022/os/linux/rt_linux.c
使用するカーネルバージョンによっては逆に修正したらダメかも。
Debian Jessieでは必要だがwheezyでは不要。

オリジナル
修正版
1136#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) 1136#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
1137        pOSFSInfo->fsuid = current->fsuid; 1137        pOSFSInfo->fsuid = current->fsuid;
1138        pOSFSInfo->fsgid = current->fsgid; 1138        pOSFSInfo->fsgid = current->fsgid;
1139        current->fsuid = current->fsgid = 0; 1139        current->fsuid = current->fsgid = 0;
1140#else 1140#else
.1141        pOSFSInfo->fsuid = current_fsuid(); 1141        pOSFSInfo->fsuid = current_fsuid().val;
1142        pOSFSInfo->fsgid = current_fsgid(); 1142        pOSFSInfo->fsgid = current_fsgid().val;
1143#endif 1143#endif

コンパイル

# cd DPO_RT5572_LinuxSTA_2.6.1.3_20121022
# make

カーネルモジュールと設定ファイルの導入

# cp os/linux/rt5572sta.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless/
# mkdir -p /etc/Wireless/RT2870STA
# cp RT2870STA.dat /etc/Wireless/RT2870STA/

ブラックリスト追加

# gedit /etc/modprobe.d/blacklist.conf
以下を追加、もしくは新規で保存。その後再起動
blacklist rt2800usb


モジュールロードの確認

# lsmod | grep rt5572sta
下記のようにロードされていればOK
rt5572sta             784165  1
usbcore               195427  6 uhci_hcd,ehci_hcd,ehci_pci,usbhid,rt5572sta,xhci_hcd

動作確認

# ifconfig
一覧にra0があればOK
# iwlist ra0 scan
周囲のSSIDが表示されていればOK。たまにスキャンできない場合があるので
その時は抜き差しすると治ったり・・・。

monitor modeへの変更

# iwconfig ra0
ra0       Ralink STA  ESSID:""  Nickname:"RT3070STA"
          Mode:Auto  Frequency=2.412 GHz  Access Point: Not-Associated  
          Bit Rate:1 Mb/s  
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Link Quality=10/100  Signal level:0 dBm  Noise level:0 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

デフォルトではAutoになっている。
monitor modeへ変更する。
# iwconfig ra0 mode monitor
# iwconfig ra0
ra0       Ralink STA  ESSID:""  Nickname:"RT3070STA"
          Mode:Monitor  Frequency=2.412 GHz  Access Point: Not-Associated  
          Bit Rate:1 Mb/s  
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Link Quality=10/100  Signal level:0 dBm  Noise level:0 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

モニタモードへ変更できた。チャンネルを変更する。
# iwconfig ra0 channel 13
# iwconfig ra0
ra0       Ralink STA  ESSID:""  Nickname:"RT3070STA"
          Mode:Monitor  Frequency=2.472 GHz  Access Point: Not-Associated  
          Bit Rate:1 Mb/s  
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Link Quality=10/100  Signal level:0 dBm  Noise level:0 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

パケットをダンプしてみる

# tcpdump -i ra0 -e
-eオプションでヘッダの情報も見れるようになります。
例としてこちらの画像はスマホのWifi Analyzerを動かしている時のパケットをキャプチャしたもの。
SA:b0~から始まるのは動かしているスマホのMACアドレスです。



















2016年1月30日土曜日

中華製キャプチャBOX【ezcap280】分解&電源調査

中華製のPCレスでHDMI・コンポーネント信号をキャプチャできる「ezcap280」を入手したので
・中身を分解
・使用電流を調査
・最低動作電圧を調査
してみました。

尚、この記事の内容を元に改造・分解などによる故障、損害など一切の責任を負いませんので
参考にする場合は自己責任で、どうぞ。

外観 表面
 

外観 裏面


内部 筐体裏面


内部 筐体表面















構成パーツ

 基板はどうやら表面実装部品はリフロー、スルーホール、コネクタなどは手ハンダの様子で、
手ハンダを行ったと思われるオーディオジャック周辺はフラックスクリーナーで清掃しました。
はんだボールも出てきましたからね(;´∀`)
 また表面も手ハンダによるリワーク痕が2ヶ所見受けられました。
 ちなみに基板表の左側、JTAGとシルクがありますが、ロジアナに繋いでも
特に信号見れませんでした。残念。どこかプルダウンしないといけないのかな?


 ACアダプタの定格が5V2A。プラグは外形5.5mm、内径2.1mm、センタープラスの
標準的なDCプラグです。
 コンセントプラグ自体は中国のプラグなので変換コネクタを噛ませてます


・キャプチャ中の消費電流測定

キャプチャ前 0.48A程度 0.5A未満


コンポーネント1080i信号キャプチャ中 0.65~0.67A程度 0.7A未満


コンポーネント1080i信号キャプチャ前(HDMI出力をモニタへ接続) 0.51A前後












コンポーネント1080i信号キャプチャ中(HDMI出力をモニタへ接続) 0.65~0.67A程度 0.7A未満


電流測定キャプチャ前_HDMI信号1920x1080_60P入力 0.47A前後 0.5A未満















電流測定キャプチャ中_HDMI信号1920x1080_60P入力 0.58~0.62A程度 0.7A未満















 ・キャプチャ中の最低動作電圧調査

電圧4.1V_動作OK

HDMI1080P信号をキャプチャさせたが問題なく記録できていた。

電圧4.0V_動作NG

 電源投入直後、筐体前面左側USBメモリのオレンジのランプの点滅が止まらなかったため、
電圧不足によりUSBメモリが正常に動作しなかったため動作できなかったと思われる。

 最低動作電圧4.1V、動作中の電流0.7A未満であるという以上の結果を踏まえて、
現在ACアダプタで動作させているが、2A出力のUSBモバイルバッテリを用いれば
安定してコンセントレスのポータブルキャプチャ環境を用意できると考える。
・・・というかそのつもりで入手したんですがね(゚∀゚)
目論見通りですw

2015年7月8日水曜日

LPC-Link2のCMSIS-DAPファームを更新したら認識しなくなったけど解決

LPCScrypt(最近リリースされたLink2やLPCXpressoV2/V3系ボードのファームを焼くためのツール)で最新のCMSIS-DAPファームを書き込んだら、PCから認識しなくなって、困って、解決しますた。

原因は、CMSIS-DAPファームのバージョンアップに合わせて、PCのドライバも更新していなかったためです。

ドライバを更新してない時の症状は、デバイスマネージャーにCMSIS-DAPデバッガが表示されず、シリアルポートの「LPC-LinkⅡ UCom Port」のみが表示されます。

LPCXpresso最新版(v7.8.0_426)にもLPCScryptと同じCMSIS-DAPファームが入っているので、LPCXpressoでも同様の現象が発生するかもしれません。(JP1刺さずUSBブートでCMSIS-DAPファーム利用する場合など)

インストールを行う前に古いドライバを削除しておくことをオススメします。
ドライバのインストーラはLPCXpresso v7.8.0_426に同梱されています。
デフォルトのままインストールされているなら、インストーラのパスは
"C:\nxp\LPCXpresso_7.8.0_426\Drivers\lpc_driver_installer.exe"になります。

インストールが成功し、CMSIS-DAPファームを焼いた状態でLink2を接続すると以下の画像のように認識されて正常に動作します。



2015年7月7日火曜日

mbed AutoTransferバージョンアップしました(v1.03)

mbedAutoTransferの説明ページを作りました。
初めての方はこちらを御覧ください。
http://kinomuku129.blogspot.jp/p/mbedauto.html

今回のバージョンアップで、11Ux系への対応として「イレースモード」を追加しました。

11U系はバイナリ転送前に、ドライブ内の「firmware.bin」を消去する必要があるため、そのための機能です。
 イレースモードを有効にすると、バイナリ転送前にドライブ内のすべての.binファイルを削除します


ダウンロードはこちらからどうぞ
https://developer.mbed.org/users/nameless129/notebook/mbed-autotransfer-tool/

2015年7月4日土曜日

D&DでCMSIS-DAPデバッガから書き込みを行うバッチファイル

昨日に引き続きバッチファイルネタです(;´∀`)
バッチファイルにD&Dでbinファイルをぶち込むとCMSIS-DAPデバッガを通じてターゲットに書き込みが行えます。

https://developer.mbed.org/users/kazu_zamasu/notebook/USE-to-IRC-on-mbedlib/
ざますさんのノートブックにredlinkへ引数としてバイナリを渡して書き込む方法があったので
それをバッチファイル化しました。

ざますさんのと少し違うのはLPC-Link2をredlink化せず、CMSIS-DAPデバッガのまま使うことです。
CMSIS-DAPデバッガのまま書き込めたので省略しました。
(LPC-Link2のCMSIS-DAPデバッガ化はLPCScryptを使ってください)

手持ちのNXPチップのmbed4種(LPC1768,LPC11U68,LPC1114,LPC824)対応のバッチファイルを作りました。

mbedとしてPCにUSBで接続してる時も使えます(CMSIS-DAPデバッガとしても認識されてるため。USBストレージあるからあまり意味ないけど)
LPC-Link2をCMSIS-DAPデバッガとして動作させている時に同様に使うことができます。
これで非mbedなボードでSWD書き込みが捗ります。今まではCoFlash使ってたけど、824とか対応してなかったんですよね。。。

batファイル3行目のLPCXpressoインストールパスを修正してから使ってください。現状では最新のLPCXpresso v7.8.0_426のパスになっています。
D&Dでbinファイルをbatファイルに放り込むと書き込んでくれます。書き込み後はリセットがかかり、焼いたバイナリが走り出します。

2015年7月3日金曜日

D&Dでbinファイルをhexファイルに変換するバッチファイル

LPCXpresso内のobjcopy.exeを利用して変換するバッチファイルを書きますた。
D&Dでbinファイルを放り込むと同じフォルダに同名のhexファイルが生成されます。

LPCXpressoが必要です。
3行目は適宜LPCXpressoがインストールされてるフォルダに変更してください。

2015年7月1日水曜日

EFM32 Giant Geckoを触ってみた

 ちょっと触らせて頂く機会があったのでいろいろやってみました。

青マーカーが付いているように見えますが、保護フィルムです。剥がしません。

下側のmicroUSBポートはUSBHost/Device用で、左下の電源選択のスライドスイッチをDBG、左側のminiUSBポートに刺すことで電源が入ります。

初期のファームはタッチセンサのデモ。触れると数値が変化します。

環境構築から。
いきなりオンラインIDEでソース書いてバイナリ作ってD&D、かと思いきや初期状態ではできないのでファームウェアをバージョンアップする必要がありました。
そのために純正IDEの「Simplicity Studio」をダウンロードします。アップデータのダウンロードやらでそこそこ時間かかりました。詳細は↓
https://developer.mbed.org/teams/SiliconLabs/wiki/Silicon-Labs-Firmware

で、mbed化もできたところで色々試してみました。
まずはLチカ。これは難なく作成できました。ついでに拙作の「mbed AutoTransfer」も試しましたが、うまく動いてくれました。
ちなみにLEDですがGPIOのPE2,PE3に当たっています。ヘッダにも出ている上、UART1とも被っているので要注意です。というか他のポートでもよかったのでは。。。


次にLCD。サンプル見ればーと思いきや、

この通り書いても動かないんですが(´・ω・`)
他のサンプルソース見て対処しますた。

その他光センサも乗っかってたので、これの値をADで読むのかなーと思いきや普通のポートだったりしたので、それをGPIOで読んだり。
テスタの値は光センサの出力電圧

光センサの電圧が高くなったので、読んでるGPIOもH判定、それに合わせて液晶下の右側LEDを点灯させてます

LCセンサはうまく使えなかったのでスルーしたり。。。

PCとシリアル通信させてみたり。これが一番悩まされました。
mbedとして見えてるドライブの中のReadMeの中身が↓
Silicon Labs J-Link MSD volume.

Copying a binary file here will flash it to the MCU.
Supported binary file formats:
 - Intel Hex (.hex)
 - Motorola s-records (.mot)
 - Binary (.bin/.par/.crd)

Known limitations:
 - Virtual COM port speed is currently fixed at 115200 bps
 - Using other kit functionality such as energy profiling or debugger while flashing is not supported.
   Workaround: Pause any energy profiling and disconnect any connected debug sessions before flashing.
ほうほう、hexだけでなく、mot、bin、までとはなんでもござれっすなあと思った次の段。
ふむ、デフォルトのCOMポートは1115200bpsで固定されてるのね、と。

そしてシリアル通信テストのmbedソフトをボーレート指定せず書いてみるも、PCに通信が来ない。
もしかしてと思い、mbedソフトのボーレートを115200bpsに指定してみるも何も表示されない。
丁度ヘッダにもピンが出ているのでそこをUSB-UARTで覗いてみれば表示される。
ジャンパ飛ばさないといけないのかと色々調べてみると・・・

https://developer.mbed.org/teams/SiliconLabs/wiki/Using-stdio-on-Silicon-Labs-platforms

Board Controller Enable Signal

えぇー・・・('A`;)
ヘッダが出ているPE0とPE1とJ-LinkのUARTが共有になっているので、
J-Linkのチップ保護のためのEnable信号(PF7)・・・ということかなあ。。。
PCと通信させるときはPF7をHにしてからにしましょう。
あとmbedのボーレート指定も115200bpsで。これ以外はmbedチップが通せんぼします。


LCDのパーツがいろいろあったので表示させてみたり。


最後に、mbedチップのバージョンアップ来ませんかね。。。バイナリ転送するたびにシリアル再接続しないといけないし、ボーレートも固定だし、正直、易しくないボードだなあと思いました。
ただボタン電池1コで駆動するのは、小さい機器への組み込みに魅力的ですね。

Simplicity Studioを使ってサンプルを書き込んでみたりしましたが、LPCXpresssoと同じくmsys-1.0問題(勝手に呼んでる)が発生しました。
msys\1.0\bin\make.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0
↑のメッセージがLPCXpressoでも見たので同じように改善版をダウンロード↓
http://www.support.code-red-tech.com/CodeRedWiki/VirtualAllocPointerNull
置き換えすることで解消しました。

最後になんだかんだ試したソースを置いておきます。
参考になれば幸いです。
https://developer.mbed.org/users/nameless129/code/blinky_EFM32_Giant/


 参考資料など

EFM32GG-STK3700 Giant Gecko スターター・キット・ユーザ・ガイド
http://www.silabs.com/Support%20Documents/TechnicalDocs/efm32gg-stk3700-ug.pdf

アプリケーションノート一覧
http://www.silabs.com/products/mcu/Pages/32-bit-mcu-application-notes.aspx

回路図
http://www.silabs.com/Support%20Documents/TechnicalDocs/BRD2200A_A03.pdf