linux RFID读卡器的驱动问题

本文介绍了在Fedora12系统上使用MC9500 RFID读卡器的过程,包括如何加载USB转串口驱动cp210x,通过`insmod`命令以及识别设备文件ttyUSB0。编程部分涉及串口通信协议,强调了数据的16进制处理和校验字节的重要性,并给出了简单的示例代码,展示了与RFID读卡器的交互操作,如检查设备、读卡、授权和写卡等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人所使用的RFID读卡器的型号为:MC9500,所用的卡为标准的Mifare One S50,以usb口的方式接入电脑,本人所使用的系统为fedora12.

RFID读卡器内部有一块cp2102的usb转串口的芯片,所以使用的驱动系统的usbserial驱动,在插入设备之前通过

insmod usbserial vendor=.... product=.....  ;

insmod cp210x;

命令来加载设备的驱动,cp210x的驱动为系统自带的为cp210x系列usb转串口芯片的驱动程序,在linux2.6.25以上的内核中都自带了,若使用小于2.6.25的内核,可能要手动配备cp210x的驱动,官网上貌似有说明的。vendor ,product这两个参数可以到读卡器配备的window驱动文件中找到,这两个参数是必须的。加载这两个命令后插入RFID读卡器,通过 ls /dev 的命令可以看到多了一个ttyUSB0的设备文件,通过这个设备文件,就可以操作读卡器了。

之后的编程就基本为串口编程了,需要对读卡器进行什么样的操作,就写入什么样的命令即可。可以打电话到厂家索要串口通讯的协议,我的也是打电话后提供的,工作人员的态度还不错。串口编程的时候要注意:发送的数据都是16进制的,读取返回值也要以16进制来进行,而且对字符串操作不能使用string.h下的那几个字符串操作函数,因为写入和读取的数据中间可能有0,而字符串的操作函数都是以'/0'结束的,我就上了这个当。写入数据的时候最后一个字节为效验字,是前面所有字节的异或,这个需要注意一下,否则写入后返回值将全部是0。相关的串口协议和卡的物理结构的说明,在厂家给的文档中会有说明,就不做介绍了。

 

代码如下,各个公司的RFID读卡器的串口协议不同,但大致的流程是一样,都是串口数据的读写,比较简单:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <sys/time.h>
#include <pthread.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <locale.h>
#include <wchar.h>

#include"fc.h"  //fc.h头文件只是将下面的某几个函数申明了一下,用不用大致都行的。

static unsigned char Device[]={0x9b,0x0e,0x00,0x1a,0x40,0x52,0x46,0x20,0x43,0x61,0x72,0x64,0x52,0x65,0x61,
0x64,0x65,0x72,0x20,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x31,0x2e,0x30,0x9f,0x00};
static unsigned char Card[]={0x9B,0x05,0x00,0x09,0x30,0x00,0x08};
static unsigned char Auth[]={0x9b,0x0c,0x00,0x02,0x31,0x00,0xa4};
 int fd;

pthread_mutex_t psemread= PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t psemstrcpy= PTHREAD_MUTEX_INITIALIZER;

char lpOutBuffer[30];
unsigned char lpReadbuf[50];

int set_opt()
{
  struct termios newtio,oldtio;
  if ( tcgetattr( fd,&oldtio) != 0) {
    perror("SetupSerial 1");
    return -1;
  }
  bzero( &newtio, sizeof( new

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值