一、介紹
本博文介紹了符合ISO15693標準的標籤類型的檢測以及防碰撞過程。
二、協議簡介
(2.1)ISO15693介紹了三種模式,它們之間的關係如下所示:
(2.2)請求命令格式:
SOF Flags Command Code Parameters Data CRC EOF 幀開始 標識 命令代碼 參數 數據 CRC 幀結束 (A)標識(Flags)總共佔一個字節大小,它的定義如下圖所示:
(B)根據ISO15693的命令代碼分成強制的、可選的、自定義以及私有的四種類型。它們的定義如下:
強制命令:強制命令的命令代碼(command code)取值範圍爲0x01~0x1F,所有標籤(VICC)必須支持在該命令代碼範圍內的命令。
可選命令:
可選命令的命令代碼取值範圍爲0x20~0x9F。在該命令代碼範圍的命令,標籤可能支持;如果標籤支持可選命令,它的命令格式在後續會介紹。;如果標籤不支持可選命令,並且尋址標識(Address_flag)或者選擇標識(Select_flag)都設置了,它可能會返回錯誤碼或者不響應,保持沉默;如果標籤不支持可選命令,並且尋址標識(Address_flag)或者選擇標識(Select_flag)未設置,那麼標籤就不會響應,會保持沉默。
自定義命令:
自定義的命令代碼取值範圍爲0xA0~0xDF,標籤可以選擇去支持它,自定義命令可以實現製造商的特殊功能。所有的自定義命令必須包含IC製作商編碼。如果標籤不支持自定義命令,那麼給它發送自定義命令時,它應該返回錯誤碼或者保持沉默。
私有命令:
私有命令的命令代碼取值範圍是0xE0~0xFF,在該命令代碼的範圍內的命令可以用於製造商測試,系統信息編碼等。私有命令要求必須包含IC製造商代碼以及IC版本號。
ISO15693的命令代碼如下表:
命令代碼 | 命令類型 | 命令作用 |
---|---|---|
0x01 | 強制命令 | 清查命令(查找所有在RF場中的標籤VICC) |
0x02 | 強制命令 | 保持安靜命令(指定某個標籤不再響應清查命令) |
0x03~0x1F | 強制命令 | 預留給未來使用 |
0x20 | 可選命令 | 讀取標籤指定單塊內容信息 |
0x21 | 可選命令 | 將指定信息寫入標籤指定單塊位置 |
0x22 | 可選命令 | 將標籤指定塊進行鎖定 |
0x23 | 可選命令 | 讀取標籤指定多塊的信息 |
0x24 | 可選命令 | 將信息寫入到標籤多塊位置 |
0x25 | 可選命令 | 選擇某一個標籤(選中被髮送了保持安靜命令的標籤) |
0x26 | 可選命令 | 重新準備(重置被髮送了保持安靜命令的標籤) |
0x27 | 可選命令 | 寫入AFI(Application Family Identifier) |
0x28 | 可選命令 | 鎖定AFI |
0x29 | 可選命令 | 寫入DSFID(Data Storage Format Identifier) |
0x2A | 可選命令 | 鎖定DSFID |
0x2B | 可選命令 | 獲取標籤系統信息 |
0x2C | 可選命令 | 獲取多塊的安全狀態 |
0x2D~0x9F | 可選命令 | 預留給未來使用 |
0xA0~0xDF | 自定義命令 | 由IC製造商決定 |
0xE0~0xFF | 私有命令 | 由IC製造商決定 |
(2.3)命令響應格式:
SOF Flags Parameters Data CRC EOF 幀開始 標識 參數 數據 CRC 幀結束 (A)標識(Flags)佔一個字節,它的定義如下表所示:
(B)如果錯誤碼(Error_flag)的值爲1,則錯誤碼定義如下:
三、命令
3.1 清查命令(Inventory)【命令碼:0x01】
當所有的標籤(VICC)接收到了該命令,那麼都應該做出相應的響應。
3.1.1 格式
注:標識(Flags)參考前面的請求命令中標識,第二個字節爲Inventory,在此處對應它的命令代碼0x01。AFI的定義如下表:
掩碼長度(Mask Length)指示了需要的比較的字節數,範圍爲[0x00,0x40];掩碼值(Mask Value)代表需要比較的比特數。如:發送無AFI命令爲 26 01 01 00,表示第一個字節Flags的值爲0x26;第二個命令代碼爲0x01,代表inventory命令;掩碼長度(Mask Length)值爲0x01,表示需要比較在RF場中的標籤ID(UID)的第一個字節;掩碼值爲0x00。
3.1.2 響應
如果RF場中有多張標籤響應,則就會發生碰撞情況,此時響應中的CRC就會計算錯誤,由此我們可以判斷是否要進行防碰撞過程。
3.2 保持安靜命令(Stay quiet)【命令碼:0x02】
當標籤接收到該命令時,它就會進入安靜狀態(quiet state),並且不會有響應返回。
當標籤在安靜狀態時:它將不會響應任何帶有清查標識(inventory_flag)的請求
它將響應帶有尋址標識的請求如下情況標籤將退出安靜狀態:
1)重啓
2)接收到選擇(select)請求,並且進入選擇狀態。如果支持的話,將響應;如果不支持,則返回錯誤碼
3)接收到重置到準備(reset to ready)請求,並且進入準備狀態(ready state)
3.2.1 命令格式
注意:(A)保持安靜(Stay Quiet)命令必須執行在尋址模式下,及選擇標識(Select_flag)設置成0並且尋址標誌(Address_flag)設置成1。
(B)該命令沒有響應返回
3.3 讀單塊命令(Read single block)【命令碼:0x20】
當標籤(VICC)接收到讀單塊命令時,它應該響應該命令,並且將指定單塊的值返回在響應裏。
如果在該請求裏設置了可選標識(Option_flag),標籤應該返回該塊的安全狀態,然後是該塊的值;如果沒有設置可選標識,則僅僅返回塊信息。
3.3.1 命令格式
3.3.2 命令響應
3.4 寫單塊命令(Write single block)【命令碼:0x21】
當標籤接收到寫單塊的命令時,信息應當寫入對應的塊中,並且在返回值應該顯示寫入成功與否。
當可選標誌沒有設置時,從完成信息寫入開始,在規定時間,應當會返回響應。
如果可選標誌已經設置了,標籤應當等待完全調製的幀結束標識(EOF),並且返回響應給VCD。
3.4.1 命令格式
3.4.2 命令響應
3.5 鎖塊命令(Lock block)【命令碼:0x22】
當標籤接收到鎖塊命令時,標籤應當永久的鎖定所請求的塊。
如果可選標誌沒有被設置,當完成鎖塊操作時,標籤應當在規定時間返回它的響應。
如果可選標誌設置了,標籤應當等到幀結束標識(EOF),並返回它的響應。
3.5.1 命令格式
3.5.2 命令響應
3.6 讀多塊命令(Read multiple blocks)【命令碼:0x23】
當標籤接收到讀多塊的命令時,標籤應當將塊的信息在返回的響應中表示出來。
如果設置了可選標誌,標籤應當返回塊的安全狀態,隨後跟着一塊接着一塊的值
如果可選標誌沒有被設置,標籤只返回塊的值。
塊的序號從0x00到0xFF。當塊的值爲0x06時,表示的是第7塊。
3.6.1 命令格式
3.6.2 命令響應
3.7 寫多塊(Write multiple blocks)【命令碼:0x24】
當標籤接收到寫多塊的命令時,標籤應當將數據寫入到對應的塊中,並且將寫入是否成功的的狀態報告給讀卡設備(VCD)
如果可選標誌沒有被設置,當完成寫操作時,在規定時間應當返回它的響應
如果設置了可選標誌,標籤應當等到VCD發送的幀結束標識再返回響應。
塊的序列號範圍是0x00到0xFF。
3.7.1 命令格式
3.7.2 命令響應
3.8 選擇命令(Select)【命令碼:0x25】
當標籤接收到選擇命令時,如果UID等於標籤的UID,那麼該標籤就如選擇狀態(selected state)併發送一個響應;如果UID不等於標籤UID時,標籤返回準備狀態(ready state)並不予響應。
選擇命令總是執行在尋址模式(尋址標誌爲1,選擇標識爲0)
3.8.1 命令格式
3.8.2 命令響應
3.9 重置到準備(Reset to ready)【命令碼:0x26】
當標籤VICC接收到重置到準備命令時,標籤應當返回到準備狀態(Ready state)
3.9.1 命令格式
3.9.2 命令響應
3.10 寫AFI命令(write AFI)【命令碼:0x27】
當接收到寫AFI命令時,標籤應當將AFI的值寫入到標籤的內存中。
如果可選標誌沒有設置,當完成寫AFI操作時,標籤應當在規定的時間內返回響應。
如果設置了可選標誌,標籤應當等待幀結束標識才返回它的響應。
3.10.1 命令格式
3.10.1 命令響應
3.11 鎖AFI命令(Lock AFI)【命令碼:0x28】
當接收到鎖AFI命令時,標籤應當永久的鎖定AFI值到它的內存。
如果沒有設置可選標誌,當完成鎖AFI操作時,標籤應當在規定的時間返回它的響應。
如果設置了可選標誌,標籤應當等到幀結束標識並且返回它的響應。
3.11.1 命令格式
3.11.2 命令響應
3.12 寫DSFID命令(Write DSFID command)【命令碼:0x29】
當標籤接收到寫DSFID命令時,標籤應當將DSFID的值寫入到它的內存。
如果沒有設置可選標誌,當完成寫DSFID操作時,標籤應當在規定的時間內返回它的響應。
如果設置了可選標誌,標籤應當等到幀結束標識並隨後返回他的響應。
3.12.1 命令格式
3.12.2 命令響應
3.13 鎖DSFID命令(Lock DSFID)【命令碼:0x2A】
當標籤接收到鎖DSFID命令時,標籤應當將DSFID的值永久鎖定到內存。
如果可選標誌沒有被設置,當完成鎖DSFID操作時,標籤應當在規定時間返回它的響應。
如果設置了可選標誌,那麼標籤應當等到幀結束標誌後才返回它的響應。
3.13.1 命令格式
3.13.2 命令響應
3.14 獲取標籤系統信息命令(Get system information)【命令碼:0x2B】
該命令用於獲取標籤系統的信息,包含各種屬性。
3.14.1 命令格式
Get system info的定義如下表:
3.14.2 響應命令
3.15 獲取多塊的安全狀態命令(Get multiple block security status)【命令碼:0x2C】
當標籤接收到獲取多塊安全狀態命令時,標籤應當返回塊的安全狀態。
塊的序號從0x00到0xFF。
3.15.1 命令格式
3.15.2 命令響應
3.16 自定義命令
3.16.1 命令格式
3.16.2 命令響應
四、防碰撞
ISO15693的防碰撞有兩種方式,一種是單時隙,一種是十六時隙。其中單時隙是一種面向比特位的的算法,它和ISO14443A的防碰撞算法類似,而十六時隙算法則是基於時隙,類似於ISO14443B的防碰撞算法。以後有時間介紹。待續……