搜索
bottom↓
回复: 22

AS3910操作14443A卡,ATS校验错误

[复制链接]

出0入0汤圆

发表于 2013-1-31 11:59:46 | 显示全部楼层 |阅读模式
用AS3910读写14443A的RFID卡:
操作流程如下:
。。。省略初始化。。。
PCD发送REQA命令
PCD收到ATQA内容是:04H 00H
PCD发送ANTI Collision命令:93H 20H
PCD收到UID:6EH 69H 0AH E0H EDH
PCD发送SELECT命令:93H 70H 6EH 69H 0AH E0H EDH
PCD收到ASK:08H
PCD发送RATS命令:E0H 21H
PCD触发CRC错误中断,FIFO中没有数据

现有下面几个问题:
①收到的ATQA为04H 00H,对比文档里面的说明,bit10是保留位,为什么会为1?bit4..0是冲突指示位,为什么我同事放两张卡在上面,那五位还是全部为0
②同样ASK为08H,bit3同样为保留位,为什么出现这种情况,到底是读取的数据出错还是什么其他的原因导致的
读取函数应该是没有问题的,读出来的UID带有异或校验,校验结果是对的
③为什么发送RATS命令接受到的数据会CRC错误?

麻烦做过相关项目的帮帮忙了,thanks

出0入0汤圆

 楼主| 发表于 2013-2-28 10:24:00 | 显示全部楼层
好吧,搞了整整一个月的时间终于用AS3910读写Mifare1卡成功。
因为Mifare是NXP专利,不公开读写算法,AS3910的Demo虽然也能读写MF1卡,但是因为专利问题也拿不到源码,甚至连资料都没有,只能通过网络上面的破解文档来分析加密流程。

回归上面的问题,不知道是我问的问题不明不白还是没人知道。。。我问过好几个问题都是没有一个人回答的。
MF1卡是14443A的卡,但是14443A没有定义如何读写卡片,只定义了如何读取UID并选中一张卡做操作,MF1在14443A基础上加入了自己的定义,所以就出现了返回值在14443A协议中找不到的情况,这些返回值可以在NXP官网上找到文档说明。我问题的两个问题在AN10833中定义。顺便把文档也发上来了

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2013-3-12 11:06:44 | 显示全部楼层
我把我参考的所有资料都发上来吧,源码就不发了。
假如有人和我一样蛋疼要用非NXP的芯片读写Mifare1的卡,可以参考一下附件里面的crapto1-2.gz文件。能把crypto.c里面的几个函数都看懂了,距离成功就不远了。
其实那东西一点都不难,关键是资料太少,而且全英文的。比较费力而已。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-3-13 09:17:26 | 显示全部楼层
楼主专业的 我用3911

出0入0汤圆

发表于 2013-5-10 15:04:19 | 显示全部楼层
bennyhuang 发表于 2013-2-28 10:24
好吧,搞了整整一个月的时间终于用AS3910读写Mifare1卡成功。
因为Mifare是NXP专利,不公开读写算法,AS391 ...

M1卡是逻辑卡吧,他只支持14443-3以前的协议,他是不支持-4协议的。也就是说他不会返回ATS。  你看下14443-协议吧。SAK值返回的数据告诉你了是否支持-4也就是说是不是会返回 ATS。

出0入0汤圆

发表于 2013-5-10 15:06:56 | 显示全部楼层
cbing2000 发表于 2013-5-4 22:48
我最近又幸接触到一些门锁的公司企业,他们大多用的都是M1卡,而NXP基本上是占有了门锁95%以上的市场。
...

M功能的逻辑卡比较简单,加密功能也比较强大,最只要是价格低,所以市场上用的比较多。  M1只能有1k的存储区,对于门禁系统完全足够。咱们的公交卡也是类似的逻辑卡。

出0入0汤圆

发表于 2014-3-28 22:56:48 | 显示全部楼层
感觉你的流程没问题
1.ATQA为04H 00H bit2显示冲突指示,按协议应开始做冲突检测,也就是继续发93 20.
2.ASK为08H,bit2为0显示UID complete,bit2为0显示UID complete,bit5为0显示PICC not compliant with ISO/IEC14443-4
3.因为2的缘故,你接下来要做HALT,因为这个卡已经不兼容14443-4,你需要按这张卡的协议做接下来的操作了

出0入0汤圆

发表于 2014-7-30 16:40:06 | 显示全部楼层
谢谢楼主分享经验啊!

出0入0汤圆

