登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

mifare卡读写器开发心得『转』--整理重发贴

作者:xwj 栏目:单片机
mifare卡读写器开发心得『转』--整理重发贴
呵呵,别人的帖子,原主贴被删了,无法用BBS方式浏览,整理重新转发一下
确实太大,估计要分十几贴才能转完:-(

【侃单片机】:mifare卡读写器开发心得
发信人:jiangbo123 发表时间:2002-11-20 10:21:50
--------------------------------------------------------------------------------
坛子里好像越来越多的人对此产生了兴趣。
我最初的读卡器是用CM200开发的,硬件开发没有什么特别的,CM200内部带地址锁存,接口很方便,其它的按照datasheet照搬就行了。关键是天线板的设计,尺寸形状都会影响,而我觉得这些定了之后,设计的关键又是天线板上的电容电阻参数的选择,选择不对,大大的影响寻卡距离,甚至导致不能寻到卡。
datasheet上提供的操作距离可以达到2.5cm,后来我后来发消息实际上距离最远的可以达到4cm左右。软件的开发方面,如果能够得到PHILIPS的相关光盘,开发是非常容易的,因为它几乎提供了所有的函数源码,并且都是51的,几乎可以不做任何改动。CM200很稳定,可以放心的操作,不像RC500,容易损坏。  

发信人:jiangbo123 发表时间:2002-11-20 10:52:24
--------------------------------------------------------------------------------
RC500芯片支持最远10cm读写,但是你的天线也必须做得比较大。RC500最大的不爽就是它在操作不对时容易坏,特别是使用仿真器调试的老兄一定要注意,千万不要在对RC500进行操作的过程中设置断点,这种情况下非常容易损坏RC500,如果你原来调试好的程序突然不能用了,你不要反复的重试,先拿示波器看看RC500的tx1和tx2脚是不是还有波行输出,如果晶振有信号但是tx1和tx2没有输出,很不幸,你的RC500已经损坏,并且是不可修复的。另外一种情况是你的程序里有bug,在调试系统的其它模块时对RC500进行了误操作,这也非常容易损坏。所以我的经验是先调试好其它所有的模块再焊上RC500芯片。呵呵,每片可都是一百好几十大洋哟。

发信人:jiangbo123 发表时间:2002-11-20 11:18:51
--------------------------------------------------------------------------------
同样的,你也可以从PHILIPS公司获得该芯片的源码示例,并且提供51单片机和16位单片机的两种源码,但是这次提供的源码就没有CM200那次的爽了,绝大多数仍然是可以直接用的,但是有个别的地方需要修改,甚至有bug,而这些地方就足够你头痛的了,因为你根本不知道问题出在哪里,是你操作不对,还是程序有问题。首先出现问题最大的地方就是变量的定义的问题,在进行下载密码操作(loadkeyE2)时,实际上是将密码进行格式转换之后写到相应地址的EPROM中,最后调用的实际是WriteE2,这时候你要注意写进去地址的计算,我看到的是unsigned CHAR idata e2addr = 0x80 + sector * 0x18;这样你马上就会发现一旦扇区号超过5,计算的地址就会溢出,导致出错。类似情况好像还有,具体我不记得了。

发信人:修哥 发表时间:2002-11-20 11:23:07
--------------------------------------------------------------------------------
我们正准备采用RC500模块,天线自己设计,首先谢谢你的指点,另外在天线设计上能提供更详细的说明吗?

发信人:jiangbo123 发表时间:2002-11-20 11:24:11
--------------------------------------------------------------------------------
另外,在对RC500进行复位的时候原来有这样的语句:
while (((ReadRawIO(RegCommand) & 0x3F) != 0x3F) && !T2IR);
   // while reset sequence in progress
while ((ReadRawIO(RegCommand) & 0x3F) && !T2IR);
后来我反复试验发现经常在第一个while语句处出现超时错误(由于T2IR退出循环),于是我将第一个while去掉,一切ok,RC500也可以复位成功。不知道有没有老兄有不同的情况,欢迎交流。
发信人:jiangbo123 发表时间:2002-11-20 11:33:54
--------------------------------------------------------------------------------
总之,采用RC500开发读卡器,如果没能从PHILIPS公司获得源码,开发难度个人认为非常之大,因为你很难从datasheet中非常详细的了解每个操作的前前后后的细节,你也不知道应该在什么时候判断随时出现的那些错误,你不可能不停的监视错误寄存器。而如果你有了源码的话,你就是多费心调试了。而最痛苦的时你不单步执行就很难发现问题在哪里,而单步执行又很容易损坏芯片。我从开始到开发成功两款读卡设备(一个51系统的,一个龙珠系统的)一共坏了5块芯片,六七百大洋飞了。呵呵,各位要小心行事的好。

发信人:jiangbo123 发表时间:2002-11-20 11:42:53
--------------------------------------------------------------------------------
其实RC500CM200的天线设计的文档只有很小的区别,在文档的最后甚至都给出了PCB板的图,所以你只需依葫芦画瓢就可以了。而其实CM200的天线可以原封不动的用在RC500上,我的RC500的天线就是直接用的原来CM200的。一旦天线的pcb定了之后,电容电阻参数的选择就要费一点功夫了,我不懂RF,所以我的参数都是根据文档的原则然后一点点试出来的,文档里说到的计算电感等东东,我都没有搞(也不会搞,呵呵)。另外文档提到,天线板和主板之间有两种匹配方式,如果连线长度小于3cm,可以直接连接;如果长度大于3cm,好像要用什么同轴电缆,还什么50欧姆电阻匹配,我没有用过,也忘了。
RC500的接收电路按照文档来就可以了,上面电路图,参数都有。

发信人:修哥 发表时间:2002-11-20 14:30:40
--------------------------------------------------------------------------------
发信人:lvsejingdian 发表时间:2002-11-20 14:40:11
--------------------------------------------------------------------------------
请问:输出何种数据格式,如是维根码,如何读取?

发信人:zhugn 发表时间:2002-11-20 14:48:43
--------------------------------------------------------------------------------
发信人:jiangbo123 发表时间:2002-11-20 15:45:43
--------------------------------------------------------------------------------
支持mifare light卡,RC500支持所有mifare系列的甚至ISO14443A标准的卡,但是mifare light卡已经停产,它的容量太小,现在在简单应用上可以采用ultral light卡。

发信人:jiangbo123 发表时间:2002-11-20 15:49:17
--------------------------------------------------------------------------------
S70卡和mifare 1卡类似,仅仅是容量大了,共有49个扇区,并且33~49扇区每个扇区都有16块,最后一块是密码,其它块用户都可以保存数据。每块同样是16字节。

发信人:jiangbo123 发表时间:2002-11-20 16:04:41
--------------------------------------------------------------------------------
发现原来没人感兴趣。呵呵。

发信人:阳_xu 发表时间:2002-11-20 16:32:55
--------------------------------------------------------------------------------
发信人:修哥 发表时间:2002-11-21 11:20:18
------------------------------------------------------
2楼: >>参与讨论
xwj
2
发信人:yaoji104 发表时间:2002-12-16 16:24:49
--------------------------------------------------------------------------------
关于防冲突的几个问题:
1、bitFraming registerbit4 to bit6,当冲突发生在bit7时RxAlign=?(RxAlign不能=7。)
2、当发生冲突 SecondaryStatus registerbit0 to bit2表示的是有效接收位,这个值是否包括冲突位;及一个字节bit0 to bit7,在bit4位发生冲突,RxLastbits=4 还是=5。
3、CollPos register 这个值是否包含寄偶校验位。
小弟这里先谢谢各位了。

发信人:yaoji104 发表时间:2002-12-16 16:34:46
--------------------------------------------------------------------------------
关于防冲突的几个问题:
1、bitFraming registerbit4 to bit6,当冲突发生在bit7时RxAlign=?(RxAlign不能=7。)
2、当发生冲突 SecondaryStatus registerbit0 to bit2表示的是有效接收位,这个值是否包括冲突位;及一个字节bit0 to bit7,在bit4位发生冲突,RxLastbits=4 还是=5。
3、CollPos register 指示的冲突位是否包含寄偶校验位。
小弟先谢谢各位了。

发信人:srz 发表时间:2002-12-17 09:44:41
--------------------------------------------------------------------------------
我在FIFOdata中放入数据,command寄存器写入12H,然后读
CRCResultLSB和CRCResultMSB始终不变为何?

发信人:tpu 发表时间:2002-12-17 10:12:25
--------------------------------------------------------------------------------
1:RxAlign取决于你总共接收到的位数。比如你先收到5个位,然后又在第7位冲突,那么RxAlign=(5+7)%8=4;
2:我一般在冲突时不考虑RxLastbits,只考虑CollPos。
3:不包括。

发信人:srz 发表时间:2002-12-17 10:24:33
--------------------------------------------------------------------------------
你的理解有误:
bitFraming registerbit4 to bit6。
用于位方式帧的接收,RxAlign 定义了接收的第一个位存储到FIFO 的位置,更多的位存储到后面的位位置。

RxAlign 0 接收的最低位存在位0 接收的第二个位存在位1
RxAlign 1 接收的最低位存在位1 接收的第二个位存在位2
RxAlign 3 接收的最低位存在位3 接收的第二个位存在位4
RxAlign 7 未定义
在接收后RxAlign 自动清零,与防冲突无关。
当发生冲突 SecondaryStatus registerbit0 to bit2表示的是有效接收位,这个值包括冲突位;及一个字节bit0 to bit7,在bit4位发生冲突,RxLastbits=5。
3、CollPos register 指示的冲突位不包含寄偶校验位。
果在奇偶校验位检测到位冲突标志ParityErr 置位以指示一个奇偶校验错误。
发信人:yaoji104 发表时间:2002-12-17 10:58:31
--------------------------------------------------------------------------------
对二位大虾的无私帮助我非常感激,但我还是有点不清楚:当已经接收的位数是8的倍数(及8、16、24位),此时又在bit7位发生了冲突RxAlign应该=7,但是=7没定义。这时RxAlign应该=?。

发信人:brair 发表时间:2002-12-17 11:01:26
--------------------------------------------------------------------------------
我在执行while (ReadRawIO(RegCommand) & 0x3F) && !T2IR);时为什么总是出现超时错误,前面各位老兄说的方法我都试过了,还是不行,不知是什么原因,以前好象还执行成功过,但现在却一次都不会成功!谢谢!

