一、简介 PN532是一个高度集成的非接触读写芯片,它包含80C51微控制器内核,集成了13.56MHz下的各种主动/被动式非接触通信方法和协议。 本文引用地址:http://www./Column/7286.html 工作模式: ● 读写器模式,支持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(成功) ------------------------------------------------------------- |
|
来自: ycsyhrp2018 > 《杂收》