有关RFID125k只读读卡模块的使用

由于最近参加的项目需要使用RFID,所以这两天一直在搞这个鬼。原来从未接触过这个模块,只知道校园卡是这个原理,完全从小白开始接触使用。所以我只记录如何使用,并不讲其原理,原理我也不懂。

先说项目需求:要求使用RFID模块连接STM32,刷卡后将ID号送给32,(其实很简单的一个东西,搞了好长时间)。

使用的是实验室的北京博创智联的试验箱里面的读写模块,开始用的是13.56M频率的读写模块(实验室的学长原来用过,所以打算请教他看他的代码原理),代码如下

int  Card_Request(){
	
	uchar txbuff[11];	
	uchar rxbuff[11];	
	int i = 0;
	uchar len = 0;
	txbuff[0]=0x02;
	txbuff[1]=0x20;
	txbuff[2]=0x52;
  tty_fflush();
	tty_write(txbuff,3);
	usleep(100);
	//read
  tty_read(&len,1);
  tty_read(rxbuff,len);
  fflush(stdout);
  if(len > 1){
    return 1;
  }else{  
    return -1;
  }
}
//01 21
int  Card_Anticoll(uchar *card_NO){
	uchar txbuff[11];	
	uchar rxbuff[11];	
	int i = 0;
	uchar len = 0;
	txbuff[0]=0x01;
	txbuff[1]=0x21;
  tty_fflush();
	tty_write(txbuff,2);
	usleep(100);
	//read
        tty_read(&len,1);
        tty_read(rxbuff,len);
        fflush(stdout);
        if(len > 1){
		memcpy(card_NO,&rxbuff[1],4);
                return 1;
        }else{  
                return -1;
        }
}

这是主函数:

while(1){
		printf("Press any key to contiue...\n");
	 	while(1){
	 		
			if((Card_Request() < 0))
				continue;
			break;
			}
	 	if(Card_Anticoll(card_NO) < 0)
			continue;
			
		printf("CARD NO:\t");
		
		for(i = 0;i < 4;i ++){
			printf("%02X",card_NO[i]);
		}
		
		printf("\n");
		memcpy(id,&card_NO[0],4);
		
		break;
	}

可以看出其命令,先是通过串口向该模块发送0x02,0x20,0x52然后就等待若接受到数据则又向模块发送0x01,0x21,然后接受四个字节的卡号;模拟其过程在32上却接受不到卡号,不知什么原因;可能上面的几个命令需要更改,但是找遍了试验箱的材料也没找到有关的任何东西,产品光盘里只有一个串口软件,(这里强烈建议改试验箱能多一些有关RFID的实验和命令讲解)用来测试几个读写器;

打开软件发现了另外一个模块(125k只读器)完全可以用来做我的项目。因为125k是只读,对应的卡也没有rom不能写入数据,而我只需要读出对应的卡号即可;该模块识别到卡后自动将卡号通过串口发送出去,所以我就省事了,只用在32上写一个接受5字节的串口中断就可以了;当然注意是5字节,(划重点)第一字节都是00,(开始在串口工具里接受到的只有四字节的数据,我就以为是4字节卡号)忘记了这个的话串口的接受程序会出错的;接下来我就可以实现我的功能了,贴出32的代码:

主程序:

while(1) {
		if(mkey_read() ==0)
		{
				uart2_send_byte(w);
			  beep_on();
			  tb_delay_ms(100);
				beep_off();
		}
		if(card_ok)
		{
			USART_Cmd(USART3, DISABLE);
			card_ok =0;
			card_index= 0;
			id = id_pipei();
			if(id)
			{
				beep_on();
				tb_delay_ms(100);
				beep_off();
				printf((char *)idss, "%2d,login sucess",id);
				tb_usart2_send_str((u8*)idss);
			}
			else
			{
				//tb_usart2_send_nbyte(id,4);
				tb_usart2_send_str((u8*)"false");
			}
			USART_Cmd(USART3, ENABLE);
		}

中断程序:

int USART3_IRQHandler(void) {
if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) {  
            USART_ClearITPendingBit(USART3, USART_IT_RXNE);  
            w=USART_ReceiveData(USART3);   
           //USART_SendData(USART2,w);
  }
	if(w !=0x00)
	{
		id_buf[card_index] = w;
		card_index++;
		if(card_index >3)
		{
			card_ok =1;
		}
		else
		{
			card_ok = 0;
		}
	}
	return 0;
}
当然我这只是测试用,接受到卡号后与我事先定义好的数组对比,对比成功直接返回数组索引号;
125kHZ低频读卡器功能概述: 本资源中包含读卡器原理图及PCB文件、读卡器源程序和电脑端上位机源程序。读卡器可以直接制作使用,可以使用附件中的上位机与读卡器进行通信,控制读卡器对T5557类片进行读写操作。对T5557片的配置必须为(RF/32,曼侧斯特编码),这也是国内T5557的常用配置。要对其他配置的T5557片或其他低频片(EM4305类和EMID片)进行读写,硬件上是支持的,只需根据片文档修改读卡器源程序,下载更新便可。为方便程序更新,硬件电路上已经实现自动下载,使用串口下载程序时无需手动设置BOOT0和BOOT1。 应用场景: 低频RFID主要用在短距离、低成本的应用中,如门禁控制、校园、煤气表、水表等。 在相关领域的开发中,可以使用读卡器作为前台管理的设备,对客户进行管理。也可以将读卡器改成终端设备,如RFID门锁上的读卡器,用来验证片信息并控制门锁;或煤气表、水表上的读卡器,根据片内的余量信息控制煤气和水的供应。另外,也可以作为学习曼彻斯特解码的学习工具。 设计思路: 使用STM32F103R8T6输出125kHZ的PWM信号作为载波信号,将信号输入到功率放大电路,在线圈上产生125kHZ的正弦信号。T5557片从125kHZ信号中获取能量和控制命令,并根据命令将要传回的信息使用曼彻斯特编码对载波信号进行调制。读卡器端的检波电路和滤波放大电路将被调制信号提取处理成单片机能识别的数字信号,输入到STM32F103R8T6的输入捕获功能引脚,再通过STM32F103R8T6将捕获的信号进行曼彻斯特解码,最后将解码信息根据自己设定的通讯协议进行数据打包,发送到电脑上位机。 系统框图: 硬件平台: 1.主控制器:STM32F103R8T6 2.USB转TTL:CH340G 3.模拟电路:LM358 AMS1117-3.3V 125kHZ谐振线圈(345UH线圈搭配4700PF电容)谐振频率在线计算工具 4.蜂鸣器: 3V供电 软件平台: 开发工具:Keil uVision5 上位机编写工具:Microsoft Visual C# 学习版 成本估算: 芯片询价和在线购买链接https://www.bom2buy.com/元器件估算价格约为30元 项目进度: 1.能对AT5557/55567/5577片(配置为RF/32,曼彻斯特编码)进行整页读,密码读和密码写操作; 2.有相应的上位机,方便读写指令的发送和数据解读; 3.上位机与读卡器之间通讯加入了数据校验,提高了通讯的可靠性。 未来更新: 1.加入EM4305类和EMID片的读写功能; 2.加上触摸显示屏和电池,做成便携版 3.做成袖珍版,加入与手机通讯的接口(OTG或蓝牙)
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值