发信人:yaoji104 发表时间:2002-12-17 11:11:21
--------------------------------------------------------------------------------
我觉得你该把定时器去了,你的目的是要它复位成功而进行下面的具体操作。我两条语句都用了是可以成功的。不过我是用汇编写的。

发信人:srz 发表时间:2002-12-17 11:20:11
--------------------------------------------------------------------------------
RxLastbits 返回最后接收到的字节的有效位的数目.
RxAlign 选择一个进入字节的位偏移.
你是不是二者混淆了?

发信人:brair 发表时间:2002-12-17 13:51:54
--------------------------------------------------------------------------------
首先谢谢yaoji104,我已经调通了复位阶段了,以前产生错误的原因是某些变量声明的存储类型有错误。
请问一下各位大虾,为什么我在调用函数时参数传递总是错误的呢?
例如,我在调用 PcdReadE2(8,4,Snr_RC500)时,在函数内部的第一个参数值为1028,第二个参数值为255,第三个参数值为00,不知是什么原因,请各位大虾指导啊!

发信人:srz 发表时间:2002-12-17 14:51:02
--------------------------------------------------------------------------------
如何启动CRC协处理器? 我在FIFOdata中放入数据,command寄存器写入12H,然后读CRCResultLSB和CRCResultMSB始终不变为何?
ChannelRedundancy写入13h(CRC8计算)也是一样。

发信人:yaoji104 发表时间:2002-12-17 15:02:08
--------------------------------------------------------------------------------
你是不是检测了E2Ready的有效性后才读的。

发信人:srz 发表时间:2002-12-17 15:16:48
--------------------------------------------------------------------------------
我是检测CRCReady为1则读

发信人:jiangbo123 发表时间:2002-12-17 16:14:26
--------------------------------------------------------------------------------
如果各位手头有CM200操作的源代码,可以和RC500的源代码对照着看,很多地方是大同小异的,可以给你不少的启发,达到事半功倍的效果!

发信人:jiangbo123 发表时间:2002-12-17 16:17:20
--------------------------------------------------------------------------------
采用汇编开发的朋友,你们也可以先从PHILIPS拿到c语言的源代码,然后对照c语言开发,将c语言“翻译”成汇编。这样同样可以大大的加快开发进度!起码不必再为某个寄存器的值应该写入多少而耗费几天的时间。

3楼: >>参与讨论
xwj
3
 发信人:gmcccode 发表时间:2002-12-30 18:22:02
--------------------------------------------------------------------------------
我见过PHILIPS89C51RD2单片机编写的TYPEB.html">TYPEB程序。代码如下:
#include <string.h>
#include <stdio.h>
#include <main.h>
#include <m500a.h>
#include <p89c51rx.h>
#include <Mfreg531.h>
#include <EvalOs.h>
#define LED    P3_5

unsigned CHAR ReadBuf[64];
unsigned CHAR nkey[6]={0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5};
//unsigned CHAR nkey[6]={0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
unsigned CHAR FWI=5;
unsigned CHAR BLK=0;
void init(void);
void Blink_LED(void);
CHAR TCL_Protocol(unsigned CHAR CID);
CHAR TCL_Protocol2(unsigned CHAR CID);
void delay_50us(unsigned int _50us);
CHAR CL_Deselect(unsigned CHAR CID);
CHAR CL_GetChallenge(unsigned CHAR CID, unsigned CHAR *Buf);
CHAR CL_SELECTFile(unsigned CHAR CID,
           unsigned CHAR P1,
           unsigned CHAR P2,
           unsigned CHAR *file,
           unsigned CHAR *Buf);
