讲解:NFC之PN532使用

一、简介

PN532是一个高度集成的非接触读写芯片,它包含80C51微控制器内核,集成了13.56MHz下的各种主动/被动式非接触通信方法和协议。

工作模式:

● 读写器模式,支持ISO/IEC 14443A / MIFARE?机制

● 读写器模式,支持 FeliCa机制

● 读写器模式,支持ISO/IEC 14443B机制

● 卡操作模式,支持ISO 14443A / MIFARE?机制

● 卡操作模式,FeliCa机制

● ISO/IEC18092,ECM340点对点

特性

● 带40 kB ROM和1 kB RAM的80C51微控制器内核

● 高度集成的模拟电路,解调和译码响应

● 输出缓冲驱动器通过最少量的外部无源器件连接天线

● 集成了RF场检测器

● 集成了数据模式检测器

● 支持ISO/IEC 14443A / MIFARE?

● 只在读写器模式中支持ISO/IEC 14443B

● 在读写器模式中典型工作距离超过50mm,具体距离由天线尺寸、调谐和电源决定

● 在NFCIP-1模式下工作距离高达50mm,具体视天线的尺寸、调谐以及电源而定

● 在卡操作模式中典型工作距离约为100mm,具体距离由天线尺寸、调谐和外部场强度决定

● 在读写器模式中,支持Mifare Classic加密,可支持212 kbit/s和424 kbit/s两种更高数据传输速率

● FeliCa模式下,支持106kbit/s 、212kbit/s和424kbit/s的通信波特率

● 集成了NFCIP-1的RF接口,传输速率高达424kbit/s

● 支持主机接口:

-SPI接口

-I2C接口

-串行UART

● 灵活的中断模式

● 低功耗模式 一硬件掉电模式 一软件掉电模式

● 当器件处于掉电模式时能够通过I2C、HSU和SPI接口自动唤醒

● 可编程定时器

● 石英晶体振荡器

● 2.7V~5.5V的电源

二、通信接口

PN532和主机之间有三种方式进行通信:I2C 、SPI、 HSU,这样几乎满足了所有的主控芯片。下图是通信方式的选择

需要注意的是:

SPI只能选择工作模式0。也就是说SPI的空闲电平为 高电平、数据总是在SCK的第一个边沿采样、数据发送格式总是LSB在前。只要NSS引脚拉低,芯片就会被唤醒。

HSU高速串口的默认配置是:8个数据位,1个停止位,LSB先发送,波特率115200,无校验

I2C模式下,默认的从机地址是0x48,先发送MSB,最高支持速率400KHz

三、数据包格式

PN532与主机之间的通信数据有固定的格式,只要我们按照规定的格式发送数据,就可以完全控制PN532。这样大大提高我们开发的效率

1、 正常数据包

00 序列头

00 FF 起始号

LEN 数据包的长度,包含TFI

LCS 数据长度校验和, LEN LCS=0

TFI 命令

PD0 PD1 … PDn 数据

DCS 数据校验和 TFI PD0 …PDn = 0

00 序列结尾

2、 PN532应答包

00 序列头

00 FF 起始号

00 FF 应答包

00 结束序列

3、 非应答包

00 序列头

00 FF 起始号

FF 00 没有应答

00 结束序列

4、 加长数据包

正常的情况下,只能发送256个字节的数据,PN532提供一种特殊的格式,可以发送更多的数据。当然我们在使用的时候要依据实际的情况去选择

00 序列头

00 FF 起始号

FF 正常模式下的包长度,这里是FF

FF 正常模式下的包长度校验和,这里是FF

LENM 数据包的长度高字节,

LENL 数据包的长度低字节,包含TFI

LCS 数据长度校验和,LENM LENL LCS=0

TFI 命令

PD0 PD1 … PDn 数据

DCS 数据校验和 TFI PD0 …PDn = 0

00 序列结尾

四、唤醒PN532

将芯片唤醒必须满足以下3个条件

1)PVDD引脚拉高

2)I2C模式下发送地址48h,SPI模式下将NSS拉低,串口模式下的其实数据头必须为0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,0xFD,0xD4,0x14,0x01,0x17,0x00

3)主机必须发送命令14 02 00(虚拟模式)或者14 01(正常模式)

五、读写S50卡片过程

1、唤醒模块,主机发送命令

0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,0xFD,0xD4,0x14,0x01,0x17,0x00

模块回应

0x00,0x00,0xFF,0x02,0xFE,0xD5,0x15,0x16,0x00

在唤醒模块的过程中,数据的包头有些特殊,而这个包头是有芯片手册中找到的。

注意,为了简略,下面的命令只包含数据包格式中的TFI\DATA,其他的请读者自行加上

2、扫描卡片并获取到卡片ID,主机发送

0xd4,0x4A(列出卡片),0x02(数量最多2个),0x00(波特率)

Response

0xd5,0x4b,0x02两个设备

0x01(一号设备),0x04,0x00,0x08,0x04(长度),id1,id2,id3,id4,

0x02(二号设备),0x04,0x00,0x00,0x04(长度),id1,id2,id3,id4,

3、验证A秘钥,主机发送

0xd4,0x40(交换数据),0x01(1号设备),0x60(验证A),0x03(地址)

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF(keyA),0xC1,0x32,0x77,0x03(id)

Response

0xd5,0x41,0x00(成功)

4、验证B秘钥,主机发送

0xd4,0x40(交换数据),0x01(1号设备),0x61(验证B),0x03(地址)

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF(keyB),0xC1,0x32,0x77,0x03(id)

Response

0xd5,0x41,0x00(成功)

5、读卡,主机发送

0xd4,0x40(交换数据),0x01(1号设备)1,0x30(读16Bytes),0x02(地址)

Response

