坛子里好像越来越多的人对此产生了兴趣。我最初的读卡器是用CM200开发的,硬件开发没有什么特别的,
CM200内部带地址锁存,接口很方便,
其它的按照datasheet照搬就行了。
关键是天线板的设计,尺寸形状都会影响,而我觉得这些定了之后,设计的关键又是天线板上的电容电阻参数的选择,选择不对,大大的影响寻卡距离,甚至导致不能寻到卡。
datasheet上提供的操作距离可以达到2.5cm,后来我后来发消息实际上距离最远的可以达到4cm左右。软件的开发方面,如果能够得到philips的相关光盘,开发是非常容易的,因为它几乎提供了所有的函数源码,并且都是51的,几乎可以不做任何改动。CM200很稳定,可以放心的操作,不像RC500,容易损坏。 RC500芯片支持最远10cm读写,但是你的天线也必须做得比较大。RC500最大的不爽就是它在操作不对时容易坏,特别是使用仿真器调试的老兄一定要注意,千万不要在对RC500进行操作的过程中设置断点,这种情况下非常容易损坏RC500,如果你原来调试好的程序突然不能用了,你不要反复的重试,先拿示波器看看rc500的tx1和tx2脚是不是还有波行输出,如果晶振有信号但是tx1和tx2没有输出,很不幸,你的rc500已经损坏,并且是不可修复的。另外一种情况是你的程序里有bug,在调试系统的其它模块时对rc500进行了误操作,这也非常容易损坏。所以我的经验是先调试好其它所有的模块再焊上RC500芯片。呵呵,每片可都是一百好几十大洋哟。
同样的,你也可以从philips公司获得该芯片的源码示例,并且提供51单片机和16位单片机的两种源码,但是这次提供的源码就没有CM200那次的爽了,绝大多数仍然是可以直接用的,但是有个别的地方需要修改,甚至有bug,而这些地方就足够你头痛的了,因为你根本不知道问题出在哪里,是你操作不对,还是程序有问题。首先出现问题最大的地方就是变量的定义的问题,在进行下载密码操作(loadkeyE2)时,实际上是将密码进行格式转换之后写到相应地址的EPROM中,最后调用的实际是WriteE2,这时候你要注意写进去地址的计算,我看到的是unsigned char
idata e2addr = 0x80 sector * 0x18;这样你马上就会发现一旦扇区号超过5,计算的地址就会溢出,导致出错。类似情况好像还有,具体我不记得了。
另外,在对rc500进行复位的时候原来有这样的语句:
while (((ReadRawIO(RegCommand) & 0x3F) != 0x3F) && !T2IR);
// while reset sequence in progress
while ((ReadRawIO(RegCommand) & 0x3F) && !T2IR);
后来我反复试验发现经常在第一个while语句处出现超时错误(由于T2IR退出循环),于是我将第一个while去掉,一切ok,rc500也可以复位成功。不知道有没有老兄有不同的情况,欢迎交流。总之,采用rc500开发读卡器,如果没能从philips公司获得源码,开发难度个人认为非常之大,因为你很难从datasheet中非常详细的了解每个操作的前前后后的细节,你也不知道应该在什么时候判断随时出现的那些错误,你不可能不停的监视错误寄存器。而如果你有了源码的话,你就是多费心调试了。而最痛苦的时你不单步执行就很难发现问题在哪里,而单步执行又很容易损坏芯片。我从开始到开发成功两款读卡设备(一个51系统的,一个龙珠系统的)一共坏了5块芯片,六七百大洋飞了。呵呵,各位要小心行事的好。
其实RC500和CM200的天线设计的文档只有很小的区别,在文档的最后甚至都给出了PCB板的图,所以你只需依葫芦画瓢就可以了。而其实CM200的天线可以原封不动的用在rc500上,我的rc500的天线就是直接用的原来cm200的。一旦天线的pcb定了之后,电容电阻参数的选择就要费一点功夫了,我不懂RF,所以我的参数都是根据文档的原则然后一点点试出来的,文档里说到的计算电感等东东,我都没有搞(也不会搞,呵呵)。另外文档提到,天线板和主板之间有两种匹配方式,如果连线长度小于3cm,可以直接连接;如果长度大于3cm,好像要用什么同轴电缆,还什么50欧姆电阻匹配,我没有用过,也忘了。RC500的接收电路按照文档来就可以了,上面电路图,参数都有。