void PrepareValue (unsigned LONG VALUE, unsigned CHAR *buf);
void main(void)
{
    CHAR idata status,TEMP;
    unsigned CHAR i,atq[2],snr[10],sak,snr_len,TA;
    unsigned CHAR buffer[16],mfout=4,reg=0x3a,regVALUE=0x04;
    unsigned CHAR reg2=0x3d,regVALUE2=0x0,reg3,regVALUE3,regVALUE4=0X89;
        
    init();                  // Initialise SYSTEM
    status = M500PcdConfig();      // Initialise the RC500
                                    // must be call in the initialisation
        M500PcdMfOutSELECT(mfout);      // Route serial OUTPUT to pin, for TEST
    LED=0;
    delay_50us(10000.html">10000);
    LED=1;
    // LOADING KEYS
    for(i=0; i<16; i++)
    {
      M500PcdLoadMk(PICC_AUTHENT1A,i,nkey);      // load RAM
      //M500PcdLoadKeyE2(PICC_AUTHENT1A,i,nkey);      // load EEPROM
    }
        
    while(1)
    {
      //M500PcdRfReset(10);
      //delay_50us(1000);
      
      // IS014443B
      M500PcdConfigISOType(TYPEB);
      status = M531PiccRequestB(PICC_REQBWUP,0,0,ReadBuf); // ReqB with 1 slot
      if(status==MI_OK || status==MI_COLLERR)
      {
        if(status == MI_COLLERR) // more then 1 card
        {
          // Anti-collision by probabilistic    
          /*for(i=0; i<4; i++)  
          {
            status = M531PiccRequestB(PICC_REQBSTD,0,2,ReadBuf); // ReqB with 4 slots
        if(status==MI_OK) break;
          }
          if(status!=MI_OK) continue; //error occur
          FWI = ReadBuf[11]>>4; // Set the FWT according to the protocol info         
          status = M531PiccAttrib(&ReadBuf[1],0,0,0);     // SELECT PICC
              */

    
          // Anti-collision using slot-marker
          if((status=M531PiccRequestB(PICC_REQBSTD,0,2,ReadBuf)) != MI_OK) // ReqB with 4 slot
 
4楼: >>参与讨论
xwj
4
 发信人:jiangbo123 发表时间:2003-01-04 17:23:22
--------------------------------------------------------------------------------
如果卡操作完成之后调用到了halt函数,那么只要该卡没有离开天线的操作范围,用idle模式寻卡是寻不到这张卡的,但是用all模式却可以。而如果是该卡离开操作区后重新进入操作区,或者没有调用过halt函数,则idle模式和all模式则都可以寻到这张卡。所以一般公交卡收费肯定是采用idle模式寻卡,并且调用了halt函数,不然你卡里的钱迅速扣光光,呵呵。如果操作区内有2张卡,你不停的寻卡,会交替的寻卡两张卡中的一张,你可以选择其中之一进行操作。而这两张卡之间如果距离太近,或者卡离天线板太近,比如他们贴在一起,可能会导致寻卡失败。

发信人:jiangbo123 发表时间:2003-01-04 17:28:53
--------------------------------------------------------------------------------
我曾经遇到过这种情况,我卡放在天线上不动,寻卡函数一下子寻得到,一下子寻不到,并且是交替的,我不知道是怎么回事,后来我将寻卡函数调用了两次,如果第一次失败的话再调用一次,如果有一次成功返回成功,两次都失败则返回失败,这样就解决了这个问题。不知道大家有没有遇到过,如果知道的话解释一下。

发信人:jiangbo123 发表时间:2003-01-04 17:38:25
--------------------------------------------------------------------------------
其实PHILIPS提供的DEMO程序绝大部分应该是没有问题的,关键是每个人的硬件接口方式可能会不同。有很多朋友盯住很细节的东西,寄存器应该写入多少,往RC500写入一个命令返回什么才对等等,我觉得没有必要,上电复位后,依次读出所有寄存器的值,和datasheet里给出的上电初始值相比较,如果都是对的,再去调试其它部分的软件,如果这都不对的话,说明你的接口或者寻址方式都有问题,就没有必要去调试前其它的了。如果这个都对了的话,你要做的事就不多了,DEMO程序中的一些问题在前面的帖子里已经提出了一些,参照着修改一下,其它的函数不会大的修改。不知道我这样说的说法,那些已经开发成功的朋友是否赞同。欢迎交流!

发信人:jiangbo123 发表时间:2003-01-04 17:42:59
--------------------------------------------------------------------------------
希望我的帖子回复人数突破250大关,阅读次数突破3000大关。呵呵,不行的话,看哪天晚上比较有空,自己一个人完成这个任务:),哈哈。

发信人:lgxygcg 发表时间:2003-01-04 18:40:24
--------------------------------------------------------------------------------
里面有计算公式,用户只需提供线宽、圈数等数据。

发信人:lgxygcg 发表时间:2003-01-04 18:43:39
--------------------------------------------------------------------------------
开发时间离现在比较久了,记不清楚了。只记得后来问题是解决了。

发信人:lgxygcg 发表时间:2003-01-04 18:50:01
--------------------------------------------------------------------------------
我想对于RC500,我们只需了解他的工作机理,大致了解他的实现方法。对DEMO程序中不通的地方进行跟踪调试,与自己对datasheet的理解进行比较,应该就能调通。没必要什么都搞得清清楚楚。

发信人:jiangbo123 发表时间:2003-01-04 20:11:56
--------------------------------------------------------------------------------
对我发的帖子中的理解如果有不同的意见,欢迎提出来,大家讨论!

发信人:yiwujin 发表时间:2003-01-05 19:58:14
--------------------------------------------------------------------------------
发信人:stevenson 发表时间:2003-01-06 10:11:46
--------------------------------------------------------------------------------
产品如此感兴趣,作为PHILIPS的代理,更增加了我们的信心。看来我们的工作已初见成效,那几十封email没有白发,能为各位工程师们提供这样的交流平台我们感到很高兴。首先要感谢我们的斑竹jiangbo先生,以及各位研发工程师们的大力支持。希望这里的气温持续攀升,队伍更加庞大。
同时祝大家新年快乐!

发信人:StevenCH 发表时间:2003-01-06 11:55:24
--------------------------------------------------------------------------------
Hi,Jiangbo,
这里这里这么热闹,是不是考虑直接建立一个BBS?

发信人:wuyuehua 发表时间:2003-01-06 13:24:22
--------------------------------------------------------------------------------
   是否真的没有问题,DEMO中没有如下几个函数原型 1.memcpy()
2.ReadRawIO()   3.WriteRawIO();  特别是memcpy()函数,只看见调用,而不见声明,很费解,请各位帮忙。

发信人:jack_chen 发表时间:2003-01-06 13:30:34
--------------------------------------------------------------------------------
原函数定义如下
#include <string.h>
void *memcpy (void *dest,  /* destination buffer    */
              void *src,   /* source buffer         */
              int len);    /* maximum bytes to copy */
DESCRIPTION:
The memcpy function copies len bytes from src to dest. if these MEMORY buffers overlap, the memcpy function cannot guarantee that bytes in src are copied to dest before being overwritten. if these buffers do overlap, use the memmove function.
return VALUE:
The memcpy function returns dest.
Attributes:
reentrant
See Also:
memccpy, memchr, memcmp, memmove, memset
Example
#include <string.h>
#include <stdio.h>                      /* for printf */
void tst_memcpy (void)  {
  static CHAR src1 [100] =
  "Copy this string to DST1";
  static CHAR DST1 [100];
  CHAR *p;
  p = memcpy (DST1, src1, sizeof (DST1));
  printf ("dst = \"%s\"\n", p);
}
发信人:jack_chen 发表时间:
5楼: >>参与讨论
xwj
5

发信人:biolink 发表时间:2003-01-14 11:27:52
--------------------------------------------------------------------------------
条件:
所有扇区密码A都为 0xff,0xff,0xff,0xff,0xff,0xff.
复位,寻卡,碰撞,选卡已经成功
我还把 Mf500PiccAuthE2 改了一下:
{
unsigned SHORT e2addr = 0x80 + key_sector * 0x18;
unsigned CHAR *e2addrbuf; //= (unsigned CHAR*)&e2addr;
   
   // 如果密码B验证
   if (auth_mode == PICC_AUTHENT1B)
      e2addr += 12; // key B offset
   e2addrbuf[0] = e2addr & 0xff;
   e2addrbuf[1] = e2addr >> 8;
}

问题:
密码验证的结果是 chTempB = MI_KEYERR;
但我看到写入E2PROM之前 code_keys,startaddr都是对的。
怎么回事。  

chComdata[0] = 0xff;
chComdata[1] = 0xff;
chComdata[2] = 0xff;
chComdata[3] = 0xff;
chComdata[4] = 0xff;
chComdata[5] = 0xff;
Mf500PcdLoadKeyE2(PICC_AUTHENT1A,2,chComdata);
chTempB = Mf500PiccAuth(PICC_AUTHENT1A,2,8);
发信人:wuyuehua 发表时间:2003-01-14 12:50:50
--------------------------------------------------------------------------------
  MCM200中的request,selecttag等命令在RC500都有的,只是寄存器不同。

发信人:qishi00 发表时间:2003-01-15 10:35:54
--------------------------------------------------------------------------------
我想察看初始化后各个寄存器的值。
这样行不行?
for (i=0;i<64;i++)
{
   x = ReadIo(i);  
   Tx(i);         //发寄存器地址
   Tx(x);         //发寄存器值
}   
初始化时要对哪些寄存器进行初始化啊?
这样读出来的都是 0xFF 啊?
哪位大侠知道啊?

发信人:jiangbo123 发表时间:2003-01-15 13:08:38
--------------------------------------------------------------------------------
是不是你写入的密码没有经过转换,格式不对。密码必须有固定的格式。

发信人:wuyuehua 发表时间:2003-01-16 20:49:06
--------------------------------------------------------------------------------
各位大霞请帮忙分析一下:
   我在执行M500PiccRead时读不到数据,不知何故。我怀疑是前面的验证过程,想请教确认:验证过程的顺序是否如下(密码由FIFO中取)
1.先执行M500PiccAuth(),将格式化后的密钥12BYTE加载到密钥缓冲区
2.执行M500PiccAuthState(),发送AUTHENT1、AUTHENT2命令(执行完后CONTROL寄存器值也为0x08(已加密))
  还有一个问题,扇区号参数在以上函数中未见带入。
  有劳各位多多帮忙!
发信人:mcuduoduo 发表时间:2003-01-16 21:31:50
--------------------------------------------------------------------------------
头一次作IC卡,搞了多天了还是一头雾水,急问:
1。Request_std命令是不是只要写过了,RC500就会自动不停的发送请求,直到有卡进入天线范围?还是程序中要不断的发送这条命令直到有卡?
2、TX1,TX2应该是什么样的波形?我用示波器看得是正弦波。在RC500
发送请求时能观测到什么波形变化?为什么我发出RRANCEIVE命令后波形没有变化?
3。微控制器对RC500的中断应采用边沿还是电平触发方式?
4。RC500上电复位后,读出所有64个寄存器值,10~2F是手册上所讲的,但是所有的RFU虽然值相同但却不是0,而且每次上电读出的结果都不同,为什么?
大虾们小虾们救命啊!!

发信人:zhaiyu 发表时间:2003-01-17 11:45:24
--------------------------------------------------------------------------------
我的是:ZHAI_YU@21CN.COM

发信人:hb923 发表时间:2003-01-17 11:47:40
--------------------------------------------------------------------------------
发信人:wuyuehua 发表时间:2003-01-17 13:35:00
--------------------------------------------------------------------------------
   请问在AUTHENT执行过程中,扇区号是在哪一个函数中带入的

发信人:stevenson 发表时间:2003-01-17 17:02:00
--------------------------------------------------------------------------------
发信人:wuyuehua 发表时间:2003-01-18 18:00:44
--------------------------------------------------------------------------------
   执行PICC_WRITE命令,指定块号后,
请问: 准备写入该块的数据(16字节)是暂存放在什么地方?是在FIFO中吗?

发信人:flyfisher 发表时间:2003-01-18 19:40:20
--------------------------------------------------------------------------------
531这东西很好用,AB兼容,很好玩的! :)

发信人:biolink 发表时间:2003-01-20 12:17:34
--------------------------------------------------------------------------------
1、电路板问题,我复位成功后寻卡不成,而且是超时错误,我用示波器看TX1,TX2正常,但Rx信号振幅太小,于是借用样机的天线部分,进行到碰撞,正常,但密码验证老是返回MI_KEYERR,(这里源码也有点问题,下面再讨论),于是我全用样机电路调试,直到完成。
我的感觉是板(天线)一定要正确,否则出问题都不能用常理解释判断。调试过程由于板的问题让我有一种没撤的感觉,只是在那里凭经验和直觉做做做,就象大海捞针,繁啊,但心还不能烦。
2、源码的的修改,我改了3个地方。
   1)函数 PcdReset(void)  (jiangbo123前已说过)
       // jiangbo123建议,注释掉
       //while (((ReadRawRC(RegCommand) & 0x3F) != 0x3F) && !T3IR);
      // while reset sequence in progress
      while ((ReadRawRC(RegCommand) & 0x3F) && !T3IR);
   2)函数 Mf500PiccAuthE2()
      // 下面这句引起非法指针,编译器是"Keil 51"
      // 编译可以通过,但好象不分配内存
      //unsigned
6楼: >>参与讨论
xwj
6

发信人:qishi00 发表时间:2003-02-20 11:18:32
--------------------------------------------------------------------------------
各位大侠:
    本人在设置卡密码时遇到下列情况:
存储控制,另c1x c2x c3x =110
           c1x3 c2x3 c3x3 =011
拼出来的存储控制是 08 77 8f 69 ,第四字节好像没用,是我随便写的
A密码我设置成 aa aa aa aa aa aa,B密码设置成 bb bb bb bb bb bb
结果A密码可以验证通过,并且可以进行读卡以及减值操作。
但是B密码就一直验证不通过。
所以我用缺省的存储控制: FF 07 80 69 ,此时密码B可读,目的是想看读出的是否跟写进去的是否一致。
结果,读出来的B密码是 BB BB BB BB BB B5,
有哪位知道是什么问题吗?
     

发信人:qishi00 发表时间:2003-02-20 11:28:11
--------------------------------------------------------------------------------
然后我回过头用bb bb bb bb bb b5的密码去验证之前B密码不可读的块,则又验证不通过。

发信人:baysky 发表时间:2003-02-20 14:37:57
--------------------------------------------------------------------------------
不知道有谁用过 PHILIPS RF632, 用SAM认证,不知道怎么写程序,哪位大侠能指点一下吗? 项目需要

发信人:tony0418 发表时间:2003-02-21 10:42:35
--------------------------------------------------------------------------------
   我最近测试北京握奇公司的timecos卡,有他们提供的源程序,但是测试结果不理想,请教老手指点一下读写要注意的问题,如果有测试过的 源程序就更好,谢谢!!!

发信人:hjmc 发表时间:2003-02-21 11:17:06
--------------------------------------------------------------------------------
可是哪里有13.56M晶振?
我使用13.5M根本不读卡,
市面上又没有13.56M卖?

发信人:cxshj 发表时间:2003-02-21 12:12:04
--------------------------------------------------------------------------------
不知是什么原理

发信人:StevenCh 发表时间:2003-02-21 17:32:52
--------------------------------------------------------------------------------
作为PHILIPS,我们欢迎大家开发MF RC500,其实我们的资料在网站很容易下载,而且经过我们不断的PUSH,很多以前需要密码的资料现在已经公开。如果大家需要带密码的文档,那需要签订NDA,手续很简单,请大家和我联系。
谢谢大家!
下载资料网站:http://www.semiconductors.com/markets/identification/customer/download/

发信人:StevenCh 发表时间:2003-02-21 17:35:24
--------------------------------------------------------------------------------
作为PHILIPS,我们欢迎大家开发MF RC500,其实我们的资料在网站很容易下载,而且经过我们不断的PUSH,很多以前需要密码的资料现在已经公开。如果大家需要带密码的文档,那需要签订NDA,手续很简单,请大家和我联系。
谢谢大家!
下载资料网站:http://www.semiconductors.com/markets/identification/customer/download/

发信人:tpu 发表时间:2003-02-21 17:40:34
--------------------------------------------------------------------------------
我有一个模块,用一个PIC单片机加上外围电路,可以读TYPEATYPEB的,以及ISO-15693卡。老外作的。

发信人:StevenCh 发表时间:2003-02-21 17:40:36
--------------------------------------------------------------------------------
PHILIPS确实有Light卡,但现在已经基本停产,Ultra Light是新的替代产品。
Handf如果感兴趣,可以和我联系,我提供你资料

发信人:zbs9013 发表时间:2003-02-24 17:06:26
--------------------------------------------------------------------------------
我咨询过华虹的工程师,好象不行,虽然都符合ISO14443标准,但是因为内部的加密算法不一样,而且该部分没有对用户的相应接口,所以无法统一。

发信人:fmc 发表时间:2003-02-25 08:42:22
--------------------------------------------------------------------------------
请教开发过RC500的前辈,你们从代理那里拿到的程序编译能通过吗!要做些什么修改??我是在伟福里编译的,提示有错误:SPACE ADDRESS OVERLOW,还有volatile是定义什么变量用的,谢谢!

发信人:handf 发表时间:2003-02-25 11:49:13
--------------------------------------------------------------------------------
发信人:handf 发表时间:2003-02-25 11:54:01
--------------------------------------------------------------------------------
不好意思现在才看到,刚才手误。有客户在用light卡,为了能更好的做支持,所以也希望能够对这方面做一些测试。如果可以的话可将相关文档发到我的邮箱里,您是上海飞利浦的steven chang吧。
我的邮箱:handf@start.com.cn,非常感谢!

发信人:yaoji104 发表时间:2003-02-25 18:08:21
--------------------------------------------------------------------------------
DEMO的程序: 函数M500piccvlue 中的参数定义了一个 uCHAR的指针,这个指针指向了一个4字节的数组。这4 bytes是何意义?增加量、减少量还是另有其他意思。谢谢

发信人:jiangbo123 发表时间:2003-02-26 09:14:49
--------------------------------------------------------------------------------
要注意的是好像只有低31bit参加运算,最高bit无效。

发信人:yaoji104 发表时间:2003-02-26 09:25:06
--------------------------------------------------------------------------------
只有低31个bits参加运算,最高位无效--不懂??
还有这个函数的计算结果只能存在card`s internal register,not EEPROM。用什么方法把结果写进EEPROM呢。?

发信人:jiangbo123 发表时间:2003-02-26 09:38:15
--------------------------------------------------------------------------------
用transfer和restore实现registerEEPROM之间的数据传递。

发信人:StevenCH 发表时间:2003-02-26 10:12:13
--------------------------------------------------------------------------------
你说的完全正确,其实ISO/IEC 14443 A PART 3只定义了从REQUEST到SELECT指令,AUTHENTICATION,READ,WRITE,DEC,INC,RESTORE,TRANSFER等都是APPLICATION端的应用。
华虹和MIFARE应该在AUTHENTICATION有差别,加密算法也是有国际标准的,但具体实
7楼: >>参与讨论
xwj
7

发信人:srz 发表时间:2003-04-15 14:03:04
--------------------------------------------------------------------------------
一张卡用读卡器读数据为
b00:620C66F7FF88040046D4EE0532363A31
B01:000000000000000000000000000000000
B02:000000000000000000000000000000000
B03:000000000000FF078069FFFFFFFFFFFF
可为何我用RC500密码B始终校验不过?用密码A已经通过(6字节FF)。
用密码B时除了命令码改为PICC_AUTHENT1b还有没有要更改的?

发信人:qgque 发表时间:2003-04-15 14:33:47
--------------------------------------------------------------------------------
RC500程序里有个基地址ini,请问这个基地址怎么确定?基地址确定之后,RC500芯片64个寄存器的绝对地址就是基地址+寄存器地址吗?
这里的问题好像回复比较慢,是不是大家都很忙还是认为问题太简单初级而不愿意回答?

发信人:qgque 发表时间:2003-04-15 16:06:57
--------------------------------------------------------------------------------
像Mifare卡的各种命令如标准请求、全请求,读、写等他们的16进制代码是多少?在哪个文档里面有?因为文档比较多,目前还没有看完全部文档就开始看程序了,不过我查了与S50有关的文档都没有,还有就是一些错误代码又在什么地方可以找到?这些应该都是PHILIPS规定的吧。

发信人:qgque 发表时间:2003-04-15 16:31:54
--------------------------------------------------------------------------------
RC500程序里有个基地址ini,请问各位这个基地址怎么确定?RC500的64个寄存器绝对地址是不是就是基地址+寄存器自己地址?谢谢!

发信人:cwcyxy 发表时间:2003-04-16 08:31:49
--------------------------------------------------------------------------------
2、是。

发信人:cwcyxy 发表时间:2003-04-16 08:33:59
--------------------------------------------------------------------------------
密钥b的使用需要更改访问条件,就是中间的四个字节。
看看相关的手册吧。

发信人:qgque 发表时间:2003-04-16 09:08:49
--------------------------------------------------------------------------------
谢谢cwcyxy。还想请教几个问题:
1。Mifare卡的各种命令(如标准询卡,全部询卡,读,写,加、减等),他们的代码是PHILIPS定义的吗?在哪个文档里面有?
2。MFIN和MFOUT管脚是不是在两个读卡器通信的时候才有用?假如我现在只有一个读卡器对卡进行操作,是不是这两个管脚就没用了?两个读卡器通信时两个管脚是物理连接在一起还是通过射频方式?
3。AUX管脚有什么作用?
再次谢谢!

发信人:qgque 发表时间:2003-04-16 09:15:46
--------------------------------------------------------------------------------
谢谢cwcyxy!还有几个问题请教:
1、MFIN和MFOUT引脚是不是只用于两个读写器之间的通信?假如我现在只有一个读写器对卡进行操作,那么MFIN和MFOUT引脚是不是没用?两个读写器通信是两个引脚是物理连接在一起还是通过射频方式?
2、AUX引脚有什么作用?

发信人:qgque 发表时间:2003-04-16 09:44:07
--------------------------------------------------------------------------------
PHILIPS提供的RC500程序是不是基于p89c51rx系列mcu的?

发信人:qgque 发表时间:2003-04-16 09:50:31
--------------------------------------------------------------------------------
在下面程序中:
#define GetRegPage(addr) (0x80|(addr>>3))
宏GetRegPage(addr)取得寄存器的页号,根据RC500资料应该返回0~7;那就应该是:
#define GetRegPage(addr) (0x00|(addr>>3))
但为什么是0x80呢?

发信人:qgque 发表时间:2003-04-16 10:00:56
--------------------------------------------------------------------------------
PHILIPS提供的程序中,宏SEC_NO_MICORE代表什么意思?还有接下来的WriteIOBlock()和ReadIOBlock()两个函数实现什么功能?

发信人:qgque 发表时间:2003-04-16 10:06:11
--------------------------------------------------------------------------------
你说的基地址就是RC500的片选地址,根据程序,RC500的片选引脚与P1_0相连,那它的的地址应该不是0x7f00啊?

发信人:cwcyxy 发表时间:2003-04-16 11:11:18
--------------------------------------------------------------------------------
mifare1的命令:
//mifare card  command
#define     PICC_REQSTD           0x26            
#define     PICC_REQALL           0x52            
#define     PICC_ANTICOLL1        0x93            
#define     PICC_ANTICOLL2        0x95            
#define     PICC_ANTICOLL3        0x97            
#define     PICC_AUTHENT1A        0x60            
#define     PICC_AUTHENT1B        0x61            
#define     PICC_READ             0x30            
#define     PICC_WRITE            0xA0            
#define     PICC_DECREMENT        0xC0             
#define     PICC_INCREMENT        0xC1             
#define     PICC_RESTORE          0xC2             
#define&n
8楼: >>参与讨论
xwj
8

发信人:mcugirl 发表时间:2003-04-28 11:16:09
--------------------------------------------------------------------------------
网上的好多朋友让我用RC500,但我现在是做毕业设计,系统所用的芯片早已经由导师定下了,我所做的工作只是连接一下电路和写程序。      恳请大家帮帮忙,能够给我程序做参考,汇编和C的都可以。可以直接在论坛上贴出来,发邮件给我也可以,我的邮箱snow--0731@sohu.com   谢谢大家的帮助。

发信人:cwcyxy 发表时间:2003-04-28 11:44:54
--------------------------------------------------------------------------------
// STACON
#define _DV                     0x80
#define _TE                     0x40
#define _PE                     0x20
#define _CE                     0x10
#define _BE                     0x08
#define _AE                     0x04
#define _SOR                    0x80
#define _RFS                    0x40
#define _MI1                    0x04
#define _NRF                    0x02
#define _AC                     0x01
// ENABLE
#define _PEN                    0x80
#define _PRE                    0x40
#define _CEN                    0x20
#define _CRE                    0x10
// KEYADR
#define _AUTH                   0x80
#define _LOAD                   0x00
#define _KEYB                   0x40
#define _KEYA                   0x00
// Error codes
#define OK                      0
#define W_NOCARD                5
#define W_NOTAG                 1
#define W_CRC                   2
#define W_EMPTY                 3
#define W_AUTH                  4
#define W_PARITY                5
#define W_code                  6
#define W_SERNR                 8
#define W_NOTAUTH               10
#define W_bitCNT                11
#define W_BYTECNT               12
#define W_TRANS                 14
#define W_WRITE                 15
#define W_INCR                  16
#define W_DECR                  17
#define W_READ                  18
#define W_NO_VCC        06
#define W_ICC_Type_Error        12
#define QUIT                    30
//HARDWARE Addresses
#define PBYTE ((unsigned CHAR volatile *) 0x30000L)
//#define PBYTE ((unsigned CHAR volatile pdata *)0)
#define MCM_data      PBYTE[0x00]
#define MCM_STACON    PBYTE[0x01]
#define MCM_ENABLE    PBYTE[0x02]
#define MCM_BCNTS     PBYTE
9楼: >>参与讨论
xwj
9
 发信人:cwcyxy 发表时间:2003-05-12 08:57:05
--------------------------------------------------------------------------------

#define OSC_FREQ                22118400L
                //*note: when using the 8051RD2 (in 6 clk instructiion cycle,
                //        use a CRYSTAL that is half the VALUE state in OSC_FREQ.
                //      Example: for OSC_FREQ=22118400, use 11059000 CRYSTAL.
#define BAUD_CNT                 7
#define    BAUD_115200                256 - (OSC_FREQ/192L)/115200L    // 255
#define    BAUD_57600                256 - (OSC_FREQ/192L)/57600L    // 254
#define    BAUD_38400                256 - (OSC_FREQ/192L)/38400L    // 253
#define    BAUD_28800                256 - (OSC_FREQ/192L)/28800L    // 252
#define    BAUD_19200                256 - (OSC_FREQ/192L)/19200L    // 250
#define    BAUD_14400                256 - (OSC_FREQ/192L)/14400L    // 248
#define    BAUD_9600                256 - (OSC_FREQ/192L)/9600L    // 244
#ifdef __SRC
uCHAR code BaudRateTable[BAUD_CNT] = {
                               BAUD_115200,
                               BAUD_57600,
                               BAUD_38400,
                               BAUD_28800,
                               BAUD_19200,
                               BAUD_14400,
                               BAUD_9600
                      };
#else
extern uCHAR code BaudRateTable[BAUD_CNT];
#endif
#ifdef __SRC
uint code CmpTable[BAUD_CNT + 1]   = {
                              0x078,
                              0x095,
                              0x129,
                              0x1BD,
                              0x252,
                              0x37A,
                              0x4A3,
                              0x6F4
                      };
#else
extern uint code CmpTable[BAUD_CNT + 1];
#endif
void     auto_baud (void)
{
  if (autoBaud && !RXD)    // if autobaud is enable and RXD pin is low
  {
    TR0 = TRUE;     // Start timer0
    do
    {
      if (RXD)        // When RXD pin is high
      {
        Capt_L = TL0;
        Capt_H = TH0;
        do
     
10楼: >>参与讨论
xwj
10
发信人:xlfdan 发表时间:2003-06-19 20:57:38
--------------------------------------------------------------------------------
请看下面的PHILIPS版权声明,在它的RC500读写软件的开头的地方,
我们贴这些软件违法吗?他们会找我们的麻烦吗?
请回答????
/////////////////////////////////////////////////////////////////////
//    COPYRIGHT (c), PHILIPS Semiconductors Gratkorn
//
//                  (C)PHILIPS ELECTRONICS N.V.2000
//       All rights are reserved. Reproduction in whole or in PART is
//      prohibited without the written consent of the COPYRIGHT owner.
//  PHILIPS reserves the right to make changes without notice at any time.
// PHILIPS makes no warranty, expressed, implied or statutory, including but
// not limited to any implied warranty of merchantibility or fitness for any
//PARTicular purpose, or that the use will not infringe any third PARTy patent,
// COPYRIGHT or trademark. PHILIPS must not be liable for any loss or damage
//                          arising from its use.
/////////////////////////////////////////////////////////////////////

发信人:mgl_mcu 发表时间:2003-06-20 09:05:32
--------------------------------------------------------------------------------
U2270B和单片机连接,请问单片机的一个I/O口控制BC846(NPN)三极管,单片机输出的是什么信号?是置高的控制信号呢?还是输出125KHZ的方波信号,请各位大虾指点迷津,谢谢!!

发信人:jiangbo123 发表时间:2003-06-20 17:37:24
--------------------------------------------------------------------------------
我从来没有说过块值不能当普通数据读出呀,只是说卡里寄存器的值不能直接读出,卡里面所有扇区(sector)的所有块(block)里面的数据都是读出的,我想你错误的理解了,下面是我的原话:
你不熟悉所谓钱包到底是什么?
其实所谓钱包就是常说的块值操作,这个每个公司可能叫法不一,其实就是数据在块里的一种特殊的存储格式,这个我在以前的帖子已经讲过。寄存器的值不能直接读出,而只能通过transfer和restore实现和块之间的数据传递。电子钱包块数据全部为0,其实就是说明改块没有进行初始化,没有按照上面提到的特殊存储格式保存数据。因为如果钱包里余额为0时,块里面的数据应该如下(每两位表示一个16进制数):
00000000ffffffff00000000xxyyxxyy
其中xx表示该块的地址,yy是xx的反码

发信人:cwcyxy 发表时间:2003-06-20 17:37:34
--------------------------------------------------------------------------------
发信人:jiangbo123 发表时间:2003-06-20 17:38:27
--------------------------------------------------------------------------------
你的type 卡读写搞定了吗?

发信人:yzrui 发表时间:2003-06-20 17:45:55
--------------------------------------------------------------------------------
写FIFO的操作可以在中断函数外完成

发信人:xlfdan 发表时间:2003-06-20 19:36:09
--------------------------------------------------------------------------------
发信人:cwcyxy 发表时间:2003-06-20 19:47:25
--------------------------------------------------------------------------------
于去年搞定了,用的是RC531
只是无市场,没有深入研究,今天看了看。

发信人:xlfdan 发表时间:2003-06-20 21:51:46
--------------------------------------------------------------------------------
发信人:hyeena 发表时间:2003-06-23 11:58:07
--------------------------------------------------------------------------------
我在这253了!!!!!!!!!!

发信人:try it 发表时间:2003-06-23 12:07:48
--------------------------------------------------------------------------------
我用89C52CM200模块进行读写,在发request命令后我读stacon的值却总是为零,
好象模块根本就没有工作一样.我是完全按照data_sheet上做的,真不知是什么原因.请指
教!!!!!
发信人:chaplinxu 发表时间:2003-06-23 17:16:02
--------------------------------------------------------------------------------
发信人:chaplinxu 发表时间:2003-06-23 17:16:51
--------------------------------------------------------------------------------
发信人:竹香子 发表时间:2003-06-25 10:47:54
--------------------------------------------------------------------------------
同上。

发信人:竹香子 发表时间:2003-06-25 14:31:55
--------------------------------------------------------------------------------
同上。
发信人:竹香子 发表时间:2003-06-25 14:34:38
--------------------------------------------------------------------------------
jiangbo123:
      您好!
问题:      
      在对卡进行安全认证时,当被认证的密码与卡的密码不对时,该M500PiccAuth()也返回true,而真正的密码功能在下面进一步的操作中才起作用,如:read(),write()中:即密码对时可读写,错时不可读写。
//函数调用如下:
    unsigned CHAR xdata i;
    unsigned LONG xdata lCardID;
    unsigned CHAR xdata key[6]={0x11,0xff,0xff,0xff,0xff,0xff};
    for(i=0; i<8; i++)
        if (MIF_Poll(0x52))
          &nbs
11楼: >>参与讨论
xwj
11
发信人:myron 发表时间:2003-07-10 16:34:40
--------------------------------------------------------------------------------
大虾们帮个忙,我现在正在用531,做清华同方的type b卡,但是寻卡距离很低,request anticoll后都能在7cm左右返回,但是往下走流程,在进行扣款时,距离降低很多,只有2-3cm,不知什么原因

发信人:myron 发表时间:2003-07-10 17:17:15
--------------------------------------------------------------------------------
request anticoll时距离还是可以的在7cm左右,但是进行扣款距离就大大下降只有2-3cm,这是为什么,难道不同的命令间,卡消耗的载波能量不同吗?当扣款时,需要加大发射功率,但是我在531的tx1输出后加了一级功放,用示波器观察,波形没有失真,振幅也有很大提高,但是还是读不了卡,是不是这是回收电路又有问题,我现在搞不清楚了,我有很多关于回收电路内的问题,iso14443的回收原理是什么,531中的bitphase,minlevel,collevel,都是干什么用的,i-clock,q-clock是起什么作用的,当531上电后,不刷卡,在rx,Vmid脚都会有一个方波,不只能否给于解释一下。再有好像m1卡要比cpu卡的刷卡距离高些,是这样吗?
                                             

发信人:myron 发表时间:2003-07-10 17:31:11
--------------------------------------------------------------------------------
发信人:myron 发表时间:2003-07-10 17:34:07
--------------------------------------------------------------------------------
steven,我是大连现代公司的,有些问题想电话和您聊聊,但是打过几次您都不再,能否再将电话号码相告,我好与您联系

发信人:ZYB2002 发表时间:2003-07-10 18:46:54
--------------------------------------------------------------------------------
谁可以告诉我申请CM200资料的程序?要什麽资格?
我填过菲利莆主页上的申请,没有成功。
另外我手上有些可用的程序,只是不完善,谁有这方面的官方资料,大家交流一下可好?

发信人:LIXU 发表时间:2003-07-11 00:07:46
--------------------------------------------------------------------------------
大家好:
     怎么大家没人用MCM SB600的读写器,它的性能要比RC500要优越许多,CM200,RC500,MCMSB600他们的差别主要在哪里?望得到大家的帮助?
     谢谢!!!  

发信人:jiangbo123 发表时间:2003-07-11 08:44:03
--------------------------------------------------------------------------------
CM200开发方便,成本高,操作距离短,RC500开发稍难,成本低,距离远。
MCMSB600就不知道了,哪位知道的大侠说说吧。

发信人:zyb2002 发表时间:2003-07-11 08:57:39
--------------------------------------------------------------------------------
SB是联视公司开发的与非力莆兼容模块,买的专利。

发信人:irenehan 发表时间:2003-07-11 09:07:06
--------------------------------------------------------------------------------
我访问RC531的寄存器是用下面这种方式实现的
#define     Rc500_Addr            0x60060000
#define     RegPage               ((unsigned CHAR *)(Rc500_Addr+0x00))
    .
    .
    .
*RegPage=0x80;
我要将其编译进uclinux的内核(此程序在无linux的arm7上跑起来没问题)可是,
将其编译内核,在应用中调用pcdconfig时就出错
Internal error: Vector exception: 5000000
CPU: 0
pc : [<02265698>]
lr : [<022656b4>]
sp : 025dbf08  ip : 025dbf18  fp : 025dbf14
r10: 025d49e8  r9 : 025dbfb8  r8 : 00000005
r7 : 00000000  r6 : 023ab4c8  r5 : 00000000  r4 : 023e2ccc
r3 : 60060000  r2 : 00000000  r1 : 0000000a  r0 : 00000080
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32
PROCESS mifare1 (pid: 18, stackpage=025db000)
Stack: 025dbf08 invalid kernel stack pointer
Backtrace: invalid frame pointer
code: e20000ff e2800080 e5c30000 e91ba800 e1a0c00d
pid 18: failed 11
你碰到过吗?是什么原因呢?
发信人:liping_88 发表时间:2003-07-11 09:33:21
--------------------------------------------------------------------------------
发信人:jiangbo123 发表时间:2003-07-11 10:37:40
--------------------------------------------------------------------------------
发信人:jiangbo123 发表时间:2003-07-11 10:46:55
--------------------------------------------------------------------------------
我在龙珠的linux下是这样用的,没有任何问题。
#define Base_Addr  0x10100000
void WriteRawRC(unsigned CHAR RegAddr ,unsigned CHAR VALUE){
    *(unsigned CHAR *)(Base_Addr  + RegAddr) = VALUE;
}
CHAR ReadRawRC(unsigned CHAR addr){
    CHAR tmp;
    tmp = *(unsigned CHAR *)(Base_Addr + RegAddr);
    return tmp;
}
最关键的是最底层的寄存器读写,这个搞定了,加上原来调试好的上层协议,一切都ok了。

发信人:hyeena 发表时间:2003-07-14 11:18:02
--------------------------------------------------------------------------------
我是用汇编在做的,用的是查询ReginterruptRq的方式来判断命令执行情况,现在的问题是我不知道做Anticollision应该是怎样的步骤,请大家帮个忙吧!

发信人:慕尼黑1860 发表时间:2003-07-14 11:42:31
--------------------------------------------------------------------------------
而且没有盲区,读得是maifare one 的标准卡

发信人:hyeena 发表时间:2003-07-14 16:25:34
--------------------------------------------------------------------------------
12楼: >>参与讨论
xwj
12
发信人:cxshj 发表时间:2003-08-22 13:03:39
--------------------------------------------------------------------------------
已看了你前面的帖子,我的EEPROM中第1块和第2块数据没有被修改,RFU值也没有被修改!!!
菲利普的提示如下:供后来者参考
1. don't change RFU-bits!
2. don't interrupt WriteE2 command!
3. don't exceed the AC and DC-limits, that are given in the datasheet!
Regarding the nr 3:
a) Make sure, that the load impedance of the antenna including the
EMC-filter does not go below 30 Ohms, i.e. if the MF RC500 "sees" a load
of 25 Ohms /Tx Pin or less, it could be damaged. (The maximum OUTPUT
current of Itx = 200MA @ 5V is specified in the datasheet.)
This could happen, if the series resonance of the antenna is very CLOSE to
the 13.56 MHz: in this case a METAL PLATE or any other environmental
influence detunes the antenna and tunes the low impedance series resonance
to 13.56 MHz.
b) Please make sure, that the hw doesn't exceed the supply voltage limits
as given in the datasheet. This was the problem with some simulators, but
the same could of course happen with a general controller hw.

发信人:irenehan 发表时间:2003-08-25 12:04:03
--------------------------------------------------------------------------------
我看了看你以前的贴子,你用龙珠对531操作时是用的查询方式,
你用起来怎么样,稳定吗?
我现在对PSAM卡的操作不知道为什么发给它5个字节的命令,它总没有
回应,加上两个字节后,返回62,8E.我是用串口对PSAM卡操作的。WRITE指令
用超级终端测试了一下(向超级终端发送数据,将超级终端设为38400偶校验)
没问题,可能会是什么原因呢?

发信人:irenehan 发表时间:2003-08-25 12:15:12
--------------------------------------------------------------------------------
你遇到过这种情况吗:程序开始运行时好用,运行一段时间后就没反应了,
必须重新复位531才能好用:(

发信人:jiangbo123 发表时间:2003-08-26 09:45:43
--------------------------------------------------------------------------------
发信人:irenehan 发表时间:2003-08-26 10:48:57
--------------------------------------------------------------------------------
我现在不知道为什么,程序跑一段时间后(很短),就在也寻不到卡了,总是超时退出。怎么回事呢?

发信人:jiangbo123 发表时间:2003-08-26 13:07:09
--------------------------------------------------------------------------------
你可以在启动之后读出所有的寄存器的值,然后不能寻卡之后再次读出寄存器的值,然后比较,应该可以找到问题。
如果所有的寄存器设置都正确,而且操作没有变化,肯定是应该得到同样的结果。

发信人:irenehan 发表时间:2003-08-29 08:35:46
--------------------------------------------------------------------------------
我的531已经能正常工作了,谢谢你给我的帮助:)
另外我还想问点psam卡方面的问题。
psam卡可以3.3V.html">3.3V供电吗?我现在给它发送5字节的命令
它还是没有回应,发给它7个字节,它有时能返回6e 82,
可能是什么原因呢?

发信人:gingko 发表时间:2003-09-01 10:51:11
--------------------------------------------------------------------------------
e_mail:
luckytcp@163.com

发信人:jiangbo123 发表时间:2003-09-01 15:08:48
--------------------------------------------------------------------------------
cpu卡里面其实有一个单片机系统,起码要保证这个单片机系统能够正常工作,一般有一个允许电压范围,但是起码也在4v以上,3.3V.html">3.3V的供电估计不能正常工作。

发信人:独孤豹 发表时间:2003-09-01 15:34:49
--------------------------------------------------------------------------------
6.2  操作条件
6.2.1  操作条件的类别
  本部分定义了操作条件的两个类别。通过触点VCC,接口设备应向卡提供下列通常的电压支持。
A类:5V
B类:3V
因此,卡和接口设备应或者仅工作在A类、或者仅工作在B类、或者工作在A类及B类(以AB类表示)。
    A类卡应能操作在A类和AB类接口设备上。AB类卡应能操作在A类、B类和AB类接口设备上。B类卡应能操作在B类和AB类的接口设备上;应以这种方法设计:在A类操作条件下他们不被损坏。
6.3.2 VCC
    本触点用来提供电源电压Vcc,在下表中,电流值是平均大于1ms,最大电流由卡定义。接口设备应能在规定电压值范围内传送此电流值或更大的电流。
表1  正常操作条件下Vcc的电特性
A类    4.5    5.5
B类      2.7    3.3

发信人:jiangbo123 发表时间:2003-09-01 16:15:18
--------------------------------------------------------------------------------
很感谢独孤豹翻出标准来,那应该根据标准,你如果想使用3.3V的供电,那么就应该购买使用B类卡。

发信人:独孤豹 发表时间:2003-09-02 09:57:30
--------------------------------------------------------------------------------
我很需要一款2.0V以上能工作的

发信人:yyj011 发表时间:2003-09-02 13:43:11
--------------------------------------------------------------------------------
哪位找兼职高手,本人可以胜任

发信人:jinbiao 发表时间:2003-09-02 20:51:54
--------------------------------------------------------------------------------
大家好,我用的是RC500,现在发现刷卡一段时间后,发现不能刷卡了,重新启动机子,又可以刷卡了,不知为什么会这样,请各位大哥帮忙解释一下

发信人:jinbiao 发表时间:2003-09-02 21:19:26
--------------------------------------------------------------------------------
大家好 我用RC500,发现多次刷卡后,就不能再刷卡了,在重新启动机子后又可以刷卡了不知这是什么原因造成的。请各位大哥帮忙解释一下,谢谢

发信人:jiangbo123 发表时间:2003-09-04 09:20:46
--------------------------------------------------------------------------------
怀疑是程序运行时修改了RC500的寄存器值,另外如果操作卡的时候出现错误,接下来的操作都不会成功,必须重新寻卡。

发信人:gingko 发表时间:2003-09-04 09:59:32
13楼: >>参与讨论
xwj
the end

发信人:john wu 发表时间:2003-10-23 12:54:16
--------------------------------------------------------------------------------
   困扰了我五天,终于发现了DEMO程序的又一个BUG。在Anticollision里面:
   如果按照下面的程序运行,到SELECT Card的时候,就算地球毁灭卡也不会返回SAK(RC531是这样,我不知RC500是不是)。何故?
   在Anticollision开始的时候激活了ZeroAfterColl,就是下面的语句:
   WriteIO(RegDecoderControl,0x28); // ZeroAfterColl aktivieren(这个单词谁认识?)   
   在Anticollision结束的时候disable了ZeroAfterColl,就是下面的语句:
   ClearbitMask(RegDecoderControl,0x20); // ZeroAfterColl disable
   DecoderControl & 0x20写回DecoderControl这样能Disable ZeroAfterColl吗???
///////////////////////////////////////////////////////////////////////
//          M I F A R E    A N T I C O L L I S I O N
// for extended serial NUMBERs
///////////////////////////////////////////////////////////////////////
CHAR M500PiccCascAnticoll (unsigned CHAR SELECT_code,
                           unsigned CHAR bcnt,       
                           unsigned CHAR *snr)       
{
   CHAR idata status = MI_OK;
   CHAR idata snr_in[4];     // copy of the input parameter snr
   CHAR idata nbytes = 0;
   CHAR idata nbits = 0;
   CHAR idata complete = 0;
   CHAR idata i        = 0;
   CHAR idata byteOffset = 0;
   unsigned CHAR idata snr_crc;
   unsigned CHAR idata snr_check;
   unsigned CHAR DUMMYShift1;       // DUMMY byte for snr shift
   unsigned CHAR DUMMYShift2;       // DUMMY byte for snr shift   

   //************* Initialisation ******************************
   M500PcdSetTmo(106);
   memcpy(snr_in,snr,4);   
   
   WriteIO(RegDecoderControl,0x28); // ZeroAfterColl aktivieren(这个单词谁认识?)   
   ClearbitMask(RegControl,0x08);    // disable crypto 1 unit
      
   //************** Anticollision Loop ***************************
   complete = 0;
//   bcnt = 0;   // no PART of the snr is known
   while (!complete && (status == MI_OK) )
   {
      ResetInfo(MInfo);           
      WriteIO(RegChannelRedundancy,0x03); // RxCRC and TxCRC disable, parity enable
      nbits = bcnt % 8;   // remaining NUMBER of bits
      if (nbits)
      {
         WriteIO(RegbitFraming,nbits << 4 | nbits); // TxLastbits/RxAlign auf nb_bi
         nbytes = bcnt / 8 + 1;   
         // NUMBER of bytes known
         // in order to solve an inconsistancy in the anticollision sequence
         // (will be solved soon), the case of 7 bits has to be treated in a
         // separate way - please note the errata sheet
         if (nbits == 7)
         {
            MInfo.cmd = PICC_ANTICOLL1;   // pass command flag to ISR        
            WriteIO(RegbitFraming,nbits); // reset RxAlign to zero
         }
      }
      else
      {
         nbytes = bcnt / 8;
      }
      MSndBuffer[0] = SELECT_code;
      MSndBuffer[1] = 0x20 + ((bcnt/8) << 4) + nbits; //NUMBER of bytes send
          &nb
14楼: >>参与讨论
xwj
晕死了,2002年~2003年的讨论贴,没想到我也挖了一次坟~
 
15楼: >>参与讨论
john_light
谁把您的裤子穿起?
几年前第一次游览二姨,首页就是这张老铁。

16楼: >>参与讨论
jiangbo123
^_^
当初要不是这个帖子被封存,禁止回复,一定会被一直顶的。好多年过去了。

17楼: >>参与讨论
诗意
请求给予帮助
我是一名刚从学校出来的学生,接了第一个任务就是搞MF RC500,头都大了,没什么资料,希望各位大虾给予帮助。
谢谢!万分感谢!!!

18楼: >>参与讨论
诗意
呵呵 我的邮箱是hsy84@163.com
希望大虾发一些资料给我

19楼: >>参与讨论
pengjun334
谢谢!!!
其实一直知道有这个贴,就是找不到啦!
今天从头看到尾真的收获颇丰~~
至少对手头现在的这个项目的继续有点头绪啦!!
希望各位大侠继续给我们指点!!


20楼: >>参与讨论
诗意
求助
pengjun334
          你有没有mifare的开发资料啊?
          给我一份,感激不尽
          我的邮箱是hsy84@163.com

21楼: >>参与讨论
pengjun334
你到RFID的论坛上去看看吧,那里有个中文板的RC500资料
我手头也没什么资料!!
都是从网上找的
直接在GOOGLE里面输入RFID搜索就可以啦!
找不到我再发给你吧




22楼: >>参与讨论
何以解忧
好长啊 感谢xwj的辛勤劳动!!!
 
23楼: >>参与讨论
诗意
非常感谢 pengjun334 的答复!
刚接触BBS.21ic,不熟悉版面,原来还有第二页!呵呵。

非常感谢 pengjun334 的答复!

正在找 RC500资料 的资料…………

哪位大虾有资料的也可直接发到我的邮箱上 hsy84@163.com

谢谢各位啦!


24楼: >>参与讨论
myymichael
,,,,,,,,,,,,,
挖个坑,回头慢慢看!

25楼: >>参与讨论
微风
用过汇编来搞,幸好操作代码不用自己写
 
26楼: >>参与讨论
诗意
RFID的论坛
上 RFID的论坛 看了,速度慢的要命......晕死..下载还限制

27楼: >>参与讨论
wxjch
准备做13.56M RF ID  希望各位指点。
 
28楼: >>参与讨论
和尚
再挖一次,为什么RC500在临界点读卡时,很容易出错,
参与讨论
昵称:
讨论内容:
 
 
相关帖子
调查:坛子上有多少筒子做集中抄表?
rs485这样用行不行
如何反汇编?
居然有这样的系统升级方法。
哪位兄弟用过DS89c430/440/450
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号