2016年8月22日月曜日

EPCの謎に迫る その3

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 件のコメント:

コメントを投稿