|
楼主 |
发表于 2009-7-5 10:54:39
|
显示全部楼层
这儿的时序相当重要,不然有些卡能写,有些不能写。
//这个配置全能写
#define Start_Gap 200 //起始 350
#define GapS 150 //间隔 300
#define Bit_One 350 //数据1 400ok
#define Bit_Zero 100 //数据0 100 140ok
#define E5557_Config 0x00148040 //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);
} |
|