原创
我的RFID阅读器开发过程[2]
2007-11-2 00:14
3651
7
7
分类:
通信
在[1]里面已经搞定了REQA,这时候卡片会处于ready的状态。在这个状态时,就可以读它的UID了。好像也只能按照这个次序来读。在这个读UID的阶段,得实现那个防冲突防碰撞的算法,叫什么二进制检索树什么的。至于该怎么写程序去实现它,我现在还没有详细去了解。先放一放。先把单张卡片的UID读回来。
这时候的命令有两个字节。0x93+0x20。不需要CRC校验,但是需要奇偶校验。这都是标准里面的,可惜我还是没有找到详细的资料,只有把几份资料参对着看,然后试出来。所以很是郁闷。等我找到了,我就上传上来,见者有份。
#define PICC_ANTICOLL1 0x93 /*防冲撞*/
#define PICC_NVB1 0x20 //
#define PICC_NVB2 0x70
void test_anti(void) //防碰撞,暂时没有实现
{ uint8 i,temp;
Wr_Rd_PCD(0,RegCommand,PCD_IDLE); //清除上次的命令,可以不要
Wr_Rd_PCD(0,RegChannelRedundancy,0x03); //发送奇校验位
Wr_Rd_PCD(0,RegBitFraming,0x00);//根据标准, 发送8bit的数据
Wr_Rd_PCD(0,RegFIFOData,PICC_ANTICOLL1);//先往FIF0写入防冲突命令 0x93
Wr_Rd_PCD(0,RegFIFOData,PICC_NVB1);//0x93 + 0x20
Wr_Rd_PCD(0,RegCommand,PCD_TRANSCEIVE); //发送命令
delay_50us(10000); //500ms
temp=Wr_Rd_PCD(1,RegFIFOLength,RDONEBYTE);
test(temp);
if(temp>0){
for(i=0;i
anti= Wr_Rd_PCD(1,RegFIFOData,RDONEBYTE);
}
for(i=0;i
}
}
RegChannelRedundancy寄存器老得改变。还好SPI的速度很快。关于LPC2102这款单片机的SPI的使用,周立功的网站上有。我就不用多说啥了。
当阅读器给卡片发出0x93+0x20后,卡片就会返回数据,有4个字节,也可以有更多的字节,有着更多的字节该怎么办,我暂时还不知道。
UID0,UID1,UID2,UID3 分别等于anti[0],anti[1],anti[2],anti[3]。
接着再把这个序列号发给卡片。
命令序列如下:
0x93+0x70+UID0+UID1+UID2+UID3+BCC+CRC16
CRC16是硬件自动产生的,不需要软件计算。
BCC需要通过软件来计算。BCC=UID0^UID1^UID2^UID3; 序列号的异或。
于是往RegFIFOData写入7个字节后,启动发送接收,就会得到一个应答。这叫选择应答,至此,卡片才正儿八经给激活,可以交换数据。
void test_select(void) //选择卡
{
uint8 i,temp;
Wr_Rd_PCD(0,RegCommand,PCD_IDLE);
Wr_Rd_PCD(0,RegChannelRedundancy,0x07);//发送奇校验位,CRC16
Wr_Rd_PCD(0,RegBitFraming,0x00);//根据标准, 发送8bit的数据
Wr_Rd_PCD(0,RegFIFOData,PICC_ANTICOLL1);//往FIF0写入防冲突
Wr_Rd_PCD(0,RegFIFOData,0x70); //0x93 + 0x70
Wr_Rd_PCD(0,RegFIFOData,anti[0]);
Wr_Rd_PCD(0,RegFIFOData,anti[1]);
Wr_Rd_PCD(0,RegFIFOData,anti[2]);
Wr_Rd_PCD(0,RegFIFOData,anti[3]);
temp = (anti[0]^anti[1]^anti[2]^anti[3]);
Wr_Rd_PCD(0,RegFIFOData,temp);
Wr_Rd_PCD(0,RegCommand,PCD_TRANSCEIVE); //发送命令
delay_50us(10000); //500ms
temp=Wr_Rd_PCD(1,RegFIFOLength,RDONEBYTE);
test(temp);
if(temp>0){
for(i=0;i
selsak= Wr_Rd_PCD(1,RegFIFOData,RDONEBYTE);
}
for(i=0;i
}
}
注意:RegChannelRedundancy=0x07了。
到这里,已经进行了3步。在后面,软件的工作量还很大。我弄一部分就整理一部分上来。至于硬件原理图什么的,比较简单。照着文档做就可以。个人觉得,真地好麻烦,因为有模拟的部分。有时候真的很难判断是硬件还是软件的问题。毕竟没有这方面的经验,也没有相应的仪器。网络分析仪、频谱分析仪,又岂是俺能买得起的。再说了,也不划算嘛,还不如直接买个别人做的开发板呢。上面的天线都是调谐的。只是没有什么意思,以后还是得自个做的,嵌入式嘛,体积有要求,功能集成上有要求。另外我觉得,折腾折腾它的天线还是蛮有意思的,等我借到仪器再说。好了,今天就到这一步了,下线继续测试。
;i++)>;i++){>;i++)>;i++){>
;i++)>;i++){>;i++)>;i++){>
文章评论(0条评论)
登录后参与讨论