ロックの情報は、タグの3ページ目(Page02)にあります。仕様書によると、3ページ目の後ろ2バイトがロック情報になっています。
2バイトの詳細は次のようになっています。
1バイト目
bit7 : LOCK PAGE 7
bit6 : LOCK PAGE 6
bit5 : LOCK PAGE 5
bit4 : LOCK PAGE 4
bit3 : LOCK PAGE 3
bit2 : BLOCK LOCKING LOCKBITS 15 - 10
bit1 : BLOCK LOCKING LOCKBITS 9 - 4
bit0 : BLOCK LOCKING LOCKBIT 3
2バイト目
bit7 : LOCK PAGE 15
bit6 : LOCK PAGE 14
bit5 : LOCK PAGE 13
bit4 : LOCK PAGE 12
bit3 : LOCK PAGE 11
bit2 : LOCK PAGE 10
bit1 : LOCK PAGE 9
bit0 : LOCK PAGE 8
これを見ると解る通り、ページごとにロックができます。ロックしたいページのビットを1にすると、そのページは読取専用になるわけです。
このロック情報は一度1にすると0には戻せないようになっているようです。
ではやってみましょう。NTAG203を利用します。AndroidアプリのTagInfoを使って中身を確認します。
Page02 の後ろ2バイトを見ると 0x00 0x00 になっています。ロックされてない状態です。
試しに Page07 と Page06 のロックビットを1に書き換えてみます。
Page07 と Page06 の部分に x マークが付きました。Page07 と Page06 はもう書込みができなくなっています。ロック情報をリセットできないか試してみましたが、ロックビットを0に戻すことはできませんでした。
もうひとつ、ブロックロックというのがありますね。これ何でしょうか。試しに 15 - 10 のブロックロックビットを1にしてみます。
今度はページの部分に + マークが付きました。これってロックされてるんでしょうか。ということで試しに Page10 のデータを書きかえてみます。
あら?書けました。よく見ると BLOCK LOCKING LOCKBITS になってますので、ロックビットをロックするということらしいです。現在は 15 - 10 のページはロック無しになっていますが、これをロック状態にできない(ロックビットを変更できない)ということです。
試しに Page15 と Page14 のロックビットを1に書いてみましたが(ロックバイトの2バイト目を 0xC0 へ)、書き換えできませんでした(0x00のまま)。
ロックビットをロックというのがややこしいですねー。
0 件のコメント:
コメントを投稿