标签归档:rc531

RC531使用链接方式读CPU卡数据

RC531的FIFO有64字节缓冲区,如果需要从CPU卡读的数据大于64字节,那么就需要采用链接方式。比如选择CPU卡的某个目录后,CPU卡会发送该目录的公共信息,共84个字节。这84个字节我们分成2块传输。设置读卡器能收到的1帧的最大长度是48字节。

下面是RATS命令介绍:

选择应答请求(RATS

clip_image002

使用RATS命令和PICC协商通讯的最大帧长度(FSD和FSC)、帧等待时间(FWT)和启动帧保护时间(SFGT)。

RATS命令使用带有CRC_A的标准帧进行传输

格式 开始字节+参数(FSDI和CID)(1个字节) +CRCA16

(1)开始字节 E0

参数高4位 FSDI,它用于编码FSD。FSD定义了PCD能收到的帧的最大长度。 一般为5,64字节

低4位 CID ,它定义编址了的PICC的逻辑号在0到14范围内。值15为RFU。

CID由PCD规定,并且对同一时刻处在ACTIVE状态中的所有PICC,它应是唯一的。

继续阅读

二代身份证读卡器开发小结

最近用RC531开发了一款可以同时读IC卡和身份证的读卡器。网上读IC卡的程序很多,没什么好介绍的。这里总结下读身份证要注意的几个问题。

我做的身份证读卡器只是读身份证的ID号,身份证的内部内容是无法读出的。

身份证读卡器的程序流程如下:

先发送0x05,0x00,0x00询卡命令后,身份证返回12字节卡类型代码,不同身份证返回的数据不一样。比如我对两个身份证发送询卡命令后分别返回

0x50 0x00 0x00 0x00 0x00 0xd1 0x03 0x86 0x0c 0x00 0x80 0x80

0x50 0x00 0x00 0x00 0x00 0xd1 0x03 0x86 0x07 0x00 0x80 0x90

询卡成功后,发送SELECT命令:0x1d 0x00 0x00 0x00 0x00 0x00 0x08 0x01 0x08 对二代身份证进行选卡操作。这时身份证返回的第一个字节应该等于SELECT命令的最后一个字节0x08,根据这个条件来判断SELECT命令是否操作成功。

最后发送GUID命令:0x00 0x36 0x00 0x00 0x08,身份证会返回10字节数据,其中前8字节就是身份证的唯一ID,后两字节是0x90 0x00。可以用后两字节来判断得到的是否是身份证ID。

要注意的是二代身份证是TYPEB卡,但是用TYPEB卡的HALT命令对它不起作用。把身份证放在读卡器上会一直读卡。这个问题只能用软件解决,比如在500ms内检测到同一个ID号,只输出一次韦根信号。

我在测试时发现,有时把身份证放在读卡器上,会读不到卡。但是程序是一直循环发送询卡命令,SELECT命令,GUID命令的。我分析原因应该是身份证内部芯片死机了。因为身份证内部电路是靠射频供电的,如果读卡器一直发送射频信号,当身份证内部芯片死机后,由于外部一直有射频信号,所以内部芯片一直有电压,芯片也一直维持死机状态,即使不断重新发送命令也无济于事。解决这个问题的办法就是在每次发送询卡命令,SELECT命令,GUID命令前,先关闭射频信号,延时20ms后再打开射频信号,再延时10ms,然后发送命令。关闭射频信号的目的是让身份证内部电路断电,重新发送射频信号后,让芯片复位。这样修改后每次都能读到ID号。

继续阅读