マイコン工作実験日記

Microcontroller を用いての工作、実験記録

タグへの書き込みを検出する

2015-01-03 18:34:45 | Weblog
RTCを追加したので、その時計を設定する方法を用意する必要があります。普通であれば、シリアル経由で時刻設定コマンドを用意するところなのですが、今回は電池で動かすことを前提としたいのでOpenSDA経由でのUSBシリアルも使いたくありません。そこで、時刻設定もNFC経由ですることにします。

仕組みとしてはスマホやタブレットのNFC書き込みアプリを使って、文字列をNDEFとしてタグに書き込んでやるだけです。マイコン側では書き込まれた文字列をコマンドとして解釈して処理することにすれば、時計の設定に限らず色々な処理をNFC経由で操作することが可能となります。

マイコン側はRTCで1分おきにWakeupして気温、気圧の測定をさせていますが、それ以外はずっとDeep sleepさせて電池を消耗しないようにしています。そのため、RF経由でタグへの書き込みが行われたことも、Wakeup割り込みで知らせて欲しいということになります。幸いにM24SRにはGPO端子が用意されており、タグの状態変化に応じて端子の状態を変化させることができます。

GPO端子の振る舞いは、タグのメモリ領域の一部であるSystem File領域の内容によって変更することができます。出荷時設定としてはSession Open Configurationという設定になっており、RFもしくはI2Cでのコマンド処理のためのセッションが開いている間だけGPO端子がLowになるようになっています。タグがアクセスされたことは この設定でも知ることができますが、NDEFへの書き込みと読み込みのどちらの場合でも端子が変化してしまいます。

WIP (Writing in Progress)という設定を使うと、タグへの書き込みがおこなわれている間だけ端子がLowになります。実際にタブレット上のNFCアプリから短いテキストの書き込みを行ってみると、1回の書き込みで2回端子がLowになることがわかりました。NDEFデータの書き込みと、Capability ContainerもしくはNDEFデータ長更新の2回の書き込み操作が行われるためでしょうか?

GPO端子の設定には MIP (NDEF message writing in Progress)という設定もあり、こちらの設定ではNDEFデータ長として0以外の値が書き込まれた時にのみGPO端子がLになってくれます。この設定を使うとアプリからの書き込み後に1度だけGPO端子がLになってくれました。この設定でGPO端子を動かして、その立ち上がりを検出することにすれば、タグに何らかの情報が書き込まれた場合にWakeup割り込みがかかることになります。

GPO端子の動作設定は、System file領域のGPOフィールドの値をUpdate Binaryコマンドで書き換えてやることで行います。出荷時設定ではこの領域はパスワードプロテクトされているので、書き込みに先立ってVerifyコマンドを使ってパスワードを入力してやる必要があります。

どういうわけか、NXPのTagInfoアプリは、M24SRに対応しているようでSystem File領域の内容を(一部ですが)表示することができます。参考にまでに貼っておきます。




上が出荷時の設定。GPOの設定がSession Openになっています。I2C Protectが有効になっているため、System File領域の書き込みはパスワード入力が必要。

下は、GPOをMIPに変更した後の表示です。



最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。