发表于 2014-8-16 05:54:32 | 显示全部楼层
朋友你好,我现在在做一个AS3910的读卡器作为本科的毕设,在编程上遇到了一些问题。
我是用的MSP430单片机+AS3910芯片,需要读取ISO14443A的卡片。我想知道单片机对AS3910发出REQA命令以后,收到的ATQA内容是从FIFO中读取的吗?然后怎么才能读到卡片中的UID内容?

如果可以的话请加我下QQ 691452813,不胜感激。

出0入0汤圆

 楼主| 发表于 2014-8-16 10:04:48 | 显示全部楼层
本帖最后由 bennyhuang 于 2014-8-16 10:10 编辑
jlysirius 发表于 2014-8-16 05:54
朋友你好,我现在在做一个AS3910的读卡器作为本科的毕设,在编程上遇到了一些问题。
我是用的MSP430单片机+ ...


ATQA和UID都是在FIFO里面读的
-------------------------------编辑完善一下------------------------------------
PCD发送REQA命令
PCD收到ATQA内容是:04H 00H
PCD发送ANTI Collision命令:93H 20H
PCD收到UID:6EH 69H 0AH E0H EDH

PCD发送SELECT命令:93H 70H 6EH 69H 0AH E0H EDH
PCD收到ASK:08H
PCD发送RATS命令:E0H 21H

发了ANTI Collision命令,要是只有一张卡,就会读到完整的UID,要是有多张卡的话接收到一部分UID,你的程序需要抗冲突

出0入0汤圆

发表于 2014-8-16 10:07:47 | 显示全部楼层
谢谢了。

发送REQA以后返回的是ATQA对吗?

那我应该发送什么命令去读到UID呢?我在Direct Command 里面没有找到ANTI Collision的命令。

出0入0汤圆

 楼主| 发表于 2014-8-16 10:29:40 | 显示全部楼层
jlysirius 发表于 2014-8-16 10:07
谢谢了。

发送REQA以后返回的是ATQA对吗?

anti-collision不是direct command来的

目测你对14443A协议不熟悉,建议你先把协议研读一遍再搞,现在的问题你都没办法自己解决,到后面的加密通讯估计你是没法子搞出来了,你现在还在大学,多的是时间钻研东西,你要学的是学习方法,而不是如何把一个东西做出来。
现在我直接告诉你答案,甚至直接把代码给你,你搞出来了,但是以后你工作了做的不是14443A,是别的协议的卡那怎么办?还是到论坛上面问别人?
你已经比我那时候做要容易多了,上面的帖子我已经整理好所有要参考的文档,你读完,理解了,就绝对能搞出来。我那时候光找到这堆文档都要花半个月时间。

出0入0汤圆

发表于 2014-8-16 10:29:54 | 显示全部楼层
那ANTI Collision 是发送直接命令还是对于特定的寄存器进行操作?

操作的是哪一个寄存器?

出0入0汤圆

 楼主| 发表于 2014-8-16 10:34:44 | 显示全部楼层
jlysirius 发表于 2014-8-16 10:29
那ANTI Collision 是发送直接命令还是对于特定的寄存器进行操作?

操作的是哪一个寄存器? ...

自己看,这种问题都问,要不要我帮你把程序全写完了?

出0入0汤圆

发表于 2014-8-16 10:46:01 | 显示全部楼层
首先不好意思,我发上一个帖子的时候还没有看到你的回复,所以发的问题正好是你回复的内容。

我对于ISO-14443A确实没有什么经验,但是我自己做了板子,程序自己也花了很大的功夫去编写,现在是UID的读取出现了问题。我不是跑来问你要代码的,首先我自己写了代码,第二你可以去看RFIDWorld网站看看,我注册的同样的ID,我把AS3910的源码都无常分享给了大家,我也没有说什么。我正是因为有疑问才来这里请教问题的。我也很感谢你前面对我的回答。

闻道有先后,术业有专攻。我觉得这里是一个交流的平台,希望大家可以平等的进行交流。

出0入0汤圆

 楼主| 发表于 2014-8-16 11:11:05 | 显示全部楼层
jlysirius 发表于 2014-8-16 10:46
首先不好意思,我发上一个帖子的时候还没有看到你的回复,所以发的问题正好是你回复的内容。

我对于ISO-14 ...

嗯,我语气是有点重,抱歉,主要是"学生"在论坛里面的形象不好。当然我个人是觉得不能一竿子打死全部人的。
所以看到有人明摆着资料不看,没完没了的问问题的,我就会觉得这个就是所谓的"学生党",给学生抹黑的。

