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次,發文人進小黑屋喔~

評論