欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

演示读取类型A 类型B nfc 卡号|学习笔记

最编程 2024-03-17 10:25:53
...

开发者学堂课程【嵌入式之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);

for(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类卡是一个样的一个工作流程怎样初始化、怎么样去寻卡,怎么样防冲撞。