UHFのタグにはEPCというIDが振られていて、EPCエリアにそのID(通常96bit)が書き込まれています。ただEPCエリアにはEPCのIDだけ書かれているわけではなくて、CRCとPCというのが書かれています。CRCはエラーを検出するためのもので、タグが生成しますので読み取り専用です。
で、今回はPCのお話です。通常はEPCが書ければ問題ないので気にすることはないのですが、どうも不思議な動きをしているのを見つけたので調べてみました。仕様については GS1 のサイトに資料がありますのでこちらを参照。
http://www.gs1.org/epc-rfid
PCは16bitで構成されていて、順番に以下の構造になっています。
EPC Length (5bit) - EPCの長さです。ワード(2byte)単位に指定します。5bitなので、00000~11111となり、0バイト~62バイトの指定ができます。通常はEPCの長さは 96bit(=12byte)なので、00110が設定されています。
UMI(User Memory Indicator) (1bit) - ユーザメモリを使用している場合は1、使用していない場合は0を設定するようです。これがちょっと曲者です。後述します。
XPC Indicator (1bit) - タグが、XPCという拡張機能を実装している場合は1、していない場合は0のようです。
Toggle (1bit) - ここが0だと EPC Globalの仕様のタグで、1だと ISO15961の仕様のタグと見なされます。
Attribute/AFI (8bit) - EPC Globalの場合は EPC Globalで定義されたフォーマットを指定し、ISOの場合はAFIで定義されているフォーマットを指定します。
EPC Lengthは割と使う(EPCの長さを変える)んですが後のはあまり意識したことないですよねー。ほとんどデータフォーマットの情報(Toggle と Attribute/AFI)なんですが、UMIとXPCというのがあります。
XPCはタグの仕様で決まりそうなのでいいとして、問題はUMIです。ユーザメモリを使用している場合は1なんですが、使用してるかどうかって何だろうと思って仕様を見ると、「ユーザメモリの3bitから7bitに1がある場合、自動的に1になる(要約)」だと!
自動的に1になるだぁ?そんな勝手なことでいいのかぁ?そもそも何で3bitから7bitって中途半端なんだぁ?と疑問は尽きません。調べてみるとユーザ領域もお作法があるようです。
ユーザ領域の先頭部分に、DSFIDとPrecursorというそれぞれ 8bit の書式があり、DSFIDの4ビット目~8ビット目にData Formatを格納するところがあって、ここにユーザエリアのフォーマットを入れられるようになっています。この4ビット目から8ビット目というのが、上記の3bitから7bitに相当します(0からはじまるので)。
要するに、ユーザ領域にきちんとした書式が設定(0以外)されていると、UMIが自動的に1になるということのようです。
自動的とかホントか?ということで試してみました。
まず普通のタグ読みます。
画面にはPC+EPCが表示されていて、PCが3000なのでEPCのレングスが6になっています。
で、ユーザ領域のDSFIDをいじります。
そしてもう一回読み取りすると...
あー、ホントだ―、変わってるー。
ってこれ結構厄介だなー、何で今まで気付かなかったんだろう。
0 件のコメント:
コメントを投稿