|
【背景】
前阵子折腾 125kHz 射频卡(RFID)读写,先向坛子里的前辈们致敬!
现有开源的 M8 读卡器已经非常成熟,可以很方便的读取曼彻斯特编码的 EM4100 卡。
折腾期间入手了简易的拷贝器,但只支持实物卡(ID)到实物卡(5577)的拷贝,无法从数据创建新卡。
本帖从另一个角度折腾125k射频卡:使用AVR和常规电感,模拟任意序列号125k-RFID。
【原理】
大致说下 125k 射频卡读取(Card->Reader)原理,如有不对大家指正:
a. 读卡器(Reader)发送125k载波,射频卡(Card)收到载波首先整流供电;
b. 射频卡内部控制器启动,控制一个阻性负载通通断断,向外汇报信息;
c. 读卡器检测到负载变化,采样后获得曼彻斯特码,解码得ID号。
这里贴一张 T5577 手册上的曼彻斯特码载波图,大致示意下负载引起的载波包络变化:
理论上若能控制一个电感+阻性负载通断,模拟该射频卡是可行的。
实际后文的测试证实了这个猜想,并且连谐振匹配都不需要,只要电感不封闭磁感线(例如环形)就能工作。
【实现】
硬件除了系统板只剩个电感,直接贴原理图:
软件上用 GPIO 的 N 管作双向阻性负载:IO输出低电平=重负载(逻辑1),IO悬空=轻负载(逻辑0);
只要感应电压<0.6V,N管的双向通断特性还是可以的。
64bit 曼彻斯特码间隔为 512us/bit,使用 TIMER0 产生时间基准,系统时钟为 UNO 标配 16MHz.
顺手贴来固件(M328,16MHz):
以及自制序列号生成器(PC):
编译环境分别是 ICCAVR 以及 VS2005-MFC.
【测试】
我用了一块带电源的 Arduino UNO (ATMEGA328P) 做主控,电感为 10mH 工字型。
序列号用自制工具(上文附件2)生成,烧录后直接对着读卡器刷出了期望的结果。
实测电感不需要谐振匹配,几百uH到几十mH都可以工作,关键直流电阻不大即可。
顺手测试了 M8 读卡器用的方形线圈(~500uH),一样工作正常。
【后记】
以上,用 AVR 和常规电感模拟了 125k 射频卡,无需谐振匹配即可正常工作。
特发来分享,如有问题还请大家指正:)
最后祝大家身体健康,远离瘟疫!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|