NXP NCF3321 APDU 检测卡示例讲解

1.  前言

        NCF3321 是世平集团代理的 NXP 所研发的新一代车规级 NFC 前端 IC,相比上代 NFC 前端 IC 性能提升巨大、支持多类型多协议卡检测、支持手机模拟 NFC 识别、支持手机与卡共同检测、宽范围工作温度工作更加稳定。

        NCF3321 是一款高度集成的高性能、完全符合 NFC 论坛标准的 13.56 MHz 非接触式通信前端 IC,它采用了出色的调制和解调概念,完全集成了不同类型的非接触式通信方法和协议。NCF3321 可确保与下一代 NFC 手机的最大互操作性。NCF3321 针对门把手应用进行了优化,并实现了具有超低功耗卡检测的大功率发射器功能。下图为世平集团所设计 NCF3321Demo 板需要搭配 S32K144EVB 使用。

       由于环境搭建、工程配置等已在博文《NXP NCF3321 卡保护应用示例讲解》中介绍,因此不在此赘述,本文将从代码流程讲述发现卡与 APDU 应用。





2.  APDU

2.1  APDU 简介

       APDU(Application Protocol Data Unit——应用协议数据单元)。PDU(Protocol Data Unit)协议数据单元是指对等层次之间传递的数据单位,协议数据单元(Protocol Data Unit)物理层的 PDU 是数据位(bit),数据链路层的 PDU 是数据帧(frame),网络层的 PDU 是数据包(packet),传输层的 PDU 是数据段(segment),其他更高层次的 PDU 是数据(data)。


2.2  APDU命令与响应格式

2.2.1 命令格式

APDU命令由命令头和命令体组成:

命令头

命令体

CLA

INS

P1

P2

Lc

DATA

Le

       

命令可以被分为以下四种情况:

格式

命令组成

CASE 1

CLA INS P1 P2

CASE 2

CLA INS P1 P2 Le

CASE 3

CLA INS P1 P2 Lc Data

CASE 4

CLA INS P1 P2 Lc Data Le

  • CASE 1:
    • 命令中没有数据送到卡(Lc)中,也没有数据从卡中返回(Le)。
    • 不含安全报文的命令:CLA|INS|P1|P2。
    • 含安全报文的命令:CLA|INS|P1|P2|Lc|MAC。
    • 注:Lc=MAC 的长度,4 字节。

  • CASE 2:
    • 命令中没有数据发送到卡(Lc)中,有数据从卡中返回(Le)。
    • 不含安全报文的命令:CLA|INS|P1|P2|Le。
    • 含安全报文的命令:CLA|INS|P1|P2|Lc|MAC|Le。
    • 注:Lc=MAC 的长度,4 字节。

  • CASE 3:
    • 命令中有数据送到卡(Lc)中,没有数据从卡中返回(Le)。
    • 不含安全报文的命令:CLA|INS|P1|P2|Lc|Data。
    • 含安全报文的命令:CLA|INS|P1|P2|Lc|Data+MAC。
    • 注:Lc=数据的长度+ MAC 的长度(4 字节)。

  • CASE 4:
    • 命令中既有数据送到卡(Lc)中,也有数据从卡中返回(Le)。
    • 不含安全报文的命令:CLA|INS|P1|P2|Lc|Data|Le。
    • 含安全报文的命令:CLA|INS|P1|P2|Lc|Data+MAC|Le。
    • 注:Lc=数据的长度+ MAC 的长度(4 字节)。


2.2.2 通用 APDU 命令集

指令名称

CLA

INS

说明

READ BINARY

00/04

B0

读出带有透明结构的 EF 内容的一部分。

WRITE BINARY

 

D0

将二进制值写入 EF。

UPDATE BINARY

00/04

D6

启动使用在命令 APDU 中给出的位来更新已呈现在 EF 中的位。

ERASE BINART

 

0E

顺序地从给出的偏移开始,将 EF 的内容的一部分置为其逻辑擦除的状态。

