天天看點

EPC協定

一直不是十厘清楚RFID tag 和reader的互動過程,現在簡要翻譯一下EPC協定中相關的概念。

sessions and inventoried tags:

雙方的互動有四個會話(S0,S1,S2,S3),tag在一次盤點中能且僅能參加一個會話,會話存在的意義是多個閱讀器對同一個tag集合的盤點。當有多個閱讀器時,這些閱讀器可以通過不同的會話對同一個tag集合盤點,每個tag可以獨立的為四個會話保持盤點标志位(inventoried flag),這個标志位包括兩個值,A和B,在每個inventory round開始的時候,reader選擇狀态為A或者B的tags進行盤點,當完成對一個tag的盤點之後,reader會發送一個指令導緻tag反轉标志位,下面是一個例子

EPC協定

interrogator#1對所有的tags盤點完之後,下一輪的盤點将使标簽從B反轉到A。

對于一個雜亂的tag集合,在盤點之前tag某個會話的inventoried flag可能不統一,其實是這樣的,對于session0,tags在power up之後會将flag首次設定成A,其他的session這裡暫時不讨論。也就是說每次power up都會将flag重置為A

selected flag:

selected flag(SL)應該是用于標明标簽子集??這個不是很清楚。由reader Select指令設定,設定為真或為假,reader的query指令還有一個參數Sel(這個參數不是Select指令的一部分),通過這個參數reader可以選擇隻對SL聲明為真(或者假)的tag子集進行盤點或者忽略這個标志位,對所有标簽盤點。tag的SL在斷電情況下會保持一定時間,超過這個時間,再次power up時會重置為假,否則保持原值。

tags states and slot count:

EPC協定中tag必須實作幾個元狀态,簡要介紹如下

1、ready state:

該狀态也叫保持狀态,tag power up之後當沒有被kill也沒有開始被盤點的時候處于這個狀态,等待Query指令,如果session 和Sel相比對就會産生一個Qbits 的随機數,作為應答slot,如果值為0則進入reply狀态,否則進入arbitrate狀态,tag在除killed狀态之下任何狀态斷電,當再次充電時将進入ready狀态。

2、arbitrate狀态:

标簽進入盤點期間而且slot值不為0将進入該狀态,在該狀态下,每次收到QueryRep指令時将會把slot減一,當slot值為0()X0000)時進入reply狀态,當标簽應答完畢後,QueryRep将會使slot counter繼續減一變為0XFFFF,然後再次進入arbitrate狀态。

3、reply狀态:

進入該狀态後tag将發送RN16資料,如果收到有效的ACK指令則變為acknowlege狀态,如果沒有收到有效的ACK或者收到ACK 但是帶有錯誤的RN16(reader 也将産生相同的RN16數值作為ACK的參數傳回)則傳回到arbitrate狀态。(然後呢?slot counter會怎麼樣)此時的slot counter應該還是0x0000,在arbitrate等待,直到下次的QueryRep,這樣的話标簽在本輪盤點中好像會失去應該的機會。

4、acknolege state:

在該狀态下如果标簽判斷收到的ACK是否包含正确的RN16,如果正确将會将應用資料發送給reader,否則進入arbitrate狀态。

5、open state:

進入acknowlege狀态後續動作完成之後,如果 access password不為0,則在收到Req_RN後進入open狀态,發送RN16,,在該狀态下tag不會進入acknowlege狀态,但是可以根據收到的指令進入其他狀态,比如在此狀态下,如果收到正确ACK指令将會重新發送應用資料。

6、Secured state:

處于acknowledge狀态的标簽如果password=0則在收到Req_RN指令之後進入secured狀态,發送新的RN16……

7、killed state:

處于open狀态或者secured狀态的tag如果收到kill指令将會進入killed 狀态,kill指令将永久使标簽失能,即标簽永久廢掉,不可恢複

8、slot counter:

标簽擁有15bits的slot counter,當标簽受到Query或者QueryAdjust指令時将重新加載一個0-2的Q次方-1的值,Query會設定初始的Q,QueryAdjust可以修改Q

在每一輪盤點過程中(包括Query和QueryRep),每個标簽都會若幹次将slot減一,當為0時應答,應答之後的标簽以及沒有收到reader确認的标簽将會進入保持在arbitrate狀态(會重複對這個tag盤點嗎???),在下一輪盤點(收到QueryRep指令)時将會把slot couter 從0x0000重置為0xFFFF.****感覺這段講述不是很清楚

下面附上狀态轉移圖:

EPC協定

标簽集的管理:

reader使用3個基本的操作管理标簽集,Select,inventory和 Aceess.

a) Select:該操作包括Select指令和Challenge指令,主要用于標明标簽集然後進行盤點或者認證

b)Inventory:該操作用于識别tag

c) Access:該操作對标簽進行讀寫

下面稍微詳細介紹部分内容

Select操作下的Select和Challange指令是唯一兩個在inventory之前的指令,兩個指令之間不是互斥的,前者是強制的,後者是可選的。

