2017/01/19

[nfc]OM5578/PN7150S来たる (2)

PN7150は、これだ。
PN7150|High Performance Plug'n Play NFC for OS|NXP

NCI1.0互換というところが売りのようだ。
NFC Controller Interfaceの略なのだが、NCIの仕様書はNFC Forumの有料会員になるか購入するかしないと入手できなくなってしまった。

が、NCI1.0のときはまだダウンロードできたので、手元にある。
以前ダウンロードできたものが有償になったときって、ダウンロードしたものの扱いはどうなるんだろう?
まあ、捨てないけどさ。


PN7150に戻ろう。
PDFを見ると、PCD(R/Wね)にもなれるし、PICC(タグね)にもなれるようだ。
PN53xみたいなチップなのかもしれない。
PN54系は使ったことが無いが、モバイルFeliCaチップみたいに電源だけ入れておけばCardEmulationしてくれるのだろうか。
まあ、私には手に入れられないチップだから、気にすまい。。。

ブロック図を見ると、Cortex-M0が載っていた。
へー。
CODE側とDATA側にそれぞれEEPROMが載ってるのは何でだろう?
ホストとはI2Cで通信するようだ。


そういえば、今のLinuxはNCI対応しているということだ。
I2Cはどうやってるのだろう、などと思っていたが、kernelのビルド時に決まっているのだろうか?

このPDFを見ると、kernel spaceのドライバと、user spaceのHALで何とかしているように見える。
linux_libnfc-nci/doc at master · NXPNFCLinux/linux_libnfc-nci

image

 

lsmodすると、pn5xx_i2cというモジュールが読み込まれていた。
PN7150だけど、pn5xxで扱えるようになっているのだろう。

ソースはこれか。
ちょっと見たけど、よくわからん。
NXPNFCLinux/nxp-pn5xx: NXP's NFC Open Source Kernel mode driver

$ cat /sys/bus/i2c/devices/1-0028/name
pn547

この0028が、0x28というI2Cアドレスということだろうか?

UM10936によると、PN7150のI2Cアドレスは0x28~0x2Bで、アドレスピン2本で決定されるようになっている。
OM5578/PN7150Sの回路図ではどちらのピンもGNDにプルダウンされているから、0x28でよいはずだ。

しかし、これは機器を接続するまで分からないはずだ。
モジュールのビルド時に決定しているのだろうか?
今回使ったRaspberry PiのSDカードはPN7150用だから、そうなのかもしれない。

 

いくらモジュールやアプリが提供されていても、使うまでの方法が分からねば意味が無いのだ。。。
次はそこら辺を見ていこう。

2017/01/18

[nfc][raspi]OM5578/PN7150S来たる (1)

CQ出版のInterface誌にあった、NXPのプレゼントに応募したら当たった。
ありがとう!

今日、届いた。

image

 

モジュールは、こうなっている。

image

 

ものは、こちらだ。

NFC Development Kits for Arduino and more|NXP

"Arduino and more"の、moreは、Raspberry PiとBeagle Bone Blackで、これはRaspberry Pi版だ。
細かい名称は「OM5578/PN7150RPI demo kit」のようである。

一番上のボードが本体で、OM5578/PN7150S。
PN7150というNFC Controller Baoardのようだ。

その下の基板が変換用で、これはOM29110RPIと呼ぶようである。
立派な足とピンが付いているが、この足があるとRaspberry Pi(ノーマル)だと部品が当たって載せられない。
足を外してくれ、とPDFには書かれていた。

面倒だったので、今回はRaspberry Pi2を使っている。


使い方というか、デモの動かし方を載せておこう。

まず、Raspberry PiのSDカードイメージをダウンロードする。
今日(2017/01/18)の時点では、OM5578-PN7150S_Rpi_Linux_demo_v1.1.zipだった。
https://nxp.app.box.com/v/OM5578-PN7150RPI-Linux