READ RECORD

00/04

B2

给出了 EF 的规定记录的内容或 EF 的一个记录开始部分的内容。

WRITE RECORD

 

D2

WRITE RECORD命令报文启动下列操作之一:

a.写一次记录;

b.对早已呈现在卡内的记录数据字节与在命令 APDU 中给出的记录数据字节进行逻辑“或”运算;

c.对早已呈现在卡内的记录数据字节与在命令 APDU 中给出的记录数据字节进行逻辑“和”运算。

APPEND RECORD

00/04

E2

启动在线性结构 EF 的结束端添加记录,或者在循环结构的 EF 内写记录号 1。

UPDATE RECORD

00/04

DC

启动使用命令 APDU 给出的位来更新特定记录。

GET DATA

 

CA

可在当前上下文(例如应用特定环境或当前 DF)范围内用于检索一个原始数据对象,或者包含在结构化数据对象中所包含的一个或多个数据对象。

PUT DATA

 

DA

可在当前上下文(例如应用特定环境或当前 DF)范围内用于存储一个原始数据对象,或者包含在结构化数据对象中的一个或多个数据对象正确的存储功能(写一次和/或更新和/或添加)通过数据对象的定义和性质来引出。

SELECT FILE

00

A4

设置当前文件后续命令可以通过那个逻辑信道隐式地引用该当前文件。

VERIFY

00/04

20

启动从接口设备送入卡内的验证数据与卡内存储的引用数据(例如口令)进行比较。

INTERNAL AUTHENTICATE

00

88

启动卡使用从接口设备发送来的询问数据和在卡内存储的相关秘密(例如秘钥)来计算鉴别数据,当该相关秘密被连接到 MF 时,命令可以用来鉴别整个卡当该相关秘密被连接到另一个 DF 时命令可以用来鉴别那个 DF。

EXTERNAL AUTHENTICATE

00

82

使用卡计算的结果(是或否)有条件地来更新安全状态而该卡的计算是以该卡先前发出(例如通过 GET CHALLENGE 命令)的询问在卡内存储的可能得秘密密匙以及接口设备发送的鉴别数据为基础的。

GET CHALLENGE

00

84

要求发出一个询问(例如随机数)以便用于安全相关的规程(例 EXTERNAL AUTHENTICATE 命令)。

MANAGE CHANNEL

 

70

打开和关闭逻辑信息。

GET RESPONSE

00

C0

用于从卡发送至接口设备用可用的协议不能传送的那一些的 APDU(或 APDU 的一部分)。

ENVOLOPE

80

C2

用来发送那些不能由有效协议来发送的 APDU 或 APDU 的一部分或任何数据串。



2.2.3 响应格式

APDU响应格式:

数据

状态字

DATA

SW1

SW2

DATA:想用数据。

SW1、SW2:卡片执行命令的返回值。


2.2.4 常见状态字

状态字

(SW1SW2)

含义

状态字

(SW1SW2)

含义

状态字

(SW1SW2)

含义

9000

执行成功

6981

命令与文件结构不相容,当前文件非所需文件

6A86

不正确的参数(P1,P2)

6100

数据被截断

6982

要 PIN 验证

6A88

引用数据没找到

6200

警告,信息未提供

6983

文件无效,PIN 被锁定

6B00

错误的参数(P1,P2)

6281

警告,回送数据可能出错

6984

数据无效,随机数无效,引用的数据无效

6C00

长度错误

(Le)

6282

警告,文件长度小于 Le

6985

条件不满足

6D00

INS 不支持

6283

应用无效

6986

不允许该命令

6E00

CLA 不支持

6284

FCI 格式与 P2 指定的不符

6987

安全消息丢失

6F00

位置错误

6300

认证失败

6988

安全消息不正确

9301

资金不足

63Cx

校验失败

(x- 允许重试次数)

6999

应用选择失败

9302

MAC 无效

6400

原因不明

6A80

数据错误

9303

应用被永久锁定

6581

内存失败

