stm32NFC芯片PN532的使用.docx
- 文档编号:3938557
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:7
- 大小:40.13KB
stm32NFC芯片PN532的使用.docx
《stm32NFC芯片PN532的使用.docx》由会员分享,可在线阅读,更多相关《stm32NFC芯片PN532的使用.docx(7页珍藏版)》请在冰豆网上搜索。
stm32NFC芯片PN532的使用
stm32——NFC芯片--PN532的使用
一、NFC简介
NFC(NearFieldCommunication)近场通信,是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内。
其传输速度有106Kbit/秒、212Kbit/秒或者424Kbit/秒三种。
目前近场通信已通过成为ISO/IECIS18092国际标准、ECMA-340标准与ETSITS102190标准。
NFC近场通信技术是由非接触式射频识别(RFID)及互联互通技术整合演变而来,在单一芯片上结合感应式读卡器、感应式卡片和点对点的功能,能在短距离内与兼容设备进行识别和数据交换。
工作频率为13.56MHz.但是使用这种手机支付方案的用户必须更换特制的手机。
目前这项技术在日韩被广泛应用。
手机用户凭着配置了支付功能的手机就可以行遍全国:
他们的手机可以用作机场登机验证、大厦的门禁钥匙、交通一卡通、信用卡、支付卡等等。
二、PN532概述
PN532是一个高度集成的非接触读写芯片,它包含80C51微控制器内核,集成了13.56MHz下的各种主动/被动式非接触通信方法和协议。
PN532传输模块支持6种不同的工作模式:
读写器模式,支持ISO/IEC14443A/MIFARE®机制
读写器模式,支持FeliCa机制
读写器模式,支持ISO/IEC14443B机制
卡操作模式,支持ISO14443A/MIFARE®机制
卡操作模式,FeliCa机制
ISO/IEC18092,ECM340点对点
支持主机接口:
-SPI接口
-I2C接口
-串行UART
PN532的操作形式如下图所示:
卡操作模式
读写器模式
三、PN532模块搭配ISO/IEC14443TypeA-4卡片
我使用的是PN532模块搭配ISO/IEC14443TypeA-4卡,使用串口模式。
这个卡是使用APDU(ApplicationProtocolDataUnit--应用协议数据单元)的指令形式操作的。
我拿到的卡片是由发卡商提供的,发卡指的是卡的初始化,即卡号写入和密钥写入的过程,完成后卡片才可发放出去;
发卡:
∙注入卡号,只能注入一次;
∙注入密钥,各个密钥只能注入一次;
接口调用:
S>C0F5000100001F//卡号
S>C0F50002D95F77B378C735F17A019EFA6E//外部认证密钥 S>C0F50003103A748687BFA62A808B4C87AF0EE4B468//充值密钥 S>C0F500041040CFE895E6076C932422C04F448C0CA1//充值通讯密钥 S>C0F5000510C501CBE8A849B3E7F638E7E096E560EF//消费密钥 S>C0F50006104D2A98A9165C79F5A54C862A367E4969//存储密钥 我使用该卡的目的是做一个刷卡饮水的系统,其中涉及卡片的步骤为: 激活----寻卡-----读卡号----写入外部认证----刷卡消费 1、激活 PN532自带一个休眠功能,要使用PN532对NFC卡片进行读写的时候要激活一下(唤醒),一般放在程序的开头,调用一次即可。 激活PN532发送的命令(十六进制)为: ->55550000000000000000000000000000FF03FDD414011700 线没接错的话就会返回: 2、寻卡 寻卡是涉及到卡片的第一个步骤,nfc对卡的操作都是先寻找卡的,若寻不到卡,则后续的读写操作将无法进行;反之,若寻到卡,则后续的读写操作过程中将不再对卡片进行身份确认。 寻卡命令: ->0000FF04FCD44A0100E100 上面的数据中: 0000FF----帧头,与卡相关的所有命令都要包含该头; 04----包长度,即“D44A0100”的长度; FC----包长度校验: 0x100-包长度;此处0xFC=0x100-0x04; D4----方向标识码: 数据方向是stm32(主机)至PN532 4A----寻卡命令标识码 01----卡数量,最大是2,PN532一次只能同时处理两张卡 00----PN532工作模式: 106kbpstypeA(ISO/IEC14443TypeA) E1----发送的数据校验: 等于: 0x100-(0xff&(0xD4+0x4A+0x01+0x00)) 00----暂时没发现有什么卵用; 对于我的卡,若寻到卡,则返回: 返回的命令也是有规则可循的,但你看上面太长了,对返回的命令部分,在下面再讨论吧(下面短)。 3、读卡号 接口调用: S>C0F1000108 所以读卡号的命令是: ->0000ff08f8d44001c0f10001083100 看吧: 0000ff----帧头;08----包长度(d44001c0f1000108);f8----0x100-0x08;d4----主控至PN532;40----数据读写命令;01----卡1;c0f1000108----读卡号命令;31----数据校验: 等于: 0x100-(0xff&(0xd4+0x40+0x01+0xc0+0xf1+0x00+0x01+0x08)) 我的卡,返回的命令码是: 现在短了,可以分析一下啦: 0000FF00FF00----ACK(应答)指令码: 千万别以为收到应答码就以为卡片正常读写了,因为不正常读写也会收到应答码哟。 原因是你操作PN532芯片,只要芯片工作正常,都会有应答码的啦。 所以还得往下看,看后边的命令码是否符合规则。 0000FF----还记得吗? 帧头----与卡相关的所有命令都要包含该头,所以无论是发送还是接收,都要包含帧头的。 0D----包长度,长度13(从D5到9000正好是13) F3----包长度校验 D5----方向标识码: PN532至主控 4100----读正确标志位,若为其它如4117之类的数据,就要注意了哦,说明读出错辣。 620000000000001F----卡号;卡号为8字节BCD编码,最大卡号支持16位数字。 卡号小于16位数字时填充F。 9000----APDU命令正确时的通用码子(错误时为6900); D9----返回的数据校验: 等于: 0xff-0xff&(SUM(0000FF0DF3D54100620000000000001F9000)) 4、外部认证 为了安全考虑,卡片需要进行外部认证。 其步骤如下: ∙外部设备从卡片获取16字节随机数; ∙外部设备使用“外部认证密钥”对随机数使用SM4_ECB方式加密; ∙外部设备将加密结果送入卡中,卡片对其进行解密,并对比随机数与解密结果是否一致; ∙卡片返回认证结果。 接口调用: S>C084000010//读取随机数 S>C082000010EC15BF495C66D569C654C02AFBCAA3A2//写入加密结果指令 所以主控首先要获取卡片的随机数: (命令码解析规则和前述一样,在此不再赘述啦) ->0000ff08f8d44001c0840000109700 返回: 分析得到卡片发来的随机数为: 155E1EA0047767254B0BE49B7D602105 (当然,每次获取的数都不会相同) 接着主控获取上面那串16字节随机数,使用已经写好的SM4加密算法对其进行加密。 加密后的数据如下: A5967E70C3B8559EBBA7E4BA12957D2E 然后外部设备将加密结果送入卡中,写入加密结果的指令为: ->0000ff18e8d44001c082000010A5967E70C3B8559EBBA7E4BA12957D2EB000 返回: 看到9000就可以安心了,外部认证成功! 5、刷卡消费 出于安全考虑,刷卡消费过程还需要使用消费密钥进行数据的加解密,步骤如下: ∙外部设备从卡片获取14字节随机数 ∙外部设备使用“消费密钥”加密14字节随机数+2字节消费金额,组成16字节消费报文; ∙外部设备将加密结果发送至卡片; ∙卡片解密消费报文,判断消费报文是否正确,执行消费,并拼接“DONE”+2字节消费金额+“AMOUNT”+4字节余额,用消费密钥加密后返回给外部设备; ∙外部设备调用解密算法解密收到的报文,并判断对比是否为““DONE”+2字节消费金额+“AMOUNT”+4字节余额”的格式,若正确,则开水阀打开。 接口调用: S>C08400000e S>C08500001036E9DEBBFB21A6CEAEA791ECF 余额: 654.60 所以主控首先要获取卡片的14字节随机数,命令如下: ->0000ff08f8d44001c08400000e9900 返回: 分析得到卡片发来的14字节随机数为: 37F310E1EDCC07F9344B39501A82 再加上两字节的消费金额,这里我假定消费了1分钱,即两字节为: 0x000x01 所以外部设备使用消费密钥,调用SM4算法对: 37F310E1EDCC07F9344B39501A820001 进行加密,加密后的数据如下: 36E9DEBBFB21A6C6482568EAEA791ECF 然后外部设备将加密结果发送至卡片,命令如下: ->0000FF18E8D44001C08500001036E9DEBBFB21A6C6482568EAEA791ECF4700 返回: 即卡片拼接“DONE”+2字节消费金额+“AMOUNT”+4字节余额,并用消费密钥加密后的发送给外部设备的数据为: F1ED7F4CD51EAAD535E662636E89125D 最后外部设备再对该串密文使用消费密钥,调用SM4解密算法进行解密,得到: 444f4e450001414d4f554e540000ffb4 其中: 444f4e45----DONE(ASCII码的十六进制正好为444f4e45); 0001----2字节消费金额,即一分钱 414d4f554e54----AMOUNT(ASCII码的十六进制正好为414d4f554e54) 0000ffb4----4字节余额,即余额为654.60元
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- stm32NFC 芯片 PN532 使用