Pages

2011年12月11日

MZK-USBSVの解析


PLANEXのUSBメディアサーバMZK-USBSVについて。
いつかNTT-Xで買って、少しだけ使って、変なものBOXに投げ入れられてたもの。

とりあえず分解。


RDCセミコンダクターのS3282というSoCが載ってます。
仕様は玄人志向のKURO-Z/NAS-KITと似ているらしい。KURO-Z/NAS-KITの解析情報を載せているサイトによれば
このチップは調べてみると色々なNAS等で使っているx86互換のチップみたいです。ググって調べると海外の掲示板とかでもいじっている人がいる。アチコチ見てるとこのS3282はSOCで、内部コアはR8610というCPUを使っているらしい・・・って事が分かりました。
- 玄人志向のクローゼットNAS(KURO-Z/NAS-KIT)を買ってみた
この手の製品をPLANEXが独自に開発している訳がないので、Google先生で検索してみると、Digitus Nano NAS DN-7023-1という製品のOEMであることが判明。

この型番と適当なワードで検索してみると、Router-Forum.deというところに「M10とM11がRS232Cだよ」という謎のドイツ語の記載を発見。


とりあえずここまで。
M6〜11というテストパッドが怪しいので、シリアル変換とかで何か分かるかも。

その後...
知り合いの事務所のPC(複数台)を自動でバックアップさせる為に使ったので手元から離れていきました。
また安売りしてたら手に入れて解析してみようと思います。

2011年12月7日

セキュリティさくら#02

参加したという記録と今後の為のメモ。
※内容的なまとめに関しては公式を参照

本会
・非常に人数が多い印象。
→部屋が狭くて縦長だったので休憩時間も他の参加者と交流できなかった。

・発表・LT内容はいかにもセキュリティーな話題という感じで聞き応えあり。
→愛甲さんのDEFCONの話が面白かった。LTは行動認識とネットワークの話がgood。

懇親会
・本会の場所(BAR Party Place)から10分くらい歩いたところ。
→ノーコメント。

・後日、松村がキレてた。
→「第3回はいかない」だそうで。

その他
・#03でLTやる予定
→ソフトウェア系ネタは突っ込みが怖いのでハードウェア系で。

・HTC EVO WiMAX大活躍
→やっぱり俺々WiFiルーターは必須。

2011年11月30日

PS2コン用コネクタ


ELECOMのJC-PS101UをバラしてPS2コントローラー用のコネクタを取り外す。
ケーブルタイプだとコネクタだけ取り外すことが出来ないので、箱タイプをAmazonで購入。お値段764円。
ロボット用コントローラVS-C1の接続用基板側コネクタが秋月で売ってありますが、こちらはお値段840円。

ELECOMシールを爪でゴシゴシやってると穴が見つかるのでドライバを突っ込んでネジ外し。
分解すると箱のサイズよりも大分小さい基板が出てくるのでハンダを吸い取ってコネクタと分離。
ついでに変換基板とUSBケーブルの根元も分離。


コネクタ部分はPS2コントローラとの接続用に使用。
ArduinoでPS2コントローラを使った何かをつくろうかと画策中。


USBケーブルとプラスチックの箱は、何か作って収める時に使えそうです。

2011年11月26日

RFM12Bと電波法

ちょっと気になったので今更ながら電波法の微弱無線とRFM12B(433MHz版)について再確認。
総務省のホームページを読むと、322MHz〜10GHzは3mで35μV/m以下なら免許不要と書いてある。

マクスウェルの方程式から得られる自由空間における電界強度の公式

E=√(30GP)/d
d=送受信の距離(m)、E=電界強度(μV)、G=アンテナ利得(dB)、P=送信出力(W)

距離dは3m、電界強度Eは35μV、利得の基準を半波長ダイポールアンテナとすると0dBdなので利得Gは1とする。

求めたいのはPなので
P=(Ed)^2/30G
と変形して、これに各値を入れてあげると...

((35 * (10^(-6)) * 3)^2) / (30 * 1) = 3.67500 × 10^(-10)

= 0.3675nW

えっと... ナノワットですか...

今は手元にモジュールが無いので測定できないのですが、0.3675nWなんぞ普通に超えているはず。
これはちょっとマズい気がするので来週金曜日にちゃんと確認することにします。

315MHzタイプなら3mで500μV以下の範囲なので、まだ使えるかも。
それとも、多少高くても法的に問題ないZigBeeを使う方が安心・安全かな?

2011年11月19日

Chameleon USB FX2


オプティマイズのカメレオンUSB FX2 miniBタイプ。
CypressのEZ-USB FX2LPとAlteraのMAX2を1枚のボードに載せたものです。

