开发者学堂课程【嵌入式之RFID开发与应用2020版:演示读取TypeA TypeB nfc卡号】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/665/detail/11119
演示读取TypeA TypeB nfc卡号
演示过程
完成了串口和RFID的卡片的一个电源的上电复位之后,那再接下来就是卡片的卡号的读取,包括对它的卡的类型的判断。首先代码主要是一个通用的代码,就能够识别两种卡,并且,在读取卡号之前,分别的对a类卡进行了一个初始化rfid_carda_init();,然后读取a类卡的卡号。再对B类卡读取B类卡的卡号,但前提是里面确实是存在a类卡或者的B类卡,具体的代码怎么去初始化以及怎么去读取去寻卡以及读取卡号,接下来进行演示一下。
首先先编译一下程序,编译完成之后通过挂载的方式自动挂载
进入到mount目录,输入[ root@qfedu /mnt] #cd debug /iot/rfid/01_rfid_id/
左边是开发板,右边是虚拟机,进去之后首先来看一下阅读器,它本身可以支持a类卡、B类卡、NFC。前面介绍卡片的时候提到过有两种卡,分别a类和B类。
ISO/IEC 14443:国际标准ISO 14443定义了两种信号接口,分别是TypeA和TypeB且互不兼容。
TypeA类卡:
>MIFARE Std 1k(MF1 IC S50):国内常称MF1 S50
>MIFARE Std 4k (MF1 IC S70):国内常称为MF1 S70
>广泛应用
TypeB类卡:
>我国第二代居民身份证:上海华虹、北京同方THR9904、天津大塘和北京华大生产。
>AT88RFO20:美国爱特梅尔(ATMIL)生产,典型应用如广州地铁卡。
接下来看一下能不能够读出的最常见的食堂的饭卡,version=88代表的就是在初始化的时候能够去读到阅读器1750的版本是88。再接下来的话,它就应该去读取卡号。
上图分别为卡片和阅读器,只需要刷一下卡,可以看到能读到的a类卡的卡号,代码为
A类卡卡号:34 a9 a5 4d
A类卡卡号:34 a9 a5 4d
A类卡卡号:34 a9 a5 4d
A类卡卡号:34 a9 a5 4d
A类卡卡号:34 a9 a5 4d
A类卡卡号:34 a9 a5 4d
a类卡包括公交卡,再来看一下公交卡,然后再刷一下公交卡,代码显示为
A类卡卡号:43 e2 2f 4f
A类卡卡号:43 e2 2f 4f
A类卡卡号:43 e2 2f 4f
A类卡卡号:43 e2 2f 4f
A类卡卡号:43 e2 2f 4f
A类上卡号:43 e2 2f 4f
看到也可以读出来这是公交卡的卡号。
然后再接下来是 B类卡,B类卡包括二代身份证,通过二代身份证刷一下,代码如下
B类卡卡号:12 0d 70 02 2a 88 8f 37
B类卡卡号:12 0d 70 02 2a 88 8f 37
B类卡卡号:12 0d 70 02 2a 88 8f 37
B类卡卡号:12 0d 70 02 2a 88 8f 37
身份证刷出来是属于B类卡,而且卡号明显比其它的长了一倍。
接下来可以简单演示一下手机的NFC,打开nfC,代码如下:
A类卡卡号:08 a4 b2 dd
A类卡卡号:08 68 e7 2f
A类卡卡号:08 57 13 a5
A类卡卡号:08 70 59 59
A类卡卡号:08 d6 ac 48
A类卡卡号:08 55 1e b8
A类卡卡号:08 97 12 62
A类卡卡号:08 4a 2f a8
nf C可以看到明显看到卡号一个是一个变化的,其实是应该是一个一个固定的一个卡号,,同时NFC,它其实也是属于a类,以上就对于的通用的代码能够去读取 A类卡、B类卡、NFC的卡号的信息
uart_ .rfid_ init(UART_ _DEV);
while(1)
{
if(1en = get_ rfid_ card_ _id(id, &type)){
printf( "%c
类卡卡号:",type);
f
or(i=0;i<len;i++|)
printf( "%02x " ,id[i]);
puts("");
}
}
return 0;
int
get_ rfid_ card_ id(unsigned char *id, char *type)
unsigned char TagType[2];
unsigned char buf[18] = {0};
rfid_ carda_ init();/**
初始化A类卡*/
if( (rfid_ carda_ request(PICC_ REQALL, TagType) == OK )&&(rfid_ anticoll(buf) == OK
*type = 'A';
memcpy(id, buf,4);
return 4;
}
rfid_ cardb_ init();
/* 初始化B类卡*/
if( (rfid_ request() == 0K)&&(rfid_ _attrib() == 0K)&&(rfid_ get_ _uid(buf) == 0K) )
{
*type = 'B';
memcpy(id,buf,8);
return 8;
在后面可能就不会去针对B类卡去做介绍了,接下来就重点去学习关于a类卡是一个样的一个工作流程怎样初始化、怎么样去寻卡,怎么样防冲撞。