CPU 卡(Central Processing Unit Card)是一种带有微处理器的智能卡,广泛应用于身份识别、金融支付、交通卡、门禁系统等领域。相比于传统的存储卡,CPU 卡具备更高的安全性、数据处理能力和多种通信协议支持,使其成为智能卡技术的核心之一。

本篇文章将详细解析 CPU 卡的接口特性、传输协议,并结合实际应用,深入探讨其读写程序设计方法,以帮助工程师在开发过程中更好地理解和应用 CPU 卡技术。
一、CPU 卡的接口特性
CPU 卡的接口主要用于与外部设备(如读卡器、POS 机、ATM 机等)进行通信,按照物理接口和逻辑接口分类。
1.1 物理接口(Physical Interface)
CPU 卡的物理接口符合 ISO/IEC 7816-2 标准,定义了 8 个接触式引脚:
引脚
符号
说明
|
|
|
1 | VCC | 电源(通常为 3.3V 或 5V) |
2 | RST | 复位信号 |
3 | CLK | 时钟信号(通常为 3.57 MHz 或 4.92 MHz) |
4 | RFU | 预留(未来用途) |
5 | GND | 接地 |
6 | VPP | 旧版本卡片编程电压(现代卡片已不使用) |
7 | I/O | 串行数据输入/输出 |
8 | RFU | 预留(未来用途) |
其中,VCC、GND、I/O、CLK、RST 是最常用的引脚,用于 CPU 卡与读卡器的基础通信。
1.2 逻辑接口(Logical Interface)
逻辑接口主要定义了 CPU 卡的数据传输方式,常见的通信模式包括:
接触式通信(Contact Mode):
非接触式通信(Contactless Mode):
双界面通信(Dual Interface Mode):
既支持接触式通信,也支持非接触式通信。
适用于 金融支付 等多用途场景。
二、CPU 卡的传输协议
CPU 卡的传输协议主要涉及初始化、数据交换、加密认证等过程,主要遵循 ISO/IEC 7816 标准。
2.1 ISO/IEC 7816 传输协议
CPU 卡的数据通信采用 APDU(Application Protocol Data Unit) 结构,该协议分为 T=0 和 T=1 两种传输模式。
(1)T=0:异步字节传输协议
特性:
通信过程:
发送 CLA(指令类别)、INS(指令码)、P1P2(参数)、LC(数据长度)等指令数据。
等待 CPU 卡处理并返回响应(SW1 SW2 状态码)。
(2)T=1:块传输协议
特性:
通信过程:
读卡器与 CPU 卡进行握手,建立逻辑链路。
发送和接收数据块,包含错误检测机制(LRC/CRC)。
三、CPU 卡的读写程序设计
CPU 卡的读写程序设计主要包括初始化、身份认证、数据读写等步骤,通常使用 C 语言、Java、Python 进行开发,并借助 PC/SC API 或 Windows/Linux 智能卡接口 进行操作。
3.1 读卡器初始化
在 Windows 下,可以使用 WinSCard API 进行智能卡操作:
c复制编辑#include <winscard.h>#include <stdio.h>int main() { SCARDCONTEXT hContext; LONG result = SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &hContext); if (result != SCARD_S_SUCCESS) { printf("智能卡初始化失败\n"); return 1; } printf("智能卡初始化成功\n"); SCardReleaseContext(hContext); return 0;}
3.2 APDU 命令发送
APDU 命令用于控制 CPU 卡的操作,如读写数据、身份验证等。
APDU 命令结构:
字段
长度(字节)
说明
|
|
|
CLA | 1 | 指令类别 |
INS | 1 | 指令码(如 0xA4 表示选择文件) |
P1 | 1 | 参数 1 |
P2 | 1 | 参数 2 |
LC | 1 | 发送数据长度(可选) |
Data | 可变 | 发送数据 |
LE | 1 | 期望返回数据长度 |
示例:选择文件(SELECT FILE)
c复制编辑BYTE select_file[] = {0x00, 0xA4, 0x00, 0x00, 0x02, 0x3F, 0x00}; BYTE response[256]; DWORD response_len = sizeof(response);SCardTransmit(hCard, SCARD_PCI_T0, select_file, sizeof(select_file), NULL, response, &response_len);
3.3 读取 CPU 卡数据
以读取**用户信息文件(EF)**为例:
c复制编辑BYTE read_file[] = {0x00, 0xB0, 0x00, 0x00, 0x10}; BYTE response[256]; DWORD response_len = sizeof(response);SCardTransmit(hCard, SCARD_PCI_T0, read_file, sizeof(read_file), NULL, response, &response_len);printf("读取到的数据: ");for(int i = 0; i < response_len; i++) { printf("%02X ", response[i]);}
四、总结
CPU 卡具有接触式、非接触式、双界面等不同的接口类型,满足不同应用需求。
数据传输协议包括 T=0(字节传输)和 T=1(块传输),分别适用于不同应用场景。
读写程序设计涉及智能卡初始化、APDU 命令发送、数据读写,通常使用 C 语言或 Python 进行开发。
CPU 卡的应用广泛,涉及金融、交通、身份识别等多个领域,未来将继续向更高安全性、更高速的数据传输方向发展。