2021年7月16日金曜日

Type2 と Type5 で Capability Container の仕様が異なっていた

 今回は NDEF に関する内容です。NDEF というとスマホで URL を書き込んだりして利用しますが使用しているタグは NTAG213 だったりが多いと思います。

NTAGシリーズは Mifare の後継で NFC Forumでは Type2 のタグになります。そんなわけで NDEF は Type2 のタグだけしか使えないのかというとそういうわけでもなく、ISO15693 のような Type5 のタグでも使うことができます。

最近 NDEF のロックを使う機会があったのでロックってどうやるんだったっけかなー、確か Capability Container に設定するのが簡単だったよなー、でも実際どうやるんだったっけーといろいろ調べてたら Type2 と Type5 でロックの仕方が異なるということに気づきました。

ちなみに Capability Container ですが、

こちらがとある NTAG203 の中身で、Page3 の E1 10 12 00 のところが Capability Container になります。実際の NDEF のデータは Page4 以降に書込みされます。

ここのどっかがロックだったよなーと思いつつ仕様をみたところ、Type2 では

1バイト目 E1 マジックナンバー(固定)
2バイト目 バージョンナンバー
3バイト目 メモリサイズ
4バイト目 上位4ビットがリードコントロール 下位4ビットがライトコントロール(00 はリードもライトもOK、0F にするとライトできなくなる)

となっています。あれー、こんなんだったっけー、何か違う気がすんなー、まー、もー、歳だしなー、とブツブツ言いながら 0F を書いてみます。が… あれ?書き換えできるぞ?何だ?というところから今回の旅が始まりました。

結局いろいろ調べて、Type2 と Type5 で Capability Container の仕様が異なるということがわかりました。そうです。私が苦戦していたのはまさしく Type5 のタグだったのです。くそー。

Type5 の Capability Container の仕様は以下の通り。

1バイト目 E1 マジックナンバー これは一緒
2バイト目 上から 2bit メジャーバージョンナンバー 次 2bit マイナーバージョンナンバー 次 2bit リードコントロール 最後 2bit ライトコントロール(11 で書込み不可)
3バイト目 メモリサイズ
4バイト目 追加情報

ライトコントロールは2バイト目になっています。これだと4バイト目をいくらいじっても何の効果も無かったわけですねー。ていうかこの部分って仕様違ったんだー。