6A81

功能不支持

9401

交易金额不足

6700

长度不对

6A82

文件找不到

9402

交易计数器达到最大值

6900

不能处理

6A83

记录找不到

9403

秘钥索引不支持

6901

命令不接受

(无效状态)

6A84

没有足够的空间

9406

所需 MAC 不可用

 

 

3.  检测卡应用示例

        检测卡应用示例有使用发现循环(WithDiscLoop/ WithDiscLoop_Release)和不使用发现循环(NoDiscLoop/ NoDiscLoop_Resease)两种检测机制,两种检测机制可以工程内切换选择不同的预定义宏来进行切换编译不同代码执行检测机制。


3.1   使用发现循环检测流程

使用发现循环检测的应用具有轮询以下列出技术的特性。在轮询之前,发现循环将会执行低功耗检卡操作(取决于运行时的配置)。

  • 无源 NFC-A
  • 无源 NFC-B
  • 无源 NFC-F 212
  • 无源 NFC-F 424
  • 无源 NFC-V
  • 设备会显示或打印发现的标签信息(例如:UID,SAK,Mifare 卡的产品类型),并在外部启动器或读取器将其作为目标激活时的打印信息。
  • 当发现多种技术时,示例将选择发现的第一种技术进行解析。
  • 每当发现多个设备时示例将激活在索引 0 的设备。

使用工程配置内的“WithDiscLoop”或“WithDiscLoop_Release”来激活该特性。


使用发现循环流程示意图

 

3.2  不使用发现循环检测流程

       使用工程配置内的“NoDiscLoop”或“NoDiscLoop_Resease”来禁用发现循环特性。那样将会使用一种简单的方式轮询发现卡与卡激活,以下卡类型将会被发现:

  • ISO 14443A
  • ISO 14443B
  • Felica 212
  • Felica 424
  • ISO 15693



不使用发现循环流程示意图

这个示例应用程序不符合 NFC 论坛,但是它可以选择较小的代码尺寸。然而,它并不遵循 NFC 论坛兼容的行为。

这个示例显示A 类型、B 类型、F 类型和V 类型的卡信息(例如 UID,SAK,产品类型)。

 

  

4.  运行演示

4.1  工程配置

        打开 EB 配置工具,选择 File->Import->General->Existing Projects into Workspace 将工程导入到 EB 配置工具查看 S32K144EVB 的 port 口配置,如需修改配置也再次修改。在导入时需勾选 Search for nested projects 选项,如下图所示。

 

打开 Port 模块即可观察到工程的相关配置,如需修改相关配置也在此页面。




4.2  代码编译

        打开 S32 Design Studio for ARM Version 2018.R1,选择 File->Import->General->Existing Projects into Workspace 将工程导入到 IDE 内,同样在导入时需勾选 Search for nested projects 选项。打开工程列表,双击 AutosarEnvironment.bat 打开代码页,将红框内代码路径更改成安装位置路径后即可编译工程生成 .elf 文件。

 

 

4.3  调试演示

生成 .elf 文件后即可进行 debug 测试,测试结果如下所示。


                                                                                                                                     A 类型卡检测结果

  
B 类型卡检测结果


V 类型卡检测结果


F 类型卡检测结果

        综上所述 NCF3321 卡检测应用示例可精确检测各类型卡片,并与支持 APDU 功能卡片进行 APDU 通讯。如想了解 NCF3321 卡检测应用示例更多资料与设计,请联系我们 atu.sh@wpi-group.com

 

5.  参考文献

[1] DS787721-Data Sheet NCF3321(2.1).pdf,NXP

[2] UM-SCA11222-AUTOSAR_Demonstration_Guideline_for_aNFC_Reader_Library.pdf,NXP

[3] UM-SCA11840-RTD_AUTOSAR_Demonstration_Guideline_for_aNFC_Reader_Library.pdf,NXP

 

欢迎在博文下方留言评论,我们会及时回复您的问题如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com
作者:Hobo /许宁

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论