再给你说一下吧,你要看ISO-14443A的协议,这个你不看,就别想着搞出来,后面还一大堆问题等着你。还有AS3910你也不熟,仔细看,不然你就不会问这种问题。
里面有说明Anti-Collision命令是啥东西,那个不是一个固定的命令,抗冲突过程中需要不停的改变命令的内容的。AS3910要往外发数据有3种方式,第一种direct command,例如发送REQA;第二种还是direct command,把要发送的数据放到FIFO里面,然后调用direct command发送FIFO里面的内容,anti-collision就是通过这种方式发出去的;第三种,transparent mode,通过外部IO引脚直接调制载波,把数据发出去,后面的加密通讯的时候就要用这种模式,因为加密通讯不是标准14443A协议里面的内容,要用外面的MCU处理协议。

别着急,我那时候从0开始,花了整整一个月才用AS3910成功读写mifare one。要是让你两三天把他搞出来,那不是显得我智商低!

出0入0汤圆

发表于 2014-8-16 11:25:25 | 显示全部楼层
bennyhuang 发表于 2014-8-16 11:11
嗯,我语气是有点重,抱歉,主要是"学生"在论坛里面的形象不好。当然我个人是觉得不能一竿子打死全部人的 ...

谢谢你的答复。
我想实现的功能是单个读,说白了就是一个简单的门禁系统的模型,单张卡读取成功,门打开。
我一开始看的是最原始版本datasheet的37页,上面说REQA的命令可以有由以下的多个步骤替代,
1. Send the direct command Clear
2. Define the number of transmitted bytes in the registers 0B and 0C
3. Write the bytes to be transmitted in the FIFO
4. Send the direct command Transmit with CRCor Transmit without CRC(whichever is appropriate)
5. When all the data is transmitted, an interrupt is sent to inform the microcontroller that the transmission is finished (INTR due to end of
transmission).

所以我就在想,如果只需要实现单张读,那一开始读到的FIFO里面的数据是不是就是卡片的UID? 看你上面的解答,单张卡片第一次读出来的依然是ATQA的内容。也就是说单张卡片还是需要一个ANTI Collision的过程。

出0入0汤圆

发表于 2014-8-16 11:34:36 | 显示全部楼层
顺便发一下读取FIFO的函数,单片机用的是MSP430。


//read FIFO in AS3910
//store return values in array as_FIFO[]

unsigned char as_fifo[32] = {0};

void Read_FIFO(void)
{
  unsigned char temp;
  SET_SPI_SEN;                //pull up SEN
  SET_SPI_TX_STATUS;          //software into sending state
  TXBUF0 = LOAD_FIFO;         //load command LOAD_FIFO
  while(SPI_TX_STATUS != 0);  //send

  for(temp=0;temp<FIFO_SIZE;temp++)
  {
    SET_SPI_RX_STATUS;          //software into receiving state
    TXBUF0 = 0x00;              //MCU continues to generate UCLK signal
    while(SPI_RX_STATUS != 0);  //receive
    as_fifo[temp] = RXBUF0;     //store return values
  }
  RESET_SPI_SEN;                //receive successfully, pull down SEN
}

出0入0汤圆

发表于 2014-9-20 04:56:20 | 显示全部楼层
朋友,我现在测试AS3910的板子,发现SPI通信里面没有数据,TX和RX结果都是0x00.

回复附件里是引脚映射,板子上电后,延迟0.5秒等待AS3910的启动,然后单片机控制AS3910的EN口高电平使芯片工作,接下来SPI的SEN口抬高进行SPI通讯,发现TXBUF0和RXBUF0都是空。

请问是不是我设置上有错误?还是遗漏了什么设置?

非常感谢你的帮助。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-9-20 04:57:47 | 显示全部楼层
补充一下MSP430使用了内部时钟800KHz,没有使用外部的32KHz的晶振。

出0入10汤圆

发表于 2014-10-7 23:50:14 | 显示全部楼层
本帖最后由 lklhzu 于 2014-10-7 23:51 编辑

请问楼主,在发送COS指令时,有没有遇到返回的数据长度大于64字节,造成RC522的FIFO溢出的情况?
对了,你用的AS3910,这个的FIFO是多大呢?

出0入0汤圆

发表于 2014-10-14 21:38:03 | 显示全部楼层
AS3910 32byte FIFO
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 07:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表