先週の土曜日に届いて、その日中にチマチマと表面実装抵抗やコンデンサなどを取り付け。
完成したものをMacBook Airに接続して、別パーティションから起動したWin7で弄ろうとしたら、EZ-USBは認識されるにも関わらずMAX2へのプログラム書き込みがうまくいかない。
眠ってたWinXPマシンを引っ張り出して接続してみたり、ドライバを入れなおしてみたりしても症状が治らず。
オプティマイズの方にメールで事情を説明して先週の日曜夕方に定形外で送ったところ、本日帰って来ました。

不具合の原因は1箇所の半田不良。自分では見つけきれなかったけど、どこが悪かったんだろう...
それにしても土日にも関わらずメールでの素早い対応をしてくれたオプティマイズの方に感謝です。

というわけで無事動いてくれたカメレオンUSB FX2ですが、写真の通りピンソケットをつけました。
いろんな利用例では直に配線していることが多いですが、そこはせっかくのMAX2です。
プログラムを書き換えて色々と作ってみるのが目的なので。最近DE0でFPGA(Verilog)の勉強もやってますし。

とりあえず、友人から作ってくれと頼まれたNintendo DSのスクリーンキャプチャでもやってみようということで、ユニバーサル基板にピンヘッダとD-Sub25ピンメス端子を取り付けたものを作りました。
カメレオンUSB FX2を着脱式にすることで、飽きたら別のものに使いまわすことが可能です。

2011年11月18日

RFM12Bで双方向通信


とりあえず、RFM12B libraryのサンプルプログラムPingPongを参考にして双方向通信できました。
例のサンプルプログラムは "Hello" と送り受信成功で "OK" → "Hello" を送信というループ。
シリアルモニターで見ていても通信している感がなくて面白くないので少し弄りました。

nodeIDが1のArduinoにint num=0、IDが2のArduinoにint num=1をセット。
受信した数字を自分が持つ数値と足して送信するというもの。
0,1,1,2,3,5,8,13,21,34... という感じで通信を繰り返します。ただそれだけです。
#include <rf12.h>
#include <ports.h>

#define NODE_ID   1
#define GROUP   212
#define LED_PIN   6

#define LED_OUTPUT() pinMode(LED_PIN,OUTPUT) 
#define LED_ON()  digitalWrite(LED_PIN, HIGH) 
#define LED_OFF() digitalWrite(LED_PIN, LOW) 

MilliTimer sendTimer;
byte sendFlag;
int num = 0;
void setup () {
    Serial.begin(9600);
    rf12_initialize(NODE_ID, RF12_433MHZ, GROUP);
}

void loop () {
  
    if (rf12_recvDone() && rf12_crc == 0) {
        LED_ON();
        Serial.println(num);
        num += *(int*) rf12_data;
        delay(200);
        LED_OFF();
    }
    
    if (sendTimer.poll(3000))
        sendFlag = 1;

    if (needToSend && rf12_canSend()) {
        LED_ON();
        rf12_sendStart(0, &num, sizeof num);
        rf12_sendWait(2);
        delay(200);
        sendFlag = 0;
        LED_OFF(); 
    }
}
割りとシンプル。
送受信データはunsigned charの配列で扱っているので1要素の最大値は8bit(0〜255)。
1回のrf12_sendStartで送れるのはリファレンスでは65byteまで。
接続は前々回の通り。これを2つ用意する。


次回はノードが複数存在する場合のプログラミング。ここからネットワーク化していきます。
特定のノードに対してのデータ通信は受信側にてNODE_IDで条件分けするだけ。
受信側が正常にデータを受信できたら、送信側に受信完了の合図を送って通信終了。
来週は試験期間なので続きは再来週です。

2011年11月11日

RFM12B library


Jean-Philippe Lang氏のRFM12B libraryについて。
Google先生で調べる限りではリファレンスの日本語訳は見つからなかったので適当(自分用)に翻訳。
あと、本家のwikiは個人的に見づらいので、一覧にするという意味も。

RFM12Bについては前の記事にまとめました。