在inventory操作之前,Select操作會標明特定的标簽集,標明的标準由使用者決定,可實作并集,交集和非操作,其中并集和交集可以通過連續發送Select指令實作(???怎麼實作)Select指令可以聲明标簽的SL标志位(SL,~SL,或者取消),或可以設定inventoried狀态位。但是兩者好像不能同時設定

具體的Select包括Target,Action,MemBank, Pointer, Length,Mask,Truncate等參數,Target和Action要麼修改SL要麼修改inventoried flag。Membank用于標明memory bank.Pointer,length标志memory bank的位置和範圍,Mask長度為length的bit串,用于和特定的memory range 比較(什麼意思沒明白)。Truncate用于設定标簽發送完整的EPC,還是僅僅是EPC的一部分。

Inventorying 包括Query,QueryAdjust, QueryRep,ACK,NACK等指令。Query發起一輪盤點,該指令包含一個設定slot counter的Q參數,被標明的标簽在

EPC協定

随機選擇一個值加載到slot counter中,slot counter為0的标簽轉到reply狀态應答,非0的标簽轉到arbitrate狀态等待QueryAdjust(為什麼會轉到這個狀态)或者QueryRep。假設隻有一個标簽應答,具體的流程如下:

a)  tag發送RN16

b) reader 發送ACK指令包含RN16

c) tag 進入acknowledge狀态發送資料

d) reader 發送QueryRep指令使得标簽invecntoried flag反轉然手進入ready狀态,隐含導緻另一個标簽開啟和reader的對話。然後重複a。

如果标簽在b階段規定的時間内未收到ACK或者收到ACK但是RN16錯誤将會傳回arbitrate狀态,對于a中出現多标簽的情況,reader将會在waveform層次檢驗沖突的發生,從中識别出某個标簽,其他标簽傳回arbitrate狀态。在任何時刻reader都可以發送NAK,标簽收到該指令将會傳回arbitrate狀态而不改變inventoried flag。reader的Query指令開啟盤點之後可能會發起一個或以上QueryAdjust或者QueryRep指令,QueryAdjust重複Query但不會引入新的tag(這個是由Query決定的)。

在arbitrate或者reply狀态的标簽在收到QueryAdjust指令将會調整Q并重新加載slot counter。在arbitrate的所有标簽每次收到QueryRep指令都會将slot counter減一,當slot counter=0時進入reply狀态,slot counter為0 的标簽,應答完畢或者沒有被确認傳回arbitrate狀态保持slot為0,并在下次的QueryRep指令時将slot counter減一變成0xFFFF(疑問,在這種情況下标簽将會在本輪盤點中再次獲得被查詢的機會,隻是延後到最後時隙,問題是多個标簽發生這種情況的話最後一個時隙會出現多個标簽,這樣在最後的時隙隻能有一個标簽應答,其他的怎麼辦???或者就沒有機會應答,因為reader已經開始了若幹時隙,剩餘的時隙小于0xFFFF),實際上這種情況下标簽本輪不在應答,直到下一輪。

如果标簽是在acknowlege,open或者secured狀态收到Query且session比對指令将重新開啟新一輪的盤點,這時标簽将反轉inventoried flag然後進入ready,arbitrate或者reply狀态,否則inventoried flag不變

下面舉一個例子說明上述過程:

假設64個标簽充電進入ready狀态,,Select指令標明其中16個标簽子集,在假設有12個标簽的invecntoried 狀态為A,Query 指令發送并攜帶參數(SL,Q=4,S0,A),12标簽每個選個一個時隙。一個query結果分為三種情況

1)沒有标簽應答。reader重新發送Query,或者QueryAdjust或者QuqeryRep

2) 有一個标簽應答,可能走完正常的流程也可能在收到ACK之後,reader發送QueryAdjust或者QueryRep指令,然後反轉标簽的inventory flag(疑問,這兩個指令會反轉inventoried flag 嗎)

3) 多個标簽應答。reader嘗試解析出來其中一個,其他的reader發送QueryAdjust或者QueryRep指令或者NAK,沒有識别的标簽一般傳回arbitrate狀态

accessing individual tags:

當reader對tag ACK之後可能會通路tag,通路指令包括Req_RN,Read,Write,Kill,Acess,BlockWrite,BlockErase, ReadBuffer等等,通路指令将使标簽從acknowledged狀态進入open或者secured狀态。首先reader發送Req_Rn指令,tag産生一個并儲存一個新的RN16,發送給reader。

NAk指令不會改變inventoried flag。

下面是标簽典型的響應過程

EPC協定

下面是Q參數生成算法

EPC協定

由上圖可知當标簽集合很大的時候,Q參數的數值調整是很慢的,但是由于Q的含義是2的指數次方,是以每經過2-10個Query rounds之後,slot 數量增加一倍。初始大小為16.

Select指令各域如下表

EPC協定

Query command 各域如下表所示

EPC協定

下面是部分狀态的轉移表

EPC協定
EPC協定
EPC協定
EPC協定

下面是部分指令的響應圖表

EPC協定
EPC協定
EPC協定
EPC協定

參考文獻:

EPC™ Radio-Frequency Identity Protocols Generation-2 UHF RFID  https://www.gs1.org/epcrfid/epc-rfid-uhf-air-interface-protocol/2-0-1