これはRaspberry Piの公式ページが配っているのと同じ形式のimgファイルのようで、公式ページに載っているやり方でSDカードに展開するとよいだろう。

うちはだいたいUARTでRaspberry Piをつないでいたのだが、このボードは全部ピンをふさいでしまうので、まずはボードを載せる前にUARTで起動して、WiFiの設定をしてSSHでログインできるようにしてからボードを載せた。
HDMIやキーボードなどで動かせるなら、その辺は気にしなくてよいかも。

 

あとはAN11758(PDF)に載っているようにやっていけばよい。
立ち上げても特にアプリが起動するわけではないので、コンソールから操作することになる。

が、このボードはI2C制御するのだが、デフォルトではI2Cが無効になったままかもしれない。
sudo raspi-configでI2Cを有効にするとよかろう。
今回使ったimgだと、「9 Advanced Options > A7 I2C」でOKにすればよい。

そしてもう1つ。
LD_LIBRARY_PATHの設定がないようで、そのままだと共有ライブラリがないというエラーになった。

export LD_LIBRARY_PATH=/usr/local/lib

などとするとよいかな。

 

"nfcDemoApp"はパスがあるところに置かれているようで、引数を付けて実行すると動く。
たとえば、pollだとこうなる。

image

付属するカードをかざすと、こうなる。

image

 

インストールされているアプリは、/home/pi/linux_libnfc-nciに入っているようだ。
githubにも上がっているようである(PDFはリンク先が切れているのだ)。

https://github.com/NXPNFCLinux/linux_libnfc-nci

 

しかし、このアプリってどうやってRaspberry PiのI2Cを使ってるのだろう?
I2Cを無効にすると「NfcService Init Failed」と出てくるから、/dev/i2c-1を使っているとは思うのだが。

2017/01/17

[win10]USB接続HDDを取り外したい

最近、ノートPC用に外付けHDDを購入した。
内蔵SSDだと小さいので、どうでもよいデータなんかは外に出しておきたいのだ。

それはよかったのだが、一度取り付けると、USBメモリのように取り外しができない。
グレーアウトしているのだ。
Explorerのコンテキストメニューでも「取り外し」は出てこない。

image

ただ、デバイスマネージャではこうなっている。

image

さて、これを信用して取り外してよいものか・・・。

いや、ここは逆に考えて、「高パフォーマンス」設定にして取り外しを有効にさせればよいのでは?とやってみたが、グレーアウトしたままだった。

 

こういうときは、アプリを使うのがよかろう。
今回はこれを試した。

USB Disk Ejector | Quick And Easy Software

image

これで外したいデバイスをダブルクリックすると、外れてくれた。
うちの環境では、これでよさそうだ。

 

まあ、こういうのはデバイスによって変わるかもしれんし、OSのアップデート程度で変わるかもしれんので、ネットで検索するときも直近の情報に絞った方がよいですな。
Googleだと、ツール>期間指定、から選べるので、いつもそうやってる。

image

[hw]買いやすいUART-USB変換ケーブル(2017.01)

3.3VのUARTを、PCのシリアルで見たいことがしばしばある。
でも、PCのシリアルはRS-232Cなどだから、電圧が全然違うし、極性も違う。
だから、電圧の変換や極性の変換が必要になる。

そこまで変換するなら、シリアルじゃなくてUSBでつなげるようになっていてほしい。
という要望があるからだろう、そういう製品は多い。

いま、うちにあるのは、CP2102が載ったモジュールと、PL2303が載ったケーブルだ。
PL2303は、Windows8から古いものがドライバ提供されなくなったのだけど、ごまかしごまかし使えている。

昨日、手持ちのUART-USB変換ケーブルが壊れていたので、買い足すついでに、最近(2017/01/16)の状況を調べておこう。


壊れたのは、CP2102が載ったモジュールの方だ。
これは、aitendoさんから購入したもので、もう6年くらい使っている。
今回はこれを買い足すことにした。