0xd5,0x41,0x00(成功),byte1,btyte2…

6、写卡,主机发送

0xd4,0x40(交换数据),0x01(1号设备)1,0xA0(写16Bytes),0x02(地址),Data1,data2…

Response

0xd5,0x41,0x00(成功)

关注华清远见微信公众号,即可免费领取嵌入式资料&千元现金红包哦~

时间: 2024-10-12 10:07:21

讲解:NFC之PN532使用的相关文章

NFC:Arduino、Android与PhoneGap近场通信

NFC:Arduino.Android与PhoneGap近场通信(第一本全面讲解NFC应用开发的技术著作移动智能设备近距离通信编程实战入门) [美]Tom Igoe(汤姆.伊戈),Don Coleman(唐.科尔曼),Brian Jepson(布莱恩.杰普森) 著   金建刚 冯依 姚尚朗 译 ISBN 978-7-121-23997-7 2014年9月出版 定价:65.00元 244页 16开 编辑推荐 欢迎进入近场通信(NFC)的世界,这种飞速发展的新技术能通过无线信号在靠近的电子设备间进行

NFC学习笔记——三(在windows操作系统上安装libnfc)

本篇翻译文章: 这篇文章主要是说明如何在windows操作系统上安装.配置和使用libnfc. 一.基本信息 1.操作系统: Windows Vista Home Premium SP 2 2.硬件信息: System: Dell Inspiron 1720 Processor: Intel Core 2 Duo CPU T9300 @ 2.5GHz 2.5GHz System type: 32-bit Operating System 3.所需软件: 在windows操作系统上安装软件需要下列

NFC协议安全工具-NFCGUI发布

NFCGUI是一款图形化NFC协议安全工具,主要是针对Mifare卡进行安全检测,工具基于libnfc开发完成. NFCGUI暂时会分为两个版本: 1.公开版本 V0.2版本只针对了nfc-list/nfc-mfsetuid/nfc-mfclassic三个程序进行开发,并且将基于mfoc的破解功能去掉. 2.内部版本 包括了所有公开版本的功能,保留基于mfoc的破解功能! NFCGUI将会以开源的形式继续下去,我们会近期公开代码,但希望大家不要公开版本的规则不要对外发布带有破解功能的程序!谢谢

linux 安装 libnfc ,打开串口PN532

硬件准备:     USB转串口     4针杜邦线     PN532模块     IC卡一张(比如门禁卡,饭卡等) 软件准备:     Ubuntu 物理机一台     能够访问互联网 1,将PN532与USB转串口连接好,放一张IC卡靠近PN532模块      2,安装libnfc: [email protected]:~$ sudo apt-get install libusb-dev     [email protected]:~$ wget https://github.com/n

AngularJS入门讲解4:多视图,事件绑定,$resource服务讲解

上一课,大家知道,手机详细模板我们没有写出来,使用的是一个占位模板. 这一课,我们先实现手机详细信息视图,这个视图会在用户点击手机列表中的一部手机时被显示出来. 为了实现手机详细信息视图,我们将会使用$http来获取数据. 以下json对象就是手机详细的信息,我们会在手机详细信息视图中显示这些数据. { "additionalFeatures": "Contour Display, Near Field Communications (NFC),...", &quo

NFC模组,开发NFC功能 只要几条指令的事情

支持WIN8/WIN7 + android + wince +MCU 单片机 + linux + MAC  ...... 兼融所有平台,只要你会串口编程! SMC532模组,是一个集成了MCU+NFC的模组,采用了使用最为广泛的NFC芯片NXP的PN532作为NFC底层通信链路,保证了可靠性的兼容性,然后,MCU采用了ARM-M3的工业级(兼容军工级)单片机STM32作为主控,风火轮科技工程师倾注大量心血嵌入了完整高效的NFC应用协议栈,使得用户在开发NFC功能应用时更为简单,   只需要简单的

nfc开发

很多Android设备已经支持NFC(近距离无线通讯技术)了.本文就以实例的方式,为大家介绍如何在Android系统中进行NFC开发. Android NFC开发环境 使用硬件:Google Nexus S,北京大学学生卡.(ps:笔者本想使用公交一卡通进行测试,发现手机不能正确识别) 手机操作系统:Android ICS 4.04. 开发时,笔者从Google Play Store上下载了NFC TagInfo软件进行对比学习.所以我们可以使用任意一张能被TagInfo软件正确识别的卡做测试.

拓扑排序讲解

在这里我们要说的拓扑排序是有前提的 我们在这里说的拓扑排序是基于有向无环图的!!!. (⊙o⊙)…我所说的有向无环图都知道是什么东西吧.. 如果不知道,我们下面先来来说说什么是有向无环图. 所谓有向无环图,顾名思义是不存在环的有向图(至于有向图是什么不知道的在前面我们有一个图论讲解上都有). 点的入度:以这个点为结束点的边数. 点的出度:以这个点为出发点的边的条数. 拓扑序就是对于一个节点的一个排列,使得(u,v)属于E,那么u一定出现在v的前面.然而拓扑排序就是一个用来求拓扑序的东西. 对于左

形象易懂讲解算法I——小波变换

https://zhuanlan.zhihu.com/p/22450818?refer=dong5 最早发于回答:能不能通俗的讲解下傅立叶分析和小波分析之间的关系? - 咚懂咚懂咚的回答现收入专栏. 从傅里叶变换到小波变换,并不是一个完全抽象的东西,可以讲得很形象.小波变换有着明确的物理意义,如果我们从它的提出时所面对的问题看起,可以整理出非常清晰的思路. 下面我就按照傅里叶-->短时傅里叶变换-->小波变换的顺序,讲一下为什么会出现小波这个东西.小波究竟是怎样的思路.(反正题主要求的是通俗形