65.9K
CodeProject 正在变化。 阅读更多。
Home

智能卡直接串行接口

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.90/5 (15投票s)

2010年11月2日

CPOL

3分钟阅读

viewsIcon

90833

downloadIcon

2407

如何在应用程序中集成智能卡接口。

引言

本文介绍了一种基于串口界面实现智能卡控制应用的方法。
所使用的硬件接口被广泛称为 "Phoenix",我将介绍关于它的硬件架构,以及如何在不需要使用 PC/SC 规范的情况下将其与 Visual Basic 应用程序集成。
另外,本文的目标是展示如何直接与智能卡通过之前提到的硬件界面进行交互。

每个智能卡供应商都基于 ISO-7816 规范实现其自己的命令集,称为 APDU(应用协议数据单元)。通过这种方式,我们可以使用正确的 APDU 命令集来探索每种类型的智能卡;这样,我们可以将 Mifare、TIBC 或任何其他类型的智能卡用作 RFID 标签,以便通过此 VB 界面进行身份验证。

要使其工作,只需要为电路提供 5V 连续电流和一个 RS-232 PC 串口界面。

接口

Phoenix 接口是一个带有 9 针串口插孔和 10 针智能卡连接器(引脚 4、6 和 8 拔掉)的串口界面。 该接口刚刚开发出来,是该项目的基础。
它由一个 10 针智能卡模块、一个用于将 RS-232(串口)电平转换为 TTL 电压的 MAX232 IC、一个用作脉冲发生器的 3.579 Mhz 石英晶体、一个电压调节器以及几个用作上拉/下拉电阻或电压发生器的电容器、电阻器和 LED 组成。

串口引脚连接在 phoenix 电子原理图中显示

phoenix.JPG

思路是将 Tx 和 Rx 串口引脚与由双向逻辑管理的智能卡接口 I/O 引脚连接。
另外,智能卡复位引脚通过 MAX232 连接到 RTS 串口线,因此读取 ATR 就像在几个时钟周期内将此线驱动到反向电压电平一样容易。

智能卡连接器引脚排列显示在此表中

智能卡模块引脚排列

引脚 # 引脚名称 引脚描述
1 VCC +5v 或 3.3v 直流
2 Reset 卡复位
3 时钟 卡时钟
5 GND 地线
7 I/O 输入/输出 [数据]
9,10 AS 存在开关

Using the Code

驻留在主机上的程序负责串口的初始化和读/写过程。 准备好接受命令的有限状态机,以下是序列

一旦初始化了串口,使接口准备好进行读/写仅包含 4 个步骤

  1. 给智能卡供电; 这是通过连接 RS-232 接口来实现的,Vcc 智能卡引脚将直接由 Vcc 串口引脚供电。
  2. 初始化串行通信; 该接口需要初始化为 9600 波特率、偶校验、8 个数据位和 1 个校验位

    Serial.JPG

  3. 复位智能卡; 您可以通过在串口 4 引脚上施加电压然后关闭电压来执行此操作。 大约 40000 个周期后(取决于卡),您可以在串口缓冲区寄存器中读取 ATR; 因此,100 条消息就足够了。
    ObjSerial.RTSEnable = True
    ObjSerial.RTSEnable = False
    Sleep (100)
    buffer$ = ObjSerial.Input

    将 ATR byte[] 转换为成对的 stringInterpretarHex 函数完成

    Private Function InterpretarHex(buffer, Optional conEspacios As Boolean) As String
    
    	Dim sol As String
    	Dim byteAux
      
    	If Len(buffer) > 0 Then
    		byteAux = Hex(Int(Asc(Mid(buffer, 1, 1))))
    		sol = byteAux
    		For i = 2 To Len(buffer)
    			byteAux = Hex(Int(Asc(Mid(buffer, i, 1))))
    			If Len(byteAux) = 1 Then byteAux = "0" + byteAux
    			If (conEspacios) Then
    				sol = sol + " " + byteAux
    			Else
    				sol = sol + byteAux
    			End If
    		Next i
    	End If
      
    	InterpretarHex = sol
      
    End Function	
  4. 读取串口缓冲区会获取复位应答字节 (ATR)。
    buffer$ = ObjSerial.Input

ATR.JPG

一旦读取了串口缓冲区并将 RTS 引脚置于低电平,该接口就可以传输所需的 APDU 命令了。
这是一个 APDU 示例

ObjSerial.RTSEnable = False

For i = 1 To (Len(txtCmd.Text) / 2)
    ObjSerial.Output = Chr(Comanda(Mid$(txtCmd.Text, i, 2)))
Next i

Command.JPG

buffer$ = ObjSerial.Input
txtResponse.Text = InterpretarHex(buffer$)

Response.JPG

这是工作项目的图片

Project.JPG

关注点

此软件/硬件界面可用于将智能卡登录集成到您可以想到的任何应用程序中,或者您可以将其用于智能卡研究项目。

历史

  • 2010 年 11 月 1 日:初始版本
© . All rights reserved.