マイコン工作実験日記

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

M24SRへの書き込み

2014-12-07 10:20:10 | Weblog
M24SRへの書き込み手順がわかったので、メモしておくことにします。
  1. KillRFsessionコマンドを送る
    M24SRではRF側とI2C側の両方からタグデータに対してのアクセスが可能ですが、両方か同時にアクセスすることはできません。アクセス手順に先立って、まずはアクセス権を取得しておく必要があります。I2C側からKillRFsessionを送ることで、I2C側からのアクセス権を取得することができます。このコマンドは、進行中のRFアクセスがある場合には、それを中断してI2C側のアクセス権を取得してくれます。このコマンドの送信は、具体的にはコマンドデータとして 0x52の1バイトを送信してやるだけです。
  2. NDEF Tag Application Select commandを送信する
    NDEF TAG applicationを活性化するためのSelectコマンドをI-Block形式で送信します。C-APDU形式での送信内容はデータシートに明記されていますが、実際にこれをI2Cで送信する際にはI-Block形式になっていなかればならないので、C-APDUデータの前に1バイトのPCBと、後ろに2バイトのCRCを付加してやる必要がある。そのため、実際の送信バイト数は16バイトになる。
  3. 応答を読み取る
    5バイトの応答を読み取る。応答もまたI-Block形式なので、最初の1バイトがPCBで終わりの2バイトはCRC。正常終了であれば2バイト目と3バイト目が0x90, 0x00となる。
  4. 正しい手順としては、続いてCapability ContainerをSelectして、その内容を読んでおくべきなのですが、特にその内容を参照/変更する必要がなければ、この手順は省略可能。
  5. NDEF Selectコマンドを送信して、最初のNDEFファイルを選択する。
    これまたI-Block形式で送信。PCBのBlock numberビットを反転させる。
  6. 5バイトの応答を読み取る
    I-Blockでの応答を読み取る。応答のI-Blockも反転されている。
  7. UpdateBinaryコマンドを使って書き込むタグデータをI-Block形式で送信する
  8. 5バイトの応答を読み取る
  9. Deselectを送信する
    タグへのアクセスの終了を示すためにDeselectコマンドをS-Block形式で送信する。具体的には 0xC2, 0xE0, 0xB4の3バイトをI2Cで送信する。最初の1バイトがDeselectを示し、残りの2バイトがCRC。
  10. 3バイトの応答を読み取る
    応答内容もDeselectを示す3バイトである。

手順そのものはISO14443AとNDEF Type 4 Tagに準拠したものなので、両標準資料を読んでおえば理解が深まります。手順は最後のDeselectの応答までキチンと読み取ることが重要です。Deselectコマンドを送信しただけだと、タグデータへのアクセス権はまだI2C側に与えられてままになっています。応答を読み取ることで、I2C側に与えられたアクセス権が解除されます。

Deselectを忘れるとI2C側がアクセス権をつかんだままになってしまうので、RF側からスマホやタブレットでアクセスしてもデータが読み取れないので注意。

最新の画像もっと見る

コメントを投稿

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