原创
我的RFID阅读器开发过程[1]
2007-11-1 23:39
4811
5
5
分类:
通信
单片机使用LPC2102,用ISP的方式开发。读卡芯片FM1702NL。SPI的方式。
使用SPI接口时,有一个需要注意的地方。在FM1702NL的芯片资料上并没有详细的介绍,后来我还是从FM1702SL的资料看到的。就是SPI接口的确认过程,并口需要确认,SPI口也需要确认。
文字描述就是:先在读卡芯片的RSTPD管脚产生个复位信号->读芯片的命令寄存器是否为0,不是0就不断检测->如果为0,往Page register里面写0x80->再判断命令寄存器是否为0->如果为0,往Page register里面写0x00。到这里,FM1702的SPI初始化就算完成了。
接下来就去读type A的卡。如果天线调谐得很棒的话,设置一下几个寄存器就可以读到卡片的信息了。至于天线如何调谐,别问我,我也不清楚。运气好的话,你可以拎个示波器来看看波形,正弦波的波形非常好的话,就表示高次谐波的功率非常低。反正我是运气较好,调了一个1cm范围的天线,嘿嘿,高兴一会会。不过在那个什么防碰撞上面,可是遇到了麻烦。于是这部分的程序我留到以后再写。先按照一张卡片来吧。整个简单的流程先玩一遍。
激活卡片有两个命令,如下:
#define PICC_REQIDL 0x26 /*寻天线区内未进入休眠状态的卡*/
#define PICC_REQALL 0x52 /*寻天线区内全部卡*/
我当然用后面那个,至于这两者有多大区别,我还得试过才知道。我现在还不知道怎么样才能让卡片休眠呢。
这个寻卡的命令仅由7个数字位组成。仅由7个 仅由7个 仅由7个
次序如下,看以下函数,很简单的,猜都能猜出是啥意思。
void testATR(void) //做测试用的,通过串口返回数据,在串口
{ //助手里面用hex的方式察看
uint8 i,temp;
Wr_Rd_PCD(0,RegTxControl,0x5b); //发送载波,当然得先发送
//调天线时也是这样,没有载波怎么调嘛。赋值的具体含义参看
//芯片的pdf文档,我就不拷贝过来了
delay_50us(10000); //500ms延时而已,或长或短,能看着办吗?
Wr_Rd_PCD(0,RegCommand,PCD_IDLE);
Wr_Rd_PCD(0,RegChannelRedundancy,0x00); //不发送奇偶校验位
Wr_Rd_PCD(0,RegBitFraming,0x07); //根据标准, 只发送7bit的数据
Wr_Rd_PCD(0,RegFIFOData,PICC_REQALL); //先往FIF0写入读卡命令
Wr_Rd_PCD(0,RegCommand,PCD_TRANSCEIVE);//命令寄存器写收发命令
delay_50us(10000); //500ms,延时,还是延时
temp=Wr_Rd_PCD(1,RegFIFOLength,RDONEBYTE);//看看有多少数据
test(temp);//串口上传一下结果,如0x03什么的
if(temp>0){ //有数据,那就读出来吧
for(i=0;i
atqa= Wr_Rd_PCD(1,RegFIFOData,RDONEBYTE);
}
for(i=0;i
}
}
简单点说,给卡片发0x52,卡片返回0x04,0x00。这时,RegFIFOLength=0x03。这就是请求所有,激活卡片吧。在这一步,发7个数据位就可以了,不用奇偶校验,不要CRC校验,不用发完整个字节,不然就收不到东西了。这就是第一步了。只要天线是调谐的,通过修改这几个寄存器,就可以跟卡片打招呼了。
;i++)>;i++){>
;i++)>;i++){>
文章评论(0条评论)
登录后参与讨论