stm32NFC芯片PN532的使用Word格式文档下载.docx

上传人:b****3 文档编号:16845500 上传时间:2022-11-26 格式:DOCX 页数:7 大小:40.13KB
下载 相关 举报
stm32NFC芯片PN532的使用Word格式文档下载.docx_第1页
第1页 / 共7页
stm32NFC芯片PN532的使用Word格式文档下载.docx_第2页
第2页 / 共7页
stm32NFC芯片PN532的使用Word格式文档下载.docx_第3页
第3页 / 共7页
stm32NFC芯片PN532的使用Word格式文档下载.docx_第4页
第4页 / 共7页
stm32NFC芯片PN532的使用Word格式文档下载.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

stm32NFC芯片PN532的使用Word格式文档下载.docx

《stm32NFC芯片PN532的使用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《stm32NFC芯片PN532的使用Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。

stm32NFC芯片PN532的使用Word格式文档下载.docx

读写器模式,支持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//卡号

<

R9000

C0F50002D95F77B378C735F17A019EFA6E//外部认证密钥

C0F50003103A748687BFA62A808B4C87AF0EE4B468//充值密钥

C0F500041040CFE895E6076C932422C04F448C0CA1//充值通讯密钥

C0F5000510C501CBE8A849B3E7F638E7E096E560EF//消费密钥

C0F50006104D2A98A9165C79F5A54C862A367E4969//存储密钥

  我使用该卡的目的是做一个刷卡饮水的系统,其中涉及卡片的步骤为:

激活----寻卡-----读卡号----写入外部认证----刷卡消费

  1、激活

  PN532自带一个休眠功能,要使用PN532对NFC卡片进行读写的时候要激活一下(唤醒),一般放在程序的开头,调用一次即可。

  激活PN532发送的命令(十六进制)为:

->

55550000000000000000000000000000FF03FDD414011700

  线没接错的话就会返回:

D0000FF00FF000000FF02FED5151600

  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----暂时没发现有什么卵用;

  对于我的卡,若寻到卡,则返回:

D0000FF00FF000000FF20E0D54B01010084200A0123456789ABCDEFAA550E78778403665257453250524F4D2900

  返回的命令也是有规则可循的,但你看上面太长了,对返回的命令部分,在下面再讨论吧(下面短)。

  3、读卡号

C0F1000108

R620000000000001F9000

  所以读卡号的命令是:

0000ff08f8d44001c0f10001083100

  看吧:

0000ff----帧头;

08----包长度(d44001c0f1000108);

f8----0x100-0x08;

d4----主控至PN532;

40----数据读写命令;

01----卡1;

c0f1000108----读卡号命令;

31----数据校验:

(0xd4+0x40+0x01+0xc0+0xf1+0x00+0x01+0x08))

  我的卡,返回的命令码是:

D0000FF00FF000000FF0DF3D54100620000000000001F9000D900

  现在短了,可以分析一下啦:

  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方式加密;

∙外部设备将加密结果送入卡中,卡片对其进行解密,并对比随机数与解密结果是否一致;

∙卡片返回认证结果。

C084000010//读取随机数

R1B93C63291A3658B2ED75D9049B9344F9000

C082000010EC15BF495C66D569C654C02AFBCAA3A2//写入加密结果指令

R9000//验证成功

  所以主控首先要获取卡片的随机数:

(命令码解析规则和前述一样,在此不再赘述啦)

0000ff08f8d44001c0840000109700

  返回:

D0000FF00FF000000FF15EBD54100155E1EA0047767254B0BE49B7D60210590004A00

  分析得到卡片发来的随机数为:

  155E1EA0047767254B0BE49B7D602105    (当然,每次获取的数都不会相同)

  接着主控获取上面那串16字节随机数,使用已经写好的SM4加密算法对其进行加密。

加密后的数据如下:

  A5967E70C3B8559EBBA7E4BA12957D2E

  然后外部设备将加密结果送入卡中,写入加密结果的指令为:

0000ff18e8d44001c082000010A5967E70C3B8559EBBA7E4BA12957D2EB000

D0000FF00FF000000FF05FBD5410090005A00

  看到9000就可以安心了,外部认证成功!

  5、刷卡消费

  出于安全考虑,刷卡消费过程还需要使用消费密钥进行数据的加解密,步骤如下:

∙外部设备从卡片获取14字节随机数

∙外部设备使用“消费密钥”加密14字节随机数+2字节消费金额,组成16字节消费报文;

∙外部设备将加密结果发送至卡片;

∙卡片解密消费报文,判断消费报文是否正确,执行消费,并拼接“DONE”+2字节消费金额+“AMOUNT”+4字节余额,用消费密钥加密后返回给外部设备;

∙外部设备调用解密算法解密收到的报文,并判断对比是否为““DONE”+2字节消费金额+“AMOUNT”+4字节余额”的格式,若正确,则开水阀打开。

C08400000e

R37F310E1EDCC07F9344B39501A829000

C08500001036E9DEBBFB21A6CEAEA791ECF

RF1ED7F4CD51EAAD535E662636E89125D9000

余额:

654.60

  所以主控首先要获取卡片的14字节随机数,命令如下:

0000ff08f8d44001c08400000e9900

D0000FF00FF000000FF13EDD5410037F310E1EDCC07F9344B39501A829000E200

  分析得到卡片发来的14字节随机数为:

  37F310E1EDCC07F9344B39501A82

  再加上两字节的消费金额,这里我假定消费了1分钱,即两字节为:

0x000x01

  所以外部设备使用消费密钥,调用SM4算法对:

37F310E1EDCC07F9344B39501A820001 

进行加密,加密后的数据如下:

  36E9DEBBFB21A6C6482568EAEA791ECF

  然后外部设备将加密结果发送至卡片,命令如下:

0000FF18E8D44001C08500001036E9DEBBFB21A6C6482568EAEA791ECF4700

D0000FF00FF000000FF15EBD54100F1ED7F4CD51EAAD535E662636E89125D9000F900

  即卡片拼接“DONE”+2字节消费金额+“AMOUNT”+4字节余额,并用消费密钥加密后的发送给外部设备的数据为:

  F1ED7F4CD51EAAD535E662636E89125D 

  最后外部设备再对该串密文使用消费密钥,调用SM4解密算法进行解密,得到:

  444f4e450001414d4f554e540000ffb4

  其中:

     444f4e45----DONE(ASCII码的十六进制正好为444f4e45);

     0001----2字节消费金额,即一分钱

     414d4f554e54----AMOUNT(ASCII码的十六进制正好为414d4f554e54)

     0000ffb4----4字节余额,即余额为654.60元

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1