USB-UART変換モジュール – aitendo

税別600円と、お手頃だ。
うちにあるのは、ここの「終了版1」だ。
お世話になりました。

ピンが出ているので、そのままケーブルがあれば挿すこともできるし、ブレッドボードにざくっと挿すこともできる。
まあ、ブレッドボードに挿した場合はUSBの口が上を向くので、延長ケーブルがいることだろう。


秋月通商さんのこちらも、600円だ。

超小型USBシリアル変換モジュール: 半導体 秋月電子通商 電子部品 ネット通販

こちらは、microBケーブルを使って挿すことになる。
5Vトレラント・・・というのは、5VでもRXDに突っ込めるということを意味しているようだ。
Arduinoからログ取りだけしてい、なんてときでも使えるということだろう。
こちらは、少し値段が上がるが、5V/3.3Vの切替ができるようだ。
FT-232RQ USBシリアル変換キット: 半導体 秋月電子通商 電子部品 ネット通販

また、FTDIのチップを使っているというところもアピールポイントだろう。
FTDIのチップを使ったものは高めになる傾向があるようなので、これはうれしいところだ。


スイッチサイエンスさんのこちらは、値段が上がるが、3.3V/5Vだけでなく、細工をすれば1.8Vでも使えるとのこと。

FT231XS USB-シリアル変換ボード - スイッチサイエンス

 

そして、こちらの古いタイプが、うちにあるもう1本の変換ケーブルだ。

USBシリアル変換ケーブル – スイッチサイエンス

PL2303の古いタイプは海賊版が出回ったためにドライバの提供を止めてしまったらしい。
まったく・・・。
ストロベリーリナックスさんのところは、そっちのタイプのようだ。

OLIMEX USBシリアル変換ケーブル(3線式) - USB-SERIAL-CABLE-F - ネット販売


私が使っているお店は、だいたいこの3つだ。
他にもいろいろあるのだけど、探すと切りが無いのでね。。。

2017/01/15

AzureでMQTT brokerを立てようとする (4) - 最終回

最初に書いておこう。
Azure IoT HubはMQTTをサポートしているが、MosquittoのようなMQTT brokerではなさそうだ。
あくまで、Azure IoT Hubへの通知や、IoT Hubからの通知としてMQTTをサポートしているだけであって、topic名をsubscribeしたからといって、そこにpublishしても配信されないようだ。

IoT Hub の MQTT サポート | Microsoft Docs
ここの下の方に書いてあるが、トピック名は

  • デバイス→クラウド(publish):devices/{device_id}/messages/events/
  • クラウド→デバイス(subscribe):devices/{device_id}/messages/devicebound/#

となっている。
publishするときは、お尻の「/」もいるようだ。

 

だから、タイトルのように「AzureでMQTT brokerを立てる」ということをしたかったら、VMを作って、そこにMosquittoなどをインストールすることになると思う。


これで終わりにしてもよかったのだが、pythonからpublishするくらいまではやっておきたい。

昨日、TLS接続はできてon_connect()がコールバックされるのは確認できたのだが、どうも接続拒否されているようだった。
result codeが5で返ってきているのだ。
だから、on_connect()が何度も呼ばれているのだろう。

Client(client_id, protocol=MQTTv311), username_pw_set()。
TLS以外はこんなものだと思うのだけど、他に設定がいるのだろうか?

動いているMQTTBoxの設定と見比べても、特におかしなところはない。
usernameの"/api-version=2016-11-14"は、あってもなくても接続できるようだ。
では、なぜ・・・・・・・

 

ああ、MQTTBoxと同じデバイスIDを使っているからか。
DeviceExplorerで新しくデバイスIDを作り、SAS tokenなんかもそっちの設定にしたら接続できた。
subscribeもできている。topic名が長いな。。。

 

というわけで、これで終わりにする。