|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 corball 于 2012-8-5 11:43 编辑
ISO14443 A的PCD编码非常复杂,编码速度从最初2000年的版本到2006年修订后的版本,支持了四种速度,编码/调制方式在高速PICC应答方面,A和B也实现了统一。为了迎接CPU卡非接触/银行卡(PBOC2.0和EMV2000)的到来,有必要全面理解ISO14443规范。
阅读器(PCD)的帧,从结构上来来讲,有短帧(REQA/WUPA)、标准帧(HALTA/SELECT等)、抗冲突帧(BYTE SPLIT/Bit SPLIT);从速度上讲,要支持106Kbps/212Kbps/424Kbps/847Kbps。
用序列X/Y/Z表示的一些帧如下:
1、REQA(0x26): SEQ - Z(SOC) Z X X Y Z X Y Z Y (EOC);
2、WUPA(0x52): SEQ - Z(SOC) Z X Y Z X Y X Y Y (EOC);
3、HLTA(0x50 0x00 0x57 0xCD):
数据表示: SOC 0000 1010 1 0000 0000 1 1110 1010 0 1011 0011 0 EOC
Z ZZZZ XYXY X YZZZ ZZZZ X XXXY XYXY Z XYXX YZXX Y ZY
4、Select (0x93 0x70 0x32 0x10 0xAB 0xCD 0x44):
数据表示: SOC 1100 1001 1 0000 1110 0 0100 1100 0 0000 1000 0 1101 0101 0 1011 0011 0 0010 0010 1 EOC
Z XXYZ XYZX X YZZZ XXXY Z ZXYZ XXYZ Z ZZZZ XYZZ Z XXYX YXYX Y XYXX YZXX Y ZZXY ZZXY X YY
5、Select (0x93 0x40 0x32 0x10 0xAB 0xCD 0x44):
^-- Split(Byte分裂的地方)
数据表示: SOC 1100 1001 1 0000 0010 0 0100 1100 0 0000 1000 0 1101 0101 0 1011 0011 0 0010 0010 1 EOC
Z XXYZ XYZX X YZZZ XXXY Z ZXYZ XXYZ Z ZZZZ XYZZ Z XXYX YXYX Y XYXX YZXX Y ZZXY ZZXY X YY
6、Select (0x93 0x25 0x32 0x10 0xAB 0xCD 0x44):
数据表示: SOC 1100 1001 1 1010 0100 0 0100 1100 0 0000 1000 0 1101 0101 0 1011 0011 0 0010 0010 1 EOC
Z XXYZ XYZX X XYXY ZXYZ Z ZXYZ XXYZ Z ZZZZ XYZZ Z XXYX YXYX Y XYXX YZXX Y ZZXY ZZXY X YY
^-- Split(Bit分裂的地方)
使用了两个状态机来完成设计:一个用于存储管理;另一个用于编码。
压缩文件是编码的参考波形。在相关的设计中,采用了本地缓存的办法:一次最多接收256个字节的发送数据,在完成接收后,自动根据速度和帧的特征(短帧/标准帧/抗冲突帧)进行编码和发送。对于短帧,设计自动限制本地缓存的指针为1,也就是仅最后一个字节有效,且只发送低7位;对于标准帧和抗冲突帧,奇校验自动生成,但是CRC需要以字节的方式,和指令、参数一起明文传输给本地缓存;对于抗冲突帧,完整字节的帧以标准帧发送,但是根据NVB的信息自动识别应发送的字节数;对于抗冲突帧存在字节分裂的,同样根据NVB的信息,自动拆分相关的字节;对于NVB=70的帧,按照Select指令的标准帧发送。设计使用了两个状态机(FSM):本地缓存数据保存(FSM_MEM)和编码器(FSM_ENCOD)来实现。
存储器状态机
编码期状态机
PCD_Wav.rar
(119.29 KB, 下载次数: 100 )
根据要求,把代码放在这里供参考。不过这个代码对产品来讲不太好,但是讲解ISO14443 A的编码还是很好的,仅供学习之用。
iso14443_pcd_a.rar
(5.93 KB, 下载次数: 116 )
|
|