三、 ISO18000-6B防碰撞算法的缺陷分析
1. CRC-16容错能力的分析
CRC-16也会有出错的时候,只是常用的算法出错概率极低,可以100%判断单个位和双位的错误。
因为是无线射频设备,在数据接收过程中不可避免会受到一些干扰,干扰随机附加在信号中,阅读器在受到干扰或者标签偏离天线感应区太远,可能存在CRC-16校验正确,但得卡号却不正确的情况。
标签与阅读器不存在重发纠错的算法,所以可能会导致读出的卡号不是实际的卡号。本项目在研究的过程中,经过多数次的试验和测试,确实存在该种现象。
2. TypeB标准中命令集分析
ISO18000-6B中用于防碰幢算法的命令主要有Initialize、Select、Fail、Success、Read.
Read命令时,当发信通道没有干扰而返回信息受到干扰时,这样卡片已经将状态切换到DataExchange状态了,但是MCU却不知道。卡片的DataExchange状态只接受Initialize命令才能回到Ready状态,或者掉电重新上电而进入Ready状态。
3. 可能带来的找卡处理问题
1)当我们在执行Select、Fail或Success命令,校验和正确时,我们还不能确认得到的卡号就是对的。
2)我们需要利用该得到的卡号执行相关读写命令,以确认卡号的正确性。
3)在执行第2步骤时,如果发信正确,返回信息时受到干扰。则此种情况下,卡片已经将自己的状态切换到DataExchange状态了,但阅读器却无从知道。对于此卡号,阅读器就只好当没有找到。
4)对于漏掉的或者被误认为非正常的卡,目前按ISO18000-6B技术标准规定的命令序列而言,目前只有Initialize命令让该状态下的卡回到Ready状态。
综合以上分析知道,Initialize命令会让所有状态的卡都回到Ready状态。于是,原来参与过防碰撞的卡,现在继续参与防碰撞,导至重复找到很多卡,某些卡可以找到多次,而可能原来没有找到的卡可能还是没有找到。
四、 反碰撞算法的改进
1. 快速反碰撞算法的设想
执行Initialize让所有卡都处于Ready状态,采用Select一次选中所有卡让他们都进入ID状态,然后执行Fail或者Success进行碰撞找卡。
对于所有反回信号的解码CRC-16校验和正确的卡号进行状态切换DataExchange,让他们不再参与防碰撞。
同一感应区中的尽可能只参与一次防碰撞过程,这样就加快了防碰撞处理过程。
2. 防碰撞算法的改进
1) 改进后的卡片状态机及切换
增加一个卡片挂起态,卡片根据命令情况可以从该状态切换到其他任何状态,该状态下的卡,可以接受Restore,Read, Initialize相关命令。
只有从ID状态的卡才能切换到该状态。带*的为新增加的。
2)改进后新增加的命令
根据要求,需要增加的命令序列有Halt,Restore.使用这两个命令组合,卡片可以从ID状态切换到CardHalt状态,也可以从CardHalt状态切换到ID状态。利用该状态,方便确定并校对接收到的卡号的正确性。
l Halt:
处于ID状态的标签,接收到该命令后,与自己自己的卡号对照,一致则切换到CardHalt状态,并返回卡号。否则什么也不返回。
命令代码 = ‘1E’
成功应答:
l Restore:
处于CardHalt状态下的所有卡,当收到该命令后,自动返回到ID状态。此命令无返回信息。
Command Code = ‘1F’