RFID 复制成功 有图 有主要程序 求COOL
为了不想交给 物业的非法的不合情理的,入门卡收费(30 元),就想自己仿一张ID卡,由于没做过相关应用,在淘宝上查了一大堆,知道有专用的复制机出售,价格从200-1000都有,
用的卡是5557卡,后来请教大家,并查阅了相关资料,大致明白了原理,就想自己动手做复制机了。
从淘宝上买了:
2个2770的读卡模块(不带解码MCU):20*2=40元
2个线圈:3*2=6元
普通ID卡(研究学习编码用):5*2=10元
5张5557卡:5*5=25
加上邮费,一共100不到。
再花了三个晚上,终于完成了复制机。
是不是有点傻呀,哈。
不过学到了不少东西:
1:曼彻斯特_码 解码
2:基站芯片应用
3:5557卡读写与设置
有空再将东西贴出来,要喝酒去了。 mark,坐等LZ上资料。 LZ我也有几片2770~~把资料贴出来我看看啊 Mark too. Must be a terrific job! 大部分相关知识都在:
http://www.ouravr.com/bbs/bbs_content_all.jsp?bbs_sn=666255
原创:用Mega32通过U2270B读取H4001RFID卡号的范例
首先,第一步 要做的是4100卡的波形分析与解码,读卡电路原贴就有,分立的,2270,4095都能用,都支持读写
4100卡的输出波形看这儿:我都用分隔线做出来标注:
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_458531.jpg
(原文件名:卡波形.jpg)
解码思路在原贴24楼,不过有点错误,这是我整理后的:
曼彻斯特_码解码方法
根据曼彻斯特_码的特点,得知曼彻斯特_码中高电平持续的时间有两种情况:半个位周期和一个位周期。高电平持续一个位周期的情况是因为其中前面半个位周期高电平属于前一位逻辑“0”所有,后半个位周期高电平是属于后一位逻辑“1”所有。
根据这个特点,我们分析图示的波形,
首先找一个下跳,然后找一个上跳,目的是确认是否接收到信号(曼彻斯特_码)而后进入一个延时阶段t(延时t大于半个位周期,小于一个位周期)。接着读入信号,它必须是“1”。 《也就是找01 (卡的最后位是0,头是1)》
那么这个“1”就肯定是数据序列中某一位(如果不是“1”,就从头再来)。
接下来就是找该位“1”的下跳,找到之后又延时t,继续读入下一位数据。
如果找到的是"0",则找上跳,再延时t,继续读入下一位 这是解码程序,结果放在
unsigned long Id={0,0}; //存放ID内码 共64 BIT
没有做检验,因为最终目标是复制用,所以所有数据全部读进来共64BIT,包括前面那9个1。
我都是用ARDUINO平台做开发,但都大同小异,改下就通用。
由于2270芯片,没卡时也会一直有杂波,所以正好下面的函数不需要做错误退出延时处理了,
如果没有杂波,那就说明读卡电路不正常,哈哈。
程序经过逻辑分析仪分析,速度一流,载波使能后第一个完整周期就能够正确捕获。
也就是说,平时将2270的CFE置0,要读卡时再置1,再调用该函数就行。
商业的好象半秒读一次。这样省电。
#define Manchester_IN (PIND&(1<<PD2)) //曼彻斯特_码输入端
#define DELAYVALUE 350 //RF64 一个位=512us * 0.75 不用很严格,大于半个周期,小于一个周期就行。
//跟实际的读卡器的125K载波精确度相关,也与卡本身相关
unsigned long Id={0,0}; //存放ID内码 共64 BIT
int ReadAllCode(unsigned long iid[]){ //读所有数据 读到正确号 返回1
int k,i,j;
for(k=0;k<200;k++){ //找01 找200次,不能小于100,再大无意义
while(Manchester_IN); //找下降
while(!Manchester_IN); //找上升
delayMicroseconds(DELAYVALUE); //等 T
//digitalWrite(TPin, HIGH);
//digitalWrite(TPin, LOW);
if(Manchester_IN){ //是否找到01
//Serial.println("Found 01");
// digitalWrite(TPin, HIGH);
// digitalWrite(TPin, LOW);
for(i=0;i<8;i++){ //再找8次1
while(Manchester_IN); //找下降
delayMicroseconds(DELAYVALUE); //等 T
//digitalWrite(7, HIGH);
//digitalWrite(7, LOW);
if(!Manchester_IN) //不是1就重找01
break;
};
if(i==8)
break; //退出01循环,解数据体
};
}
if(k>=200) //未找到01与9个1
return 0;
//以上找数据头
digitalWrite(TPin, HIGH); //测试用,这样用逻辑分析仪就能看到我的程序运行到哪儿了,找到了什么波形 分析起来很方便。
//以下为读真正的数据共64-9=55bit
//9个1
iid=0x1ff; //9个1
iid=0x0;
while(Manchester_IN); //找下降
for(i=0;i<2;i++) { //共找2 长整型(32bit)实际是找 55 bit
for( j=0;j<32;j++){ //找32位
if((i==0) && (j==23)) //第一位只要读23位,前面是9个1
break ;
delayMicroseconds(DELAYVALUE); //等 T
iid<<=1;
if(Manchester_IN) {//是1
iid|=1;
while(Manchester_IN); //等下降
}else{ //是0
while(!Manchester_IN); //等上升
};
};
//digitalWrite(7, HIGH);
//digitalWrite(7, LOW);
} ;
//delayMicroseconds(5);
digitalWrite(TPin, LOW);
return 1;
}//ReadAllCode() 最新最可悲的消息:我们小区入口居然用的是IC卡,操,白费力了。找了朋友的卡来读,结果没成功。
不过这东西,已经能做为一个产品了,呵,复制机,淘宝上有人卖
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_458535.jpg
这款TB上卖300左右 (原文件名:COPY-1.jpg)
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_458536.jpg
这个卖500 (原文件名:COPY-2.jpg) 一上网就碰上这么个高人,赞! 再继续:
5557卡与写卡功能:
125K载波的芯片,都是用控制输出载波波形来写卡的。也就是说电路通用。
2270芯片就控制6号脚CFE(载波使能),具体看我附件的手册,里头要注意的地方,我已经做了标注:
中文ourdev_458537.pdf(文件大小:1.46M) (原文件名:T5557-中.pdf)
英文ourdev_458538.pdf(文件大小:720K) (原文件名:T5557-0603.pdf)
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_458554.jpg
写卡波形 (原文件名:写卡波形.jpg)
这儿再要强调一下使用逻辑分析仪的方便哟,如果没有,这个小项目是不可能完成的。
我买的是周立功的LA1016,花了980,真希望哪位DX再搞个开源的出来玩玩。 mark 要使5557卡能模拟标准ID卡,就得对5557进行配置:
具体看楼上
1:使能自动回复数据:AOR=0
2:最大数据块=2, 32bit * 2=64 bit
3: 数据回复速度: RF64
4:取消ST间隔符
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_458563.jpg
配置字 (原文件名:配置字.jpg)
这儿要提一下RF速度的概念,一开始我也没明白(可能就我没明白吧./emotion/em004.gif)
Rf速率说明:
RF/32 指一个位周期包含有32个调制载波信号。
如:125K调制时,一个调制信号周期为8us,
Rf32位时间=8*32=256us
Rf64位时间=8*64=512us
也就是说RF/32 RF/64 这个值越大,数据就越宽,相应的速度就变慢了。 这儿的时序相当重要,不然有些卡能写,有些不能写。
//这个配置全能写
#define Start_Gap 200 //起始350
#define GapS 150 //间隔 300
#define Bit_One 350 //数据1400ok
#define Bit_Zero 100 //数据0 100 140ok
#define E5557_Config0x00148040//5557配置字
#define E5557_Default 0x000880E8//5557缺省配置字
#define U2270_CFE 19 //2270 第6脚 载波使能
////////////////////////////////////
//E5557 写卡相关
//
////////////////////////////////////
void Contrl_RF(int state,int dtime){ //控制载波时长开/关,us
digitalWrite(U2270_CFE, state); //切换至相关状态
delayMicroseconds(dtime); //延时
}
void Standard_Write(unsigned char Block,unsigned long W_Data){
//标准写5557卡 :块地址要写的数据32bit
unsigned long Tbit;
int i;
//10 操作码
//L 锁定码
//32个数据位 1-32
//3位 块地址 2-0
//delay(6); //POR 启动延时6MS
digitalWrite(U2270_CFE, HIGH);
delay(5); //POR 启动延时5MS //5
Contrl_RF(0,Start_Gap);
//10 对0页操作码
Contrl_RF(1,Bit_One); //1
Contrl_RF(0,GapS);
Contrl_RF(1,Bit_Zero); //0
Contrl_RF(0,GapS);
//块锁信号 0:不锁
Contrl_RF(1,Bit_Zero); //0
Contrl_RF(0,GapS);
//数据 共32bit 数据
Tbit=0x80000000; //1000 0000 0000 0000 0000 0000 0000 0000
for(i=0;i<32;i++){
if(W_Data & Tbit){
Contrl_RF(1,Bit_One); //1
} else {
Contrl_RF(1,Bit_Zero); //0
};
Contrl_RF(0,GapS); //数据间隔
Tbit>>=1; //右移一位,测下一个bit
};
//块地址
Tbit=0x4;//100
for(i=0;i<3;i++){
if(Block & Tbit){
Contrl_RF(1,Bit_One); //1
} else {
Contrl_RF(1,Bit_Zero); //0
};
Contrl_RF(0,GapS);
Tbit>>=1; //右移一位,测下一个bit
};
// 给卡一个编程的时间
//Contrl_RF(1,6000); //延时6MS
digitalWrite(U2270_CFE, 1);
delay(7); //10
digitalWrite(U2270_CFE, 0);
} 顺便再提一下我用的开发板
我用的是ARDUINO,16M晶振,168芯片
做产品,就用M8,不用改任何东西,重新编译一下就行了。
普通AVR板子,也应该能改成ARDUINO平台的,烧个BOOTLOAD就行了。
常用功能都做了封装,不用跟寄存器打交道,编程速度极快。上手也极快。
我是一个懒人,不想去记寄存器,呵。我想大家开发一个程序,只要一个编程思路就行了,
将精力放在寄存器上,是不应该的,当然你想当骨灰级的芯片专家就不是这个思路了。
我是极力推荐大家使用的,这么多种类的单片机,我的宗指是哪个方便用哪个,这个方便
有电路,也包括上位机软件。AVR除了EEPROM给我搞了点麻烦事,其他都挺好,能够满足我的应用。
www.arduino.cc
我还建了个QQ群40491285
可以交流下。 现在流行IC卡的,支持楼主搞这个吧 mark 有现成卖的 有现成卖的 现在都流行MIFARE IC卡,ID卡大部分用于低档场合下 jh 一步步来,本来我都没接触过这方面的编程,短短几天能搞定,已经很高兴了。
虽然没有用上。 再继续下一个小项目,RFID嗅探器,还是基于相同硬件。
因为我发现2270芯片,CFE关闭时,他的接收放大电路还是工作的,那么,相同硬件,只要将CFE关闭,那么将读头放在其他读卡器附近,就可以学习到其他卡片的信号了。
再有一个应用,由单片机直接仿真ID卡,好象也很简单哟,跟写卡程序相似,时序改一下就OK了。
感觉越走越危险了。。。。 我是做ID/IC卡设备开发的,希望多多交流学习! mark一下 mark一下,以备后续学习 hao 需要马克 马克 mark COOL 记号 mark 不错看看 NB,帮顶 汗……楼主为了省30元,结果花了100多……还搭进去这么多功夫
学到东西倒是挺好,旁门左道还是慎重点 请教一下各位前辈(菜鸟学习啊)
我见过几种卡,都是封装在塑料卡片里面的,如果知道它用的是那种芯片呢?
拆开卡片看到的也不过是一小坨黑糕而已。 备份! 牛人啊 MARK 我这用的HID的卡,楼主能搞掂吗 mmmk mark 牛人啊
90%以上的门禁都是用ID卡,因为便宜啊 请勿非法使用~~~~ MARK 回复【12楼】wxws
顺便再提一下我用的开发板
我用的是ARDUINO,16M晶振,168芯片
做产品,就用M8,不用改任何东西,重新编译一下就行了。
普通AVR板子,也应该能改成ARDUINO平台的,烧个BOOTLOAD就行了。
常用功能都做了封装,不用跟寄存器打交道,编程速度极快。上手也极快。
我是一个懒人,不想去记寄存器,呵。我想大家开发一个程序,只要一个编程思路就行了,
将精力放在寄存器上,是不应该的,当然你想当骨灰级的芯片专家就不是这个思路了。
我是极力推荐大家使用的,这么多种类的单片机,我的宗指是哪个方便用哪个,这个方便
有电路,也包括上位机软件。AVR除了EEPROM给我搞了点麻烦事,其他都挺好,能够满足我的应用。
www.arduino.cc
我还建了个QQ群40491285
可以交流下。
-----------------------------------------------------------------------
赞同 留着有空弄 邪恶地想到了学校的饭卡。。。 马克完后可以看吧 回复【楼主位】wxws
-----------------------------------------------------------------------
可以给出那个淘宝店铺的链接吗,我想做一个复制卡的机子玩玩,是不是只要买一个2270读卡模块,一个线圈,和几张5557卡就可以??? MARK 不错的资料,参考参考 对那个单片机仿真卡片极有兴趣,我之前也曾有这个计划,楼主做得如何了 这个也能复制,记号 再顶一次! 标记 一下 mark mark mark mark 不得已用mark mark 看看 mark mark mark mark hao ding ding mark Mark mark mark 呵呵,这几天 怎么这个多人对这个感兴趣了呀?
单位全换电子锁了? mark,
谢谢! mark 嘿嘿 mark Mark mark mark 记号 mark,坐等LZ上资料。 mark 长知识了。谢谢楼主!!! mark mark dddddddddddd 读写T5557卡,有高人用51MCU加三个三极管,一个运放和几个电阻电容组成. 现在酒店的感应卡锁绝大部分都用的T5557卡, 据我了解, 都没用U2270B模块, 极大的降低了成本. mark cool 太牛啦,高手就是高手 学习 支持+ mark mark marj 谢谢楼主!刚好公司要用!先标记一下! mark 看看这些好东西,也想到了我们08年搞的一个东西,也是用来"复制"ID卡用的,不过在其上可以任意设置ID号码,也无须外接电源,与ID卡比较起来就是厚点
见图:
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_544408.JPG
(原文件名:ID card.JPG) 用过RC500的 mark