在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7506|回复: 17

[原创] ISO14443 A的PCD编码

[复制链接]
发表于 2012-5-19 00:29:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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 )
发表于 2012-7-10 11:16:59 | 显示全部楼层
支持一下
发表于 2012-7-10 11:24:24 | 显示全部楼层
编码在哪呢???
 楼主| 发表于 2012-7-11 13:52:29 | 显示全部楼层
该文主要讲编码方式,实现编码所用的状态机和波形图。如果需要示例代码(VerilogHDL),可以单独邮件发送。
发表于 2012-8-4 09:44:51 | 显示全部楼层
支持一下,最近也在学习ISO14443协议,楼主可否把verilog代码发送一下,谢谢
dtbks@qq.com
 楼主| 发表于 2012-8-5 11:45:22 | 显示全部楼层
回复 5# dtbks
代码贴上去了,偏重讲解ISO14443 A的编码,不太实用,供参考。
发表于 2013-4-8 15:52:45 | 显示全部楼层
讲的非常好,大侠是中科院的?
 楼主| 发表于 2013-4-9 09:52:08 | 显示全部楼层
英雄不问出身,兄弟在中科院工作,有何指教,敬请来信。
发表于 2013-10-11 14:05:04 | 显示全部楼层
楼主 在吗。。问一下。。你这编码是否有错误。。
你的最后结束标志EOF: "0" + Y , 共两个etu,如果在发送结束标志之前一个bit位是 logic '0',那么结束标志应该是“z + Y”,而不是单纯的"Y + Y"吧。。 microdsp@163.com求源码一看。。。
 楼主| 发表于 2013-10-13 08:38:30 | 显示全部楼层
ISO14443 A的PCD共有三个序列:X、Y和Z。EOF用“0”+序列Y表达,这里的“0”使用序列“Y”或者“Z”取决于EOF前的Bit是“0”还是“1”。
用于教学的PCD代码已经附在发文中。
用于智能卡集成电路开发的代码(Testbench)还需要能够调整Pause的宽度等,暂时未对外开放。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 14:59 , Processed in 0.027778 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表