I've been recently rewriting ISO 14443-3 anti-collision loop and found out that it is actually not correctly defined in the standard.
Example: two cards in the field will enter anti-collision loop:
card uid = AB CD EF GH IJ KL xx xx xx
(10 bytes/tripple size UID)
card uid = AB CD EF 88 GH IJ KL
(7 bytes/double size UID)
They will both get into anti-collision cascade level 2 where:
will transmit: UID CL2 = 88 GH IJ KL
- as 88
is the cascade tag indicating that its UID is longer
will transmit: UID CL2 = 88 GH IJ KL
- as its actual UID
=> no colision.
PCB will send SELECT and both cards will respond with the SAK where there will be a collision in bit2.
The ISO/IEC 14443-3 standard does not says anything about forbiding uid[3] to be 0x88
, only uid[0] is forbidden to be 0x88
.
Am I right or did I miss something? I know it is very low probability (1 : 2^56) that two such cards appear in the field at the same time. But nevertheless it is not correct (and the general director of the company I am working for will definitely come to look at what we are doing with two such cards in his wallet).
You obviously do not refer to the latest version of the ISO/IEC 14443-3 standard. This problem existed in the 2001 version of the standard and was corrected in Amendment 1 (in 2005) by adding the clause:
The value '88' of the cascade tag CT shall not be used for uid3 in double size UID.
I would expect (though I did not check) that this is also the case for the 2011 version of the standard.