在EPC C1G2协议标准中,标签的行为可以用有限状态机来描述
- 就绪态(ready state)标签在通电前所处的状态。标签处于就绪态时,不参加询问过程。一个询问过程由阅读器发出的查询命令开始,到下一个查询命令终结。阅读器通过查询命令获得标签的EPC码。当标签接收到一个查询命令时,离开就绪态。标签从阅读器发出的查询命令中,选择一个参数生成随机数用于计算发送的时隙数。如果时隙数为0,则标签进入回复态,否则进入仲裁态。
- 仲裁态(arbitrate state)当标签处于仲裁态时,它将参与这一轮的查询。但由于此时标签的时隙数不为0,所以标签等待该时隙数变为0。当标签的时隙数变为0时,标签将进入回复态。
- 回复态(reply state)当标签需要回复EPC码时,首先进入的是回复态。这时标签的时隙数为0,标签返回一个16比特的随机数RN16给阅读器。发送RN16是标签发送EPC码给阅读器的第一步。如果阅读器正确接收到标签的随机数RN16,它将会根据此随机数生成一个确认命令ACK给标签。在接收RN16的时候,阅读器可能无法正确的接收。a.两个或多个标签同时发送RN16给阅读器。b.其他射频信号干扰了RN16的传播。c.阅读器错过接收RN16的时间。如果标签成功地接收到来自己阅读器的确认命令ACK,它将会发送自己的EPC码,同时发送自己的PC(描述自己的物理属性)和CRC码(用于错误检测)。接收到确认命令后引起标签从回复态到确认态。标签处于回复态的时间有限,只有在发送RN16后,没有接收到阅读器的任何命令的有限时间内才处于才状态。此后,标签将会自动进入仲裁态。
- 确认态(acknowledged state)当标签发送它的EPC给阅读器后,标签进入确认态。确认态是标签进入访问命令的必经状态。在确认态中,标签不会被杀死。确认态就像回复态一样,有一个计数器,每当接收到一个命令时,就会将计数器置为0.如果标签在指定时间内没有接收到来自阅读器的命令,标签将会自动返回仲裁态。
- 开放态(open state)开放态是标签进入访问命令时,需要互斥使用的状态。在开放态中,没有计数器。因此,如果标签没有接收到来自阅读器的任何命令,将会一直处于开放态,直至标签没有能量维持该状态。标签可以从开放态进入安全态
- 安全态(secured state)标签可以使用一个可选的密码功能,要求阅读器在执行任何访问命令时都需要提供保护正确的密码。密码的缺省值为0,这就表示密码保护功能,没有被激活或者没有被执行。将密码置为一个非零值,就可以提供密码保护功能。**如果标签的密码功能被执行或者被激活,那么所有的访问命令必须从安全态中执行。**而在进入安全态前,必须提供正确的密码。
- 杀死态(killed state)RFID中包含了识别一个特别对象的信息,它的ID是唯一对应一个特定对象的。因此,在RFID应用过程中,安全隐私问题引起了关注。这些关注中包括通过阅读RFID标签来跟踪人,窃听医药类的RFID标签的内容来确定一个人的身体状况。为了解决这些安全的与隐私问题,一个可行的方法是让标签处于非激活状态。这种方法在EPC C1G2协议中已被采用,就是杀死标签。这个杀死操作不能接触,它将会永久地损坏标签。当标签被杀死以后,它将不再回复阅读器的任何命令。此后,恶意的阅读器是不能读取标签的EPC码的。对于一个标签而言,它是在接收到阅读器的正确密码和杀死命令之后,才会进入杀死状态。标签将会一直处于杀死态。
查询过程的有限状态机的状态转移
当阅读器想要读取一个指定集合内的标签的EPC码时,它将会使用选择命令(select command)启动这个过程。假设所有的标签已经被激活10s以上并且没有被杀死,那么所有标签进入就绪态。
首先,阅读器会通过使用选择命令指定在一定范围的标签集合处于一个特定的状态。这些标签接收到命令后就会处于就绪态。然后,阅读器通过查询命令启动查询过程,并且指定要响应的标签的集合。为了回应阅读器的查询命令,每个标签选择一个Q个bit的随机数作为自己的时隙数并将该随机数存放于时隙计数器中。
处于仲裁态的标签将会响应所有的Query、QueryRep、QueryAdjust。
访问命令中有限状态机的状态转移
访问命令提供给了阅读器更强大的能力,使其可以执行更为先进的功能。比如读取、写入数据、更改密码、锁住内存、毁坏标签等。访问命令可以用于读/写标签对应的物体信息。
在标签回复阅读器的任何命令之前,必须处于确认态。这意味着标签在发送完它的EPC码之后直接被访问。读取标签命令的EPC码是实现任何访问命令的第一步(让标签处于确认态)。
当读取到标签的EPC码之后,阅读器必须发送Req_RN和16bit的随机数(用于在ACK命令中读取标签的EPC码),让标签进入开放态或者安全态。具体进入哪一个状态,由确认态中的访问密码的值决定。如果一个访问密码由全“0”组成,则意味着密码没有被执行或者没有启用。