マイコン工作実験日記

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

Type BタグのNDEFを読んでみる

2014-04-20 20:09:34 | Weblog
前回記事ではPASMOの残高を読んでみたので、今回はType BタグのNDEFを読んでみます。Type Bタグとしては検知の実験は免許証でやってみたのですが、調べてみるとその読み取りのためには暗証番号入力が必要であるとのこと。おまけに3回間違えると、ロックされてしまうらしい。かみさんの免許証でそんな危険を犯すわけにはいかないので、残念ながら免許証の読み取りは断念。RF430CL330Hの載ったブースターパックを使って、ISO14443 Type BタグのNDEF読み取りを行ってみました。



TRF7970Aは、ISO14443 Type Bに対応しているので、そのタグの読み取りも可能なのですが、NDEFデータを直接読み取ってくれるような便利なコマンドを用意しているわけではありません。NDEFデータを読み取るためには、NFC Forumが定めるNDEFのデータ構造を適切なISO 14443 Type Bコマンドを用いて読み取って解釈してやる必要があります。具体的な手順の詳細については、ISOとNFC Forumの標準資料の両方を読まなければならず、わたしのような初心者にはちょっと敷居が高いです。そんな状況で非常に助かったのがRF430CL330HのデータシートのFigure 8に記載されている、コマンドと応答のやり取りの図です。この図を引用させていただいたものを下図に示します。

もともとPICC側(RF430CL330H側)の動きを説明するための図ですがPCD側(リーダ側)の動きも図示されていますので、TRF7970AではこのPCD側の動きを実装してやればいいことになります。対応するNFC Forum手順ならびに、参照すべきドキュメントの章番号まで記載されていますので、この図の意味を読み解くべく資料に目をとおせば良いのです。

この図からも見てとれるように、NDEFのデータを読み取るには、何度もタグに対してコマンドを送って、その応答を受信する必要があります。これはNDEFの定める論理的なファイル情報の構造にしたがって、目的の情報が配置されている位置や、その大きさを調べてからでないと、目的とする情報にアクセスすることができないためです。したがって、これらの複数のコマンドがやりとりされる間、リーダとタグ側が正常に通信できるようにタグをリーダに近づけた状態を維持していなければなりません。

こうして読み取ったRF430CL330HのNDEFメッセージ・データ部分をダンプしてみた際の動作ログです。



答え合わせのために、TagInfoでの読み取り結果と比較。最初の1バイトと、最後のバイトに挟まれたデータ部分が一致しているので、正しく読み取れていることが確認できました。