初期化関数
  • rf12_initialize()
  • 受信/送信用にモジュールを初期化する。
    #include <rf12.h>
    #include <ports.h>
    byte rf12_initialize(byte nodeId, byte freqBand, byte netGroup =212);
    
    パラメータ
    • nodeId
    • 無線モジュールのノードID。nodeIdは同じnetGroup内においてユニークにする必要がある。IDの範囲は0〜31だが通常は0〜30を使用する。nodeIdの1〜26に対応する大文字のA〜Zを利用することもできる(しかし今後は推奨しない)。数字の0はOOK(On-Off-Keying/オンオフ変調)のために予約されている。31は特別で同一netGroup内の任意のnodeIdのパケットをピックアップできる。
    • freqBand
    • 無線モジュールで利用する周波数。RF12_433MHZ、RF12_868MHZ、RF12_915MHZが用意されていて、利用するモジュールの周波数に合ったものを使用する。
    • netGroup
    • ノードを区切る為に利用する。同じnetGroupのノードが通信できる。このパラメータはオプションであり、省略した場合はデフォルトの212 (0xD4)が利用される。これ(212)はRFM12で唯一利用できるIDであり、RFM12Bでは他の任意のIDを利用できる。

  • rf12_config()
  • rf12_initialize()とEEPROMの0x20〜0x3Fに書きこまれた設定を呼び出す。0x20〜0x3Fに含まれるチェックサムが正しくない場合、rf12_initialize()は呼び出されない。実行結果としてnodeIdを返す。(なければ0を返す)
    #include <rf12.h>
    #include <ports.h>
    byte rf12_config();
    
    パラメータ
    なし。

  • rf12_easyInit()
  • 簡単な送信手法設定。
    この関数はドライバが初期化された後、rf12 initialize() または rf12 config()を利用して呼び出す必要がある。
    #include <rf12.h>
    #include <ports.h>
    void rf12_easyInit(byte seconds);
    
    パラメータ
    • seconds
    • 新しいデータパケットまでの最小値(1〜255秒)を設定する。0を使用すると最短で送信される。
      ・433および915 MHzの周波数帯では、100ミリ秒(10パケット/秒)に固定。
      ・866 MHz帯では、送信されるバイト数に依存。

以下、和訳途中...
基本関数
  • rf12_recvDone()
  • rf12_canSend()
  • rf12_sendStart()
  • rf12_sendWait()

簡易送信関数
  • rf12_easyPoll()
  • rf12_easySend()

その他
  • rf12_control()
  • rf12_encrypt()
  • rf12_lowbat()
  • rf12_onOff()
  • rf12_sleep()

2011年10月27日

RFM12B + Arduino


Hope Microelectronics社製の微弱無線モジュール
日本では日昇テクノロジー通販(http://www.csun.co.jp/SHOP/200712022.html)で買える。
お値段は1200円 880円(2012/4現在)ですが、SparkfunでSMDタイプが6.95ドルから売ってる模様。

周波数帯は315/434/868/915MHzの4種。(国によって使用できない周波数帯が有り)
定格電圧は2.2V〜3.8Vらしいけど、Arduino UNOからの5Vでも特に問題なく動作するっぽい。
(というより、5VのArduinoでRFM12Bを使う場合はVCCを3Vから取ると動作不安定になりました。)

参考資料
微弱無線モジュールのテスト (CPUを作ろう)
RFM12B wireless FSK transceiver module (Hope Microelectronics)
RF12B programming guide - RF12B_code.pdf (上記製造元のWebより)
RFM12B library for Arduino (JeeLabs)
→2013.2.14追記:ライブラリが新しくなっている模様です。https://github.com/jcw/jeelib

とりあえず、Hope Microelectronics社のプログラミングガイドの通りに接続してみる。

接続
GND-----------GND
5V--------------VCC
pin D2---------IRQ (interrupt request out)
pin D10-------SEL (chip select in)
pin D11-------SDI (SPI data in)
pin D12-------SDO (SPI data out)
pin D13-------SCK (SPI clock in)

左の写真はpin D2が抜けてます(;・∀・)
送信と受信のサンプルプログラムをそれぞれ1台ずつ書き込んでテスト。
送信側のLEDは等間隔で点滅。
受信側のLEDは送信側からのデータを受信できたら受信の度に点滅。
(受信が継続して問題なければ送信側と同じ等間隔で点滅)

というわけで、しばらくはこの無線モジュールで遊んでみます。
XBeeと比較して安価なので、無線通信デバイスの量産とか色々出来るということです。
先人の知恵と産物を使いながら、まずは使いこなせるように色々やってみます。

2011年10月23日

memo blog

個人的メモブログを作りました。
ブログとかBloggerで量産しまくりなので、今更目新しいものなど無いのです。
メモにブログを用いる利点は、どこからでも簡単に書けて他人と簡単に共有できること。

このブログの目的は創造実験という名の電子工作のメモ。(それ以外もちょっと書くけど)
創造実験は毎週金曜日午後なので、基本的に金曜日に書きます。

最近流行りのArduinoとかで色々やりたいと思っています。
2年くらい前にロボコンから身を引いてからソフトウェアばっかりだったので、久々のハードウェア。
ロボコンではH8とPICを弄ってたけど、少しかじってるだけなので「再勉強」です。

他の趣味ネタは別ブログに書いているので、ここでは技術系以外の話はあんまり書かないつもりです。