一种实现多卡槽访问的方法和装置的利记博彩app

文档序号:6585376阅读:286来源:国知局
专利名称:一种实现多卡槽访问的方法和装置的利记博彩app
技术领域
本发明涉及数据通讯领域,特别涉及一种实现多卡槽访问的方法和装置。
背景技术
CCID (USB Chip/Smart Card Interface Devices-USB,芯片智能卡接口设备)标 准是由几大国际级IT企业共同制定的一个标准,它提供了一种智能卡读写设备与主机或 其他嵌入式主机之间实现相互通讯的可能。CCID标准规定了 CCID设备是一种芯片/智 能卡接口设备,设备通过USB接口与主机或其他嵌入式主机连接,进行符合CCID标准的 数据通信,同时设备通过符合7816标准协议的接口与智能卡进行通讯。微软公司在其 WIND0WS2000及以上的操作系统上提供并支持CCID驱动,使设备生产厂商可以轻松的开发 使用符合CCID接口标准的设备。同时,CCID接口标准支持PC (Personal Computer个人计 算机)/SC(Smart Card智能卡)接口调用,使广大开发者可以方便的对智能密钥设备进行 开发操作。在其他开源操作系统如LINUX的众多版本上,也有许多开源的CCID驱动可供开 发者和使用者使用。 在实现本发明的过程中,发明人发现现有技术至少存在以下缺点 CCID协议是一个单通道协议,支持多卡槽的访问,但微软的CCID驱动在对读卡器
操作时,仅可以对一个卡槽进行访问。

发明内容
为了实现CCID协议下的多卡槽访问,本发明实施例提供了 一种实现多卡座访问 的方法和装置。所述技术方案如下 —种实现多卡槽访问的方法,其特征在于,所述方法包括 多卡槽的CCID设备与主机建立连接,将至少一对用来实现应答管道和命令管道 的IN/OUT端点声明为BULK-IN和BULK-OUT端点,将至少一个用来实现事件通知管道的IN 端点声明为中断端点,并向所述主机声明其自身是符合CCID接口标准的设备以及自身支 持的卡槽数; 主机对所述多卡槽的CCID设备进行访问; 所述多卡槽的CCID设备接收BULK-OUT数据包,并根据所述BULK-OUT数据包判断 所述主机下发的CCID命令的类型; 当所述CCID命令类型是通道扩展命令时,则判断所述通道扩展命令是否是通道 切换命令;如果所述通道扩展命令是通道切换命令时,则解析所述通道切换命令,并激活所 述主机欲访问的相应卡槽;如果所述通道扩展命令不是通道切换命令时,则根据所述通道 扩展命令的命令类型进行相应的处理; 当所述CCID命令的类型不是通道扩展命令,则根据所述CCID命令类型进行相应 的处理。 向所述主机声明其自身支持的卡槽数,具体包括
所述CCID设备向所述主机发送卡槽描述符,所述卡槽描述符中使用一个字节表 示CCID设备自身支持的卡槽数。 根据所述BULK-OUT数据包判断所述主机下发的CCID命令的类型,具体包括
所述CCID设备解析符合CCID标准的命令流,拆分所述命令流的包头中的第一个 其中,当所述第一个字节为6B时,表示通道扩展命令。
判断所述通道扩展命令是否是通道切换命令,具体包括 所述CCID设备解析所述通道扩展命令,根据所述通道扩展命令中的标识符字段
得到该命令的的命令类型; 其中,所述标识符是自定义标识符。 解析所述通道切换命令,并激活所述主机欲访问的相应卡槽,具体包括
所述CCID设备中的固件程序拆分所述通道切换命令的包头; 通过计算所述通道切换命令包头中的数据长度标志,获知数据包的长度及所述数 据包在所述CCID设备收发缓冲中的位置,得到所述通道切换命令数据包中的标识符,所述 标识符用于标识所述通道切换命令的具体用途; 如果所述标识符表示该通道切换命令是用于卡槽切换的,则查看所述通道切换命 令的第13个字节,得到本条通道切换命令所要访问的卡槽序号; 通过所述CCID设备的电路控制程序单元将所述卡槽序号所对应的卡槽激活。
所述方法还包括判断被激活卡槽中是否有智能卡插拔事件信息; 如果有,则向所述主机返回符合CCID标准的智能卡插拔事件信息; 如果没有,则继续执行所述多卡槽的CCID设备接收BULK-OUT数据包的步骤。 所述判断是否有智能卡插拔事件信息,具体包括 判断所述CCID设备的收发缓冲中是否有所述智能卡插拔事件信息,所述智能卡 插拔事件信息由所述CCID设备在接收到有智能卡插入或拔出的中断信号时写入到所述收 发缓冲中。 —种多卡槽的CCID设备,所述设备包括接口模块、主控模块、判断模块和卡槽切 换电路模块; 所述接口模块,分别与主机和所述主控模块相连接,用于实现所述主机与所述主 控模块之间的信息交互; 所述主控模块,分别与所述接口模块和所述判断模块相连接,用于控制所述接口 模块接收主机下发的命令流,控制所述判断模块接收智能卡发送的应答,控制所述判断模 块发送命令流中的数据包到所述智能卡,控制所述接口模块发送符合CCID标准的应答数 据包到所述主机; 所述判断模块,分别与所述主控模块和所述卡槽切换电路模块相连接,用于判断 CCID设备中是否有智能卡插拔事件信息,并将所述智能卡插拔事件信息通过所述主控模块 返回给所述主机, 所述卡槽切换电路模块,分别与所述判断模块和卡槽相连接,用于接收所述主控 模块发送的命令流;如果接收到所述主控模块发送的通道切换命令,则根据卡槽序列号激 活相应的卡槽;如果接收到所述主控模块发送的其他命令,则将所述其他命令发送给所述智能卡,并将所述智能卡的应答数据包发送给所述判断模块。
所述接口模块具体包括描述符设置单元和端点设置单元; 所述描述符设置单元,用于设置符合CCID标准中规定的设备类型描述符及卡槽 描述符;所述CCID设备通过所述设备类型描述符向主机声明自身是CCID设备,通过所述卡 槽描述符向主机声明自身支持的卡槽数; 所述端点设置单元,用于将至少一对用来实现应答管道和命令管道的IN/OUT端 点设置为BULK-IN和BULK-OUT端点,将至少一个用来实现事件通知管道的IN端点声明为 中断端点。 所述主控模块具体包括 接收单元,用于接收所述主机通过所述接口模块发送的命令流,及接收智能卡通 过所述判断模块返回的应答; 解析单元,用于解析所述接收单元接收到的所述命令流; 拆分单元,用于拆分所述解析单元解析出来的命令流的包头中的第一个字节,得
到该命令流的命令类型,其中,当第一个字节为6B时,表示通道扩展命令; 计算单元,用于根据所述接收单元接收到的命令流中的数据长度标志,确定命令
流中的数据包长度和所述数据包在所述CCID设备收发缓冲中的位置; 应答组成单元,用于将应答组成符合CCID标准的应答数据包; 第一判断单元,用于根据所述接收模块接收到的BULK-OUT数据包判断主机下发
的CCID命令的类型; 第二判断单元,用于当所述第一判断单元的判断结果为通道扩展命令时,判断所 述通道扩展命令是否是通道切换命令; 第一处理单元,用于如果所述第一判断单元的判断结果为不是通道扩展命令时, 根据所述CCID命令类型进行相应的处理; 第二处理单元,用于如果所述第二判断单元的判断结果为通道扩展命令不是通道 切换命令时,根据所述通道扩展命令的命令类型进行相应的处理; 发送单元,用于发送所述主机下发的命令流给所述智能卡,及发送智能卡返回的 应答给所述主机。 所述第二判断单元具体包括 拆分子单元,用于拆分通道切换命令的包头; 第一获得子单元,用于通过计算通道切换命令包头中的数据长度标志,获知数据 包的长度及所述数据包在CCID设备收发缓冲中的位置,得到通道切换命令数据包中的标 识符,所述标识符用于标识通道切换命令的具体用途; 第二获得子单元,用于当所述第一获得单元获得的标识符表示该通道切换命令是 用于卡槽切换时,查看通道切换命令的第13个字节,得到本条通道切换命令所要访问的卡
槽序号。
所述判断模块具体用于 判断CCID设备的收发缓冲中是否有智能卡插拔事件信息,智能卡插拔事件信息 由CCID设备在接收到有智能卡插入或拔出的中断信号时写入到收发缓冲中。
本发明实施例提供的技术方案带来的有益效果是
实现微软windows下的读卡器驱动能够支持多卡槽访问,并且还支持li皿x下的 读卡器驱动的多卡槽访问。


图1是本发明实施例1中提供的
图2是本发明实施例2中提供的
图3是本发明实施例3中提供的
图4是本发明实施例4中提供的
种以查询方式实现多卡槽访问的方法流程图 种以查询方式实现多卡槽访问的方法流程图 种以中断方式实现多卡槽访问的方法流程图 种实现多卡槽访问的装置结构示意图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方 式作进一步地详细描述。 在描述本发明具体实施例之前,这里需要说明的是,根据CCID协议,符合CCID接 口标准的设备,其端点需要包括如下特征至少一对IN/OUT端点声明为BULK-IN、BULK-OUT 端点,用来实现应答和命令管道;至少一个IN端点声明为中断端点,用来实现事件通知管 道。符合CCID接口标准的设备,其描述符需要包括如下特征在接口描述符中,字节O是 描述符的字节长度,值为09h,字节1是固定终端,值为04h,字节4代表其所支持的终端号 (除了终端0),值为02h或03h,字节5是类代码,值为0Bh,字节6为子类代码,值为00h,字 节7是协议代码,值为00h ;在类型描述符中,字节0是描述符的字节长度,值为36h,字节2 是CCID规范的版本号,它是用二进制代码表示的小数,值为OlOOh,字节52是PIN码支持, 值为00h-03h。符合CCID接口标准的设备的其它描述符中的字节,如设备描述符、配置描述 符中的字节以及上述接口描述符和类型描述符中其它字节仍按照USB协议中的规定设置。
实施例1 本发明实施例1提供了一种实现多卡槽访问的方法,本实施例以多卡槽读卡器这 种常见的CCID设备为例,并假设与该多卡槽读卡器连接的主机中安装有微软的CCID协议 的读卡器驱动,多卡槽读卡器通过自定义通道切换命令、并配合卡槽切换电路实现了多卡 槽读卡器中的多个卡槽共享一条USB总线与主机进行通信。其中需要说明的是,主机与 CCID设备之间可以通过两条通信管道进行通信,一条为批量传输管道,用于进行数据的传 输,如上电、下电指令、执行APDU(A卯lication Protocol Data Unit应用协议数据单元)、 主机与CCID设备按照一应一答的方式通过批量传输管道进行数据的交互;一条为中断传 输管道,用于传输异步事件,如插卡、拔卡及卡短路等,CCID设备就会通过中断传输管道向 主机发送信号。参见图l,该方法包括 步骤101 :CCID设备与主机建立连接,进行初始化; 在本实施例中,该CCID设备通过USB接口与主机建立连接。 具体的,CCID设备的初始化过程可以包括初始化中断向量、初始化1/0信号等。 其中的中断可以包括USB中断、插拔卡事件中断等。 步骤102 :初始化完成后,CCID设备设置至少一对用来实现应答和命令管道的IN/ OUT端点声明为BULK-IN和BULK-OUT端点,设置至少一个用来实现事件通知管道的IN端 点,并声明为中断端点,并向主机声明其自身是符合CCID接口标准的设备;
其中,可以采用设备类型描述符的形式实现声明其自身是CCID设备,具体包括 CCID设备向与其建立连接的主机发送CCID类型的设备描述符,主机接收到该CCID类型的 设备描述符后,根据该CCID类型的设备描述符识别该建立连接的设备为CCID设备。
步骤103 :CCID设备向主机声明自身支持的卡槽数; 其中,可以采用设备卡槽描述符的形式实现声明其自身支持的卡槽数,具体包括 CCID设备向与其建立连接的主机发送卡槽描述符,卡槽描述符中用一个字节表示CCID设 备自身支持的卡槽数,例如,当卡槽描述符为"OO"时,表示CCID设备支持一个卡槽;当卡槽 描述符为"01"时,表示CCID设备支持两个卡槽,当卡槽描述符为"02"时,表示CCID设备 支持三个卡槽,等等。 主机接收到卡槽描述符后,主机加载的读卡器驱动即为读卡器的卡槽创建物理设 备对象。其中,如果主机加载的是微软的CCID协议的读卡器驱动,则主机在接收到卡槽描 述符时,为多卡槽读卡器创建一个物理设备对象,即为默认的卡槽创建物理设备对象,与默 认卡槽(如1号卡槽)相对应;如果主机加载Li皿x下的CCID协议的读卡器驱动,则主机 在接收到卡槽描述符时,根据卡槽描述符携带的卡槽数,创建相应数目的物理设备对象,分 别与读卡器的各个卡槽相对应。 步骤104 :CCID设备检查USB标志,判断USB标志是否为接收到BULK-OUT包的标 志; 如果是,则执行步骤105 ;
如果否,则执行步骤113 ; 其中,USB标志是由CCID设备中的硬件电路设置或清除的。USB标志包括数据包 长度标志、数据包类型标志和接收到的数据包标志等。例如,接收到的USB标志是SETUP包 的标志、IN包的标志、BULK-OUT包的标志、BULK-OUT包长度标志等。 步骤105 :CCID设备接收BULK-OUT包,并判断是否正确接收到BULK-OUT数据包;
如果是,执行步骤106;
如果否,执行步骤104; 其中,判断是否正确接收到BULK-OUT数据包的过程可以为根据接收到的数据包 长度标志及数据包的发送长度标志进行判断,如果接收到的数据包长度与数据包的发送长 度标志一致,则认为是正确接收到了 BULK-OUT数据包。 步骤106 :CCID设备解析BULK-OUT数据包的内容,并判断是何种类型的CCID命 令; 如果是通道扩展命令,则执行步骤108 ;
如果不是通道扩展命令,则执行步骤107。 其中,判断数据包中的内容是何种类型的CCID命令的过程可以为CCID设备解析 符合CCID标准的命令流,拆分命令流的包头中的第一个字节,得到该命令流的命令类型。 例如,第一个字节为6B,表示通道扩展命令;第一个字节为62,表示上电命令;第一个字节 为61,表示设置参数命令;等等。 其中,通道扩展命令是CCID协议标准留给生产厂家自己定义的扩展命令,通过该 扩展命令可以对CCID设备进行区别于其他CCID协议标准的操作,生成厂家可以修改该通 道扩展命令的第11、12字节(即标识符字段)的内容,用于实现一些自定义的命令功能,如用于通道切换、对传输通道上的数据进行加解密操作等。 步骤107 :CCID设备根据CCID命令类型进行相应的处理,并将处理结果组装成符 合CCID接口标准的数据包,且并将所述数据包保存至CCID设备缓冲区中,执行步骤111 ;
其中,根据CCID命令类型进行相应的处理可以包括当CCID命令类型为对智能卡 进行上电或下电,则CCID设备对其卡槽中的智能卡进行上电或下电处理;当CCID命令类型 为对智能卡进行PPS (Protocol and Parameter Select变频协商),则CCID设备对其卡槽 中的智能卡进行变频协商;当CCID命令类型为对智能卡中的数据进行读写等操作,则CCID 设备对智能卡中的数据进行读写等操作。 还需要知道的是,CCID命令中的第6个字节(即命令中的Slot字段)表示的是 该智能卡操作命令所对应的多卡槽CCID设备卡槽的编号; 另外,还需要知道的是如果主机加载微软的CCID协议的读卡器驱动,则CCID命 令中的第6个字节(即命令中的Slot字段)是固定的00 ; 如果主机加载Li皿x下的CCID协议读卡器驱动,则CCID命令中的第6个字节(即
命令中的Slot字段)表示的是该智能卡操作命令对应的多卡槽CCID设备卡槽的编号,如6f 05 00 00 00 00 10 00 00 00 00 84 00 00 08 表示1号卡座的取随机数指令,第6位字节00表示1号卡槽 62 00 00 00 00 01 21 01 00 00 表示2号卡座的上电指令,第6位字节01表示2号卡槽 当多卡槽CCID设备接收到符合CCID标准的命令后,根据上述卡槽号对相应的卡 槽进行操作。 优选的,本实施例中主机中安装的是微软的CCID协议的读卡器驱动。
步骤108 :CCID设备判断通道扩展命令是否是通道切换命令;
如果是通道切换命令,则执行步骤110 ;
如果是其他通道扩展命令,则执行步骤109 ; 本步骤中所涉及到的判断,具体过程为CCID设备中的固件程序拆分接收到的通
道扩展命令的包头,并通过计算该命令包头中的数据长度标志,获知数据包的长度及其在
CCID设备缓冲区中的位置,得到该命令流数据包中的标识符(命令中的第11、12个字节),
该标识符是CCID可以是生产厂家自己定制的,可以通过该标识符获知该通道切换命令的
具体用途。如0x5aa5表示该通道扩展命令是通道切换命令,用于多卡槽CCID设备卡槽切
换,当然该标识符也可以是0xa55a等,取决于生产厂家的定义。 步骤109 :执行其他通道扩展命令相应的操作后,执行步骤111 ; 例如,该通道扩展命令是用于对传输通道上的数据进行加解密操作、读flash或
写flash操作等,则CCID设备执行相应的操作即可。具体的命令例如6B 05 00 00 00 00 00 00 00 00 6066 84 00 08 表示对CCID设备进行flash读操作,第11、 12位字节6066是自定义的,表示读 flash6B 05 00 00 00 00 00 00 00 00 6660 84 00 08 表示对CCID设备进行flash写操作,第11、12为字节6660是自定义的,表示写 flash
步骤110 :CCID设备中的固件程序对接收到的通道切换命令进行解析,得到该条 命令对应的卡槽,通过卡槽切换电路激活命令中指定的卡槽; CCID设备中的固件程序查看该通道切换命令的第13个字节,可以得到本条命令 所要激活的卡槽序号,然后通过CCID设备的电路控制程序单元将卡槽序号所对应的卡槽 激活。 具体在本实施例中,以使用的是微软的CCID协议的读卡器驱动为例,符合CCID标 准的通道切换命令中的Slot字段(第6个字节)是固定的00。
假设CCID设备接收到的通道切换命令具体为 [O川]6B 04 00 00 00 00 00 00 00 00 5a a5 00 ff 该通道切换命令表示1号卡槽的随机数指令,该条指令的第13个字节00表示1 号卡槽;6B 04 00 00 00 00 00 00 00 00 5a a5 01 ff 该通道切换命令表示2号卡槽的随机数指令,该条指令的第13个字节01表示2 号卡槽。 具体的,CCID设备通过电路控制程序单元将卡槽序号所对应的卡槽激活,具体实 现过程可以如下 —种优选的方式为,CCID设备的卡槽切换电路包括CPU(Central Processing Unit,中央处理单元)、一个CPU接口、多路选择开关和电路控制程序单元;多路选择开关分 别与CCID设备中的各个卡槽(例如卡槽1、卡槽2、卡槽3等)相连接;当CCID设备分析 得到卡槽的序号后,电路控制程序单元控制多路选择开关将相应的卡槽之间的电路进行连 通。 另一种优选的方式,CCID设备卡槽切换电路包括CPU、多个CPU接口和电路控制程 序单元;多个CPU接口分别与CCID设备中的各个卡槽(例如卡槽1、卡槽2、卡槽3等)相 连接,当CCID设备分析得到卡槽的编号后,电路控制程序单元将CPU接口与相应的卡槽之 间的电路进行连通。 步骤111 :CCID设备检测缓冲区中是否有智能卡插拔事件信息;
如果有,则执行步骤112 ;
如果否,则返回步骤104 ; 其中,智能卡插拔事件信息在CCID设备判断到有智能卡插入或拔出时写入到缓 冲区中。 在本发明实施例中的卡槽有两种情况,包括有卡和无卡;如果卡槽中没有卡片插 入或者卡片从卡槽中拔出,卡槽就处于无卡状态,产生无卡的中断信号;如果卡片插入卡 槽,就处于有卡未上电状态,产生有卡的中断信号;主机下发上电指令,智能卡响应并成功 返回ATR(Answer To Reset,复位应答)后,卡槽的状态变为有卡已上电;主机下发下电指 令,智能卡的卡槽状态变为有卡未上电状态。 当某一卡槽为激活的卡槽时,如果卡槽中有智能卡的插入,则会产生有卡的中断 信号0x5003 ;如果卡槽中有智能卡的拔出,则会产生无卡的中断信号0x5002 ;当某一卡槽 为未激活的卡槽时,发生插拔事件不会产生中断信号。 需要说明的是,如果主机加载微软的CCID协议的读卡器驱动,则多卡槽CCID设备中卡槽中有卡的插拔动作时都将会产生相同的插拔卡中断信息,例如 1号卡槽插入卡 0x5003 2号卡槽插入卡 0x5003 3号卡槽插入卡 0x5003 1号卡槽拔卡 0x5002 2号卡槽拔卡 0x5002 3号卡槽拔卡 0x5002 如果主机中加载Li皿x下的CCID协议的读卡器驱动,则多卡槽CCID设备中卡槽
中有卡的插拔动作时,不同的卡槽将产生不同的插拔卡中断信息,例如 1号卡槽插入卡 0x5003 2号卡槽插入卡 0x500c 3号卡槽插入卡 0x5030 1号卡槽拔卡 0x5002 2号卡槽拔卡 0x5008 3号卡槽拔卡 0x5020 步骤112 :CCID设备将智能卡插入或拔出事件信息组装成符合CCID接口标准的数 据包返回给主机,并执行步骤104 ; 步骤113 :CCID设备进行其他操作,并返回步骤104。 本发明实施例提供了一种实现多卡槽访问的方法,实现微软windows下的读卡器
驱动能够支持多卡槽访问,并且还支持li皿x下的读卡器驱动的多卡槽访问。
实施例2 本发明实施例2提供了一种实现多卡槽访问的方法,本实施例以多卡槽读卡器这
种常见的CCID设备为例,并假设与该多卡槽读卡器连接的主机中安装有微软的CCID协议
的读卡器驱动,多卡槽读卡器通过自定义通道切换命令、并配合卡槽切换电路实现了多卡
槽读卡器中的多个卡槽共享一条USB总线与主机进行通信。其中需要说明的是,主机与
CCID设备之间可以通过两条通信管道进行通信,一条为批量传输管道,用于进行数据的传
输,如上电、下电指令、执行APDU、主机与CCID设备按照一应一答的方式通过批量传输管道
进行数据的交互;一条为中断传输管道,用于传输异步事件,如插卡、拔卡及卡短路等,CCID
设备就会通过中断传输管道向主机发送信号。参见图2,该方法包括 步骤201 :CCID设备与主机建立连接,进行初始化; 在本实施例中,该CCID设备通过USB接口与主机建立连接。 具体的,CCID设备的初始化过程可以包括初始化中断向量、初始化1/0信号等。 其中的中断可以包括USB中断、插拔卡事件中断等。 步骤202 :初始化完成后,CCID设备设置至少一对用来实现应答和命令管道的IN/ OUT端点声明为BULK-IN和BULK-0UT端点,设置至少一个用来实现事件通知管道的IN端点 声明为中断端点,并向主机声明其自身是符合CCID接口标准的设备; 其中,可以采用设备类型描述符的形式实现声明其自身是CCID设备,具体包括 CCID设备向与其建立连接的主机发送CCID类型的设备描述符,主机接收到该CCID类型的 设备描述符后,根据该CCID类型的设备描述符识别该建立连接的设备为CCID设备。
步骤203 :CCID设备向主机声明自身支持的卡槽数; 其中,可以采用设备卡槽描述符的形式实现声明其自身支持的卡槽数,具体包括 CCID设备向与其建立连接的主机发送卡槽描述符,卡槽描述符中用一个字节表示CCID设 备自身支持的卡槽数,例如,当卡槽描述符为"OO"时,表示CCID设备支持一个卡槽;当卡槽 描述符为"01"时,表示CCID设备支持两个卡槽。 主机接收到卡槽描述符后,主机加载的读卡器驱动即为读卡器的卡槽创建物理设 备对象。其中,如果主机加载的是微软的CCID协议的读卡器驱动,则主机在接收到卡槽描 述符时,为多卡槽读卡器创建一个物理设备对象,即为默认的卡槽创建物理设备对象,与默 认卡槽(如1号卡槽)相对应;如果主机加载的Li皿x下的CCID协议的读卡器驱动,则主 机在接收到卡槽描述符时,根据卡槽描述符携带的卡槽数,创建相应数目的物理设备对象, 分别与读卡器的各个卡槽相对应。 步骤204 :CCID设备检测缓冲区中是否有智能卡插拔事件信息;
如果是,执行步骤205;
如果否,执行步骤206; 其中,智能卡插拔事件信息在CCID设备判断到有智能卡插入或拔出时写入到缓 冲区中。 在本发明实施例中的卡槽有两种情况,包括有卡和无卡;如果卡槽中没有卡片插 入或者卡片从卡槽中拔出,卡槽就处于无卡状态,产生无卡的中断信号;如果卡片插入卡 槽,就处于有卡未上电状态,产生有卡的中断信号;主机下发上电指令,智能卡响应并成功 返回ATR(Answer To Reset,复位应答)后,卡槽的状态变为有卡已上电;主机下发下电指 令,智能卡的卡槽状态变为有卡未上电状态。 当某一卡槽为激活的卡槽时,如果卡槽中有智能卡的插入,则会产生有卡的中断 信号0x5003 ;如果卡槽中有智能卡的拔出,则会产生无卡的中断信号0x5002 ;当某一卡槽 为未激活的卡槽时,发生插拔事件不会产生中断信号。 需要说明的是,如果主机加载微软的CCID协议的读卡器驱动,则多卡槽CCID设备
中卡槽中有卡的插拔动作时都将会产生相同的插拔卡中断信息,例如 1号卡槽插入卡 0x5003 2号卡槽插入卡 0x5003 3号卡槽插入卡 0x5003 1号卡槽拔卡 0x5002 2号卡槽拔卡 0x5002 3号卡槽拔卡 0x5002 如果主机中加载Li皿x下的CCID协议的读卡器驱动,则多卡槽CCID设备中卡槽
中有卡的插拔动作时,不同的卡槽将产生不同的插拔卡中断信息,例如 1号卡槽插入卡 0x5003 2号卡槽插入卡 0x500c 3号卡槽插入卡 0x5030 1号卡槽拔卡 0x5002 2号卡槽拔卡 0x5008
3号卡槽拔卡 0x5020 步骤205 :CCID设备将智能卡插入或拔出事件信息组装成符合CCID接口标准的数 据包返回给主机,并执行步骤204 ; 步骤206 :CCID设备检查USB标志,判断USB标志是否为接收到BULK-OUT包的标 志; 如果是,则执行步骤207 ;
如果否,则执行步骤213。 其中,USB标志是由CCID设备中的硬件电路设置或清除的。USB标志包括长度标 志、数据包类型标志和接收到的数据包标志等。例如,接收到的USB标志是SETUP包的标志、 IN包的标志、BULK-OUT包的标志、BULK-OUT包长度标志等。 步骤207 :CCID设备接收BULK-OUT包,并判断是否正确接收到BULK-OUT数据包;
如果是,执行步骤208;
如果否,执行步骤204; 其中,判断是否正确接收到BULK-OUT数据包的过程可以为根据接收到的数据包 长度标志及数据包的发送长度标志进行判断,如果接收到的数据包长度与数据包的发送长 度标志一致,则认为是正确接收到了 BULK-OUT数据包。 其中,通道扩展命令是CCID协议标准留给生产厂家自己定义的扩展命令,通过该 扩展命令可以对CCID设备进行区别于其他CCID协议标准的操作,生成厂家可以修改该通 道扩展命令的第11、12字节的内容,用于实现一些自定义的命令功能,如用于通道切换、对 传输通道上的数据进行加解密操作等。 步骤208 :CCID设备解析BULK-OUT数据包的内容,并判断是何种类型的CCID命 令; 如果是通道扩展命令,则执行步骤210 ;
如果不是通道扩展命令,则执行步骤209 ; 其中,判断数据包中的内容是何种类型的CCID命令的过程可以为CCID设备解析 符合CCID标准的命令流,拆分命令流的包头中的第一个字节,得到该命令流的命令类型。 例如,第一个字节为6B,表示通道扩展命令;第一个字节为62,表示上电命令;第一个字节
为61,表示设置参数命令;等等。 步骤209 :CCID设备根据CCID命令类型进行相应的处理,并将处理结果组装成符 合CCID接口标准的数据包,且并将所述数据包保存至CCID设备缓冲区,执行步骤204 ;
其中,根据CCID命令类型进行相应的处理可以包括当CCID命令类型为对智能卡 进行上电或下电,则CCID设备对其卡槽中的智能卡进行上电或下电处理;当CCID命令类型 为对智能卡进行变频协商,则CCID设备对其卡槽中的智能卡进行变频协商;当CCID命令类 型为对智能卡中的数据进行读写等操作,则CCID设备对智能卡中的数据进行读写等操作。
还需要知道的是,CCID命令中的第6个字节(即命令中的Slot字段)表示的是 该智能卡操作命令所对应的多卡槽CCID设备卡槽的编号; 另外,还需要知道的是如果主机加载微软的CCID协议的读卡器驱动,则CCID命 令中的第6个字节(即命令中的Slot字段)是固定的00 ; 如果主机加载Li皿x下的CCID协议读卡器驱动,则CCID命令中的第6个字节(即命令中的Slot字段)显示的是该智能卡操作命令对应的多卡槽CCID设备卡槽的编号,如6f 05 00 00 00 00 10 00 00 00 00 84 00 00 08 表示1号卡座的取随机数指令,第6位字节00表示1号卡槽 62 00 00 00 00 01 21 01 00 00 表示2号卡座的上电指令,第6位字节01表示2号卡槽 当多卡槽CCID设备接收到上述命令后,根据上述卡槽号对相应的卡槽进行操作。
优选的,本实施例中主机中安装的是微软的CCID协议的读卡器驱动。
步骤210 :CCID设备判断通道扩展命令是否是通道切换命令;
如果是通道切换命令,则执行步骤212 ;
如果其他通道扩展命令,则执行步骤211 ; 本步骤中所涉及到的判断具体过程为CCID设备中的固件程序拆分接收到的通
道切换命令的包头,并通过计算该命令包头中的数据长度标志,获知数据包的长度及其在
CCID设备缓冲区中的位置,得到该命令流数据包中的标识符(命令中的第11、12个字节),
该标识符是CCID可以是生产厂家自己定制的,可以通过该标识符获知该通道切换命令的
具体用途。如0x5aa5表示该通道扩展命令是通道切换命令,用于多卡槽CCID设备卡槽切
换,当然该标识符也可以是Oxa55a等,取决于生产厂家的定义。 步骤211 :执行其他通道扩展命令相应的操作,并返回步骤204 ; 例如,该通道扩展命令是用于对传输通道上的数据进行加解密操作、读flash或
写flash操作等,则CCID设备执行相应的操作即可。具体的命令例如6B 05 00 00 00 00 00 00 00 00 6066 84 00 08 表示对CCID设备进行flash读操作,第11、 12位字节6066是自定义的,表示读 flash6B 05 00 00 00 00 00 00 00 00 6660 84 00 08 表示对CCID设备进行flash写操作,第11、12为字节6660是自定义的,表示写 flash 步骤212 :CCID设备中的固件程序对接收到的通道切换命令进行解析,得到该条 命令对应的卡槽,通过卡槽切换电路激活命令中指定的卡槽,返回步骤204 ;
其中,CCID设备中的固件程序拆分接收到的通道切换命令的包头,并通过计算该 命令包头中的数据长度标志,获知数据包的长度及其在CCID设备缓冲区中的位置,得到该 命令流数据包中的标识符,该标识符是CCID可以是生产厂家自己定制的,可以通过该标 识符获知该通道切换命令的具体用途。如果该标识符表示该通道切换命令是用于卡槽切 换的,通过查看该命令的第13个字节,可以得到本条命令所要激活的卡槽序号,然后通过 CCID设备的电路控制程序单元将卡槽序号所对应的卡槽激活。 具体在本实施例中,以使用的是微软的CCID协议的读卡器驱动为例,符合CCID标 准的通道切换命令中的Slot字段(第6个字节)是固定的00。
假设CCID设备接收到的通道切换命令具体为
6B 04 00 00 00 00 00 00 00 00 5a a5 00 ff 该通道切换命令表示1号卡槽的随机数指令,该条指令的第13个字节00表示1 号卡槽;
6B 04 00 00 00 00 00 00 00 00 5a a5 01 ff 该通道切换命令表示2号卡槽的随机数指令,该条指令的第13个字节01表示2 号卡槽。 具体的,CCID设备通过电路控制程序单元将卡槽序号所对应的卡槽(例如卡槽1、 卡槽2、卡槽3)激活,具体实现过程可以如下 —种优选的方式为,CCID设备的卡槽切换电路包括CPU、一个CPU接口、多路选择 开关和电路控制程序单元;多路选择开关分别与CCID设备中的各个卡槽相连接;当CCID 设备分析得到卡槽的序号后,电路控制程序单元控制多路选择开关将相应的卡槽之间的电 路进行连通。 另一种优选的方式,CCID设备卡槽切换电路包括CPU、多个CPU接口和电路控制程 序单元;多个CPU接口分别与CCID设备中的各个卡槽相连接,当CCID设备分析得到卡槽的 编号后,电路控制程序单元将CPU接口与相应的卡槽之间的电路进行连通。
步骤213 :CCID设备进行其他操作,并返回步骤204。 本发明实施例提供了一种实现多卡槽访问的方法,实现微软windows下的读卡器
驱动能够支持多卡槽访问,并且还支持li皿x下的读卡器驱动的多卡槽访问。
实施例3 本发明实施例3提供了一种实现多卡槽访问的方法,本实施例以多卡槽读卡器这
种常见的CCID设备为例,并假设与该多卡槽读卡器连接的主机中安装有微软的CCID协议
的读卡器驱动,多卡槽读卡器通过自定义通道切换命令、并配合卡槽切换电路实现了多卡
槽读卡器中的多个卡槽共享一条USB总线与主机进行通信。其中需要说明的是,主机与
CCID设备之间可以通过两条通信管道进行通信,一条为批量传输管道,用于进行数据的传
输,如上电、下电指令、执行APDU、主机与CCID设备按照一应一答的方式通过批量传输管道
进行数据的交互;一条为中断传输管道,用于传输异步事件,如插卡、拔卡及卡短路等,CCID
设备就会通过中断传输管道向主机发送信号。参见图3,该方法包括 步骤301 :CCID设备与主机建立连接,进行初始化; 在本实施例中,该CCID设备通过USB接口与主机建立连接。 具体的,CCID设备的初始化过程可以包括初始化中断向量、初始化1/0信号等。 其中的中断可以包括USB中断、插拔卡事件中断等。 步骤302 :初始化完成后,CCID设备设置至少一对用来实现应答和命令管道的IN/ OUT端点声明为BULK-IN和BULK-OUT端点,设置至少一个用来实现事件通知管道的IN端点 声明为中断端点,并向主机声明其自身是符合CCID接口标准的设备; 其中,可以采用设备类型描述符的形式实现声明其自身是CCID设备,具体包括 CCID设备向与其建立连接的主机发送CCID类型的设备描述符,主机接收到该CCID类型的 设备描述符后,根据该CCID类型的设备描述符识别该建立连接的设备为CCID设备。
步骤303 :CCID设备向主机声明自身支持的卡槽数; 其中,可以采用设备卡槽描述符的形式实现声明其自身支持的卡槽数,具体包括 CCID设备向与其建立连接的主机发送卡槽描述符,卡槽描述符中用一个字节表示CCID设 备自身支持的卡槽数,例如,当卡槽描述符为"OO"时,表示CCID设备支持一个卡槽;当卡槽 描述符为"01"时,表示CCID设备支持两个卡槽。 16
主机接收到卡槽描述符后,主机加载的读卡器驱动即为读卡器的卡槽创建物理设 备对象。其中,如果主机加载的是微软的CCID协议的读卡器驱动,则主机在接收到卡槽描 述符时,为多卡槽读卡器创建一个物理设备对象,即为默认的卡槽创建物理设备对象,与默 认卡槽(如1号卡槽)相对应;如果主机加载的Li皿x下的CCID协议的读卡器驱动,则主 机在接收到卡槽描述符时,根据卡槽描述符携带的卡槽数,创建相应数目的物理设备对象, 分别与读卡器的各个卡槽相对应。
步骤304 :CCID设备等待中断; 如果有中断出现,则执行步骤305(即,CCID设备进入中断服务);
如果没有中断出现,则继续等待; 其中,优选的,USB中断或者插拔卡事件中断均采用一个中断入口进入中断服务; 或者,USB中断和插拔卡事件中断采用不同的中断入口 ,则USB中断使得CCID设备进入USB 中断服务;插拔卡事件中断使得CCID设备进入插拔卡事件中断服务。
步骤305 :CCID设备进入中断服务; 步骤306 :CCID设备判断出现的中断是否为BULK-OUT中断;
如果是,则执行步骤307 ;
如果否,则执行步骤313 ; 步骤307 :CCID设备接收BULK-OUT包,并判断是否正确接收到BULK-OUT数据包;
如果是,执行步骤308;
如果否,执行步骤316; 步骤308 :CCID设备解析BULK-OUT数据包的内容,并判断是何种类型的CCID命 令; 如果是通道扩展命令,则执行步骤310 ;
如果不是通道扩展命令,则执行步骤309。 其中,通道扩展命令是CCID协议标准留给生产厂家自己定义的扩展命令,通过该 扩展命令可以对CCID设备进行区别于其他CCID协议标准的操作,生成厂家可以修改该通 道扩展命令的第11、12字节的内容,用于实现一些自定义的命令功能,如用于通道切换、对 传输通道上的数据进行加解密操作等。 步骤309 :CCID设备根据CCID命令类型进行相应的处理,程序的其他模块将处理 结果组装成符合CCID接口标准的数据包,并将数据包保存至缓冲区,执行步骤316 ;
其中,根据CCID命令类型进行相应的处理可以包括当CCID命令类型为对智能卡 进行上电或下电,则CCID设备对其卡槽中的智能卡进行上电或下电处理;当CCID命令类型 为对智能卡进行变频协商,则CCID设备对其卡槽中的智能卡进行变频协商;当CCID命令类 型为对智能卡中的数据进行读写等操作,则CCID设备对智能卡中的数据进行读写等操作。
还需要知道的是,CCID命令中的第6个字节(即命令中的Slot字段)表示的是 该智能卡操作命令所对应的多卡槽CCID设备卡槽的编号; 另外,还需要知道的是如果主机加载微软的CCID协议的读卡器驱动,则CCID命 令中的第6个字节(即命令中的Slot字段)是固定的00 ; 如果主机加载Li皿x下的CCID协议读卡器驱动,则CCID命令中的第6个字节(即 命令中的Slot字段)显示的是该智能卡操作命令对应的多卡槽CCID设备卡槽的编号,如
6f 05 00 00 00 00 10 00 00 00 00 84 00 00 08 表示1号卡座的取随机数指令,第6位字节00表示1号卡槽 62 00 00 00 00 01 21 01 00 00 表示2号卡座的上电指令,第6位字节01表示2号卡槽 当多卡槽CCID设备接收到上述命令后,根据上述卡槽号对相应的卡槽进行操作。
优选的,本实施例中主机中安装的是微软的CCID协议的读卡器驱动。
步骤310 :CCID设备判断通道扩展命令是否是通道切换命令;
如果是通道切换命令,则执行步骤312 ;
如果其他通道扩展命令,则执行步骤311 ; 本步骤中所涉及到的判断具体过程为CCID设备中的固件程序拆分接收到的通
道切换命令的包头,并通过计算该命令包头中的数据长度标志,获知数据包的长度及其在
CCID设备缓冲区中的位置,得到该命令流数据包中的标识符(命令中的第11、12个字节),
该标识符是CCID可以是生产厂家自己定制的,可以通过该标识符获知该通道切换命令的
具体用途。如0x5aa5表示该通道扩展命令是通道切换命令,用于多卡槽CCID设备卡槽切
换,当然该标识符也可以是Oxa55a等,取决于生产厂家的定义。 步骤311 :执行其他通道扩展命令相应的操作,执行步骤316 ; 例如,该通道扩展命令是用于对传输通道上的数据进行加解密操作、读flash或
写flash操作等,则CCID设备执行相应的操作即可。具体的命令例如6B 05 00 00 00 00 00 00 00 00 6066 84 00 08 表示对CCID设备进行flash读操作,第11、 12位字节6066是自定义的,表示读 flash6B 05 00 00 00 00 00 00 00 00 6660 84 00 08 表示对CCID设备进行flash写操作,第11、12为字节6660是自定义的,表示写 flash 步骤312 :CCID设备中的固件程序对接收到的通道切换命令进行解析,得到该条 命令对应的卡槽,通过卡槽切换电路激活命令中指定的卡槽,执行步骤316 ;
其中,CCID设备中的固件程序拆分接收到的通道切换命令的包头,并通过计算该 命令包头中的数据长度标志,获知数据包的长度及其在CCID设备缓冲区中的位置,得到该 命令流数据包中的标识符,该标识符是CCID可以是生产厂家自己定制的,可以通过该标 识符获知该通道切换命令的具体用途。如果该标识符表示该通道切换命令是用于卡槽切 换的,通过查看该命令的第13个字节,可以得到本条命令所要激活的卡槽序号,然后通过 CCID设备的电路控制程序单元将卡槽序号所对应的卡槽激活。 具体在本实施例中,以使用的是微软的CCID协议的读卡器驱动为例,符合CCID标 准的通道切换命令中的Slot字段(第6个字节)是固定的00。
假设CCID设备接收到的通道切换命令具体为
6B 04 00 00 00 00 00 00 00 00 5a a5 00 ff 该通道切换命令表示1号卡槽的随机数指令,该条指令的第13个字节00表示1 号卡槽; 6B 04 00 00 00 00 00 00 00 00 5a a5 01 ff
该通道切换命令表示2号卡槽的随机数指令,该条指令的第13个字节01表示2 号卡槽。 具体的,CCID设备通过电路控制程序单元将卡槽序号所对应的卡槽激活,具体实 现过程可以如下 —种优选的方式为,CCID设备的卡槽切换电路包括CPU、一个CPU接口 、多路选择 开关和电路控制程序单元;多路选择开关分别与CCID设备中的各个卡槽相连接;当CCID 设备分析得到卡槽的序号后,电路控制程序单元控制多路选择开关将相应的卡槽之间的电 路进行连通。 另一种优选的方式,CCID设备卡槽切换电路包括CPU、多个CPU接口和电路控制程 序单元;多个CPU接口分别与CCID设备中的各个卡槽相连接,当CCID设备分析得到卡槽的 编号后,电路控制程序单元将CPU接口与相应的卡槽之间的电路进行连通。
步骤313 :CCID设备判断该中断是否是插拔卡中断;
如果是,执行步骤314;
如果否,执行步骤315; 步骤314:CCID设备将智能卡插入或拔出事件信息组装成符合CCID接口标准的数 据包返回给主机,返回步骤316 ; 在本发明实施例中的卡槽有两种情况,包括有卡和无卡;如果卡槽中没有卡片插 入或者卡片从卡槽中拔出,卡槽就处于无卡状态,产生无卡的中断信号;如果卡片插入卡 槽,就处于有卡未上电状态,产生有卡的中断信号;主机下发上电指令,智能卡响应并成功 返回ATR(Answer To Reset,复位应答)后,卡槽的状态变为有卡已上电;主机下发下电指 令,智能卡的卡槽状态变为有卡未上电状态。 当某一卡槽为激活的卡槽时,如果卡槽中有智能卡的插入,则会产生有卡的中断 信号0x5003 ;如果卡槽中有智能卡的拔出,则会产生无卡的中断信号0x5002 ;当某一卡槽 为未激活的卡槽时,发生插拔事件不会产生中断信号。
步骤315 :CCID设备执行其他操作,执行步骤316 ;
步骤316:中断返回。 对于本实施例需要说明的是,上述步骤301至步骤314是当USB中断或者插拔卡 事件中断均采用一个中断入口进入中断服务程序时的处理方法;当USB中断和插拔卡事件 中断采用不同的中断入口时,步骤305至步骤314还可以使用如下步骤代替
步骤305':当接收到的中断为USB中断时,CCID设备进入USB中断服务;
步骤306' :CCID设备判断出现的中断是否为BULK-OUT中断;
如果是,则执行步骤307';
如果否,则执行步骤313'; 步骤307' :CCID设备接收BULK-OUT包,并判断是否正确接收到BULK-OUT数据包; 如果是,执行步骤308'; 如果否,执行相应的操作,执行步骤313'。 步骤308' :CCID设备解析BULK-OUT数据包的内容,并判断是何种类型的CCID命 令; 如果是通道扩展命令,则执行步骤310';
如果不是通道扩展命令,则执行步骤309'。 步骤309' :CCID设备根据CCID命令类型进行相应的处理,并将处理结果组装成符
合CCID接口标准的数据包,并将数据包保存至缓冲区; 步骤310' :CCID设备判断通道扩展命令是否是通道切换命令; 如果是通道切换命令,则执行步骤312'; 如果其他通道扩展命令,则执行步骤311'; 本步骤中所涉及到的判断具体过程为CCID设备中的固件程序拆分接收到的通
道切换命令的包头,并通过计算该命令包头中的数据长度标志,获知数据包的长度及其在
CCID设备缓冲区中的位置,得到该命令流数据包中的标识符(命令中的第11、12个字节),
该标识符是CCID可以是生产厂家自己定制的,可以通过该标识符获知该通道切换命令的
具体用途。如0x5aa5表示该通道扩展命令是通道切换命令,用于多卡槽CCID设备卡槽切
换,当然该标识符也可以是Oxa55a等,取决于生产厂家的定义。 步骤311':执行其他通道扩展命令相应的操作,执行步骤313'; 例如,该通道扩展命令是用于对传输通道上的数据进行加解密操作、读flash或
写flash操作等,则CCID设备执行相应的操作即可。具体的命令例如6B 05 00 00 00 00 00 00 00 00 6066 84 00 08 表示对CCID设备进行flash读操作,第11、 12位字节6066是自定义的,表示读 flash6B 05 00 00 00 00 00 00 00 00 6660 84 00 08 表示对CCID设备进行flash写操作,第11、12为字节6660是自定义的,表示写 flash 步骤312' :CCID设备中的固件程序对接收到的通道切换命令进行解析,得到该条 命令对应的卡槽,通过卡槽切换电路激活命令中指定的卡槽,执行步骤313';
其中,CCID设备中的固件程序拆分接收到的通道切换命令的包头,并通过计算该 命令包头中的数据长度标志,获知数据包的长度及其在CCID设备收发缓冲中的位置,得到 该命令流数据包中的标识符,该标识符是CCID可以是生产厂家自己定制的,可以通过该标 识符获知该通道切换命令的具体用途。如果该标识符表示该通道切换命令是用于卡槽切 换的,通过查看该命令的第13个字节,可以得到本条命令所要激活的卡槽序号,然后通过 CCID设备的电路控制程序单元将卡槽序号所对应的卡槽激活。 具体在本实施例中,以使用的是微软的CCID协议的读卡器驱动为例,符合CCID标 准的通道切换命令中的Slot字段(第6个字节)是固定的00。
假设CCID设备接收到的通道切换命令具体为
6B 04 00 00 00 00 00 00 00 00 5a a5 00 ff 该通道切换命令表示1号卡槽的随机数指令,该条指令的第13个字节00表示1 号卡槽; 6B 04 00 00 00 00 00 00 00 00 5a a5 01 ff 该通道切换命令表示2号卡槽的随机数指令,该条指令的第13个字节01表示2 号卡槽。 具体的,CCID设备通过电路控制程序单元将卡槽序号所对应的卡槽激活,具体实现过程可以如下 —种优选的方式为,CCID设备的卡槽切换电路包括CPU、一个CPU接口、多路选择 开关和电路控制程序单元;多路选择开关分别与CCID设备中的各个卡槽相连接;当CCID 设备分析得到卡槽的序号后,电路控制程序单元控制多路选择开关将相应的卡槽之间的电 路进行连通。 另一种优选的方式,CCID设备卡槽切换电路包括CPU、多个CPU接口和电路控制程 序单元;多个CPU接口分别与CCID设备中的各个卡槽相连接,当CCID设备分析得到卡槽的 编号后,电路控制程序单元将CPU接口与相应的卡槽之间的电路进行连通。
步骤313':中断返回。 对于本实施例需要说明的是,当USB中断和插拔卡事件中断采用不同的中断入口 时,步骤305至步骤314还可以使用如下步骤代替 步骤305":当接收到的中断为插拔卡事件中断时,CCID进入插拔卡事件中断服 务; 步骤306" :CCID设备将智能卡插入或拔出事件信息组装成符合CCID接口标准的
数据包返回给主机; 步骤307":中断返回。 本发明实施例提供了一种实现多卡槽访问的方法,实现微软windows下的读卡器
驱动能够支持多卡槽访问,并且还支持li皿x下的读卡器驱动的多卡槽访问。
实施例4 本发明实施例提供了一种多卡槽的CCID设备,该设备的具体工作方法可以参见 实施例1至3中的具体描述,此处不做详述。参见图4,该设备包括 接口模块401,分别与主机和主控模块402相连接,用于实现主机与主控模块402 之间进行信息交互,本实施例中接口模块401具体可以是USB接口模块;
主控模块402,分别与接口模块401和判断模块403相连接,用于控制接口模块 401接收主机下发的命令流,控制判断模块403接收通过卡槽切换电路模块404上传的智能 卡发送的应答,控制判断模块403发送命令流中的数据包经过卡槽切换电路模块404到智 能卡,控制接口模块401发送符合CCID标准的应答数据包到主机; 判断模块403,分别与主控模块403和卡槽切换电路模块404相连接,用于判断 CCID设备中是否有智能卡插拔事件信息,并将智能卡插拔事件信息通过主控模块402返回 给主机, 卡槽切换电路模块404,分别与判断模块403和卡槽相连接,用于接收主控模块 402发送的命令流,如果接收到主控模块402发送的通道切换命令,根据卡槽序列号激活相 应的卡槽,如果接收到主控模块402发送的其他命令,则将所述命令发送给智能卡,并将智 能卡的应答发送给判断模块403。 其中,卡槽切换电路模块404与卡槽1 、卡槽2、……、卡槽n相连接,而卡槽1 、卡 槽2、……、卡槽n可以分别与智能卡l、智能卡2、……、智能卡n相连接。
例如,卡槽切换电路模块404分别与多卡槽CCID设备中的卡槽1、卡槽2、卡槽3 相连接,当主控模块402获得通道切换命令中所要访问的卡槽序列号时,卡槽切换电路模 块404将卡槽序列号对应的卡槽切换连通,进行激活,例如,当主控模块402获知通道切换命令的卡槽序列号是"0x00"时,卡槽切换电路模块404则将与其相连接的卡槽1激活,当 主控模块402获知通道切换命令的卡槽序列号是"0x02"时,卡槽切换电路模块404则将与 其相连接的卡槽3激活等。
其中,接口模块401还具体包括描述符设置单元和端点设置单元; 描述符设置单元,用于设置符合CCID标准中规定的描述符及其对应的值,本实施
例中具体包括设备类型描述符及卡槽描述符; 本实施例中,CCID设备通过设备类型描述符向主机声明自身是CCID设备,通过卡 槽描述符向主机声明自身支持的卡槽数; 端点设置单元,用于将至少一对用来实现应答和命令管道的IN/OUT端点设置为 BULK-IN和BULK-OUT端点,将至少一个用来实现事件通知管道的IN端点声明为中断端点。
其中,主控模块402还具体包括接收单元、解析单元、拆分单元、计算单元、应答 组成单元、第一判断单元、第二判断单元、第一处理单元、第二处理单元、发送单元;
接收单元,用于接收主机通过接口模块401发送的命令流,及接收智能卡返回的
应答; 解析单元,用于解析接收到的命令流的含义; 拆分单元,用于拆分解析单元解析出来的命令流的包头中的第一个字节,得到该 命令流的命令类型;其中,第一个字节为6B时,表示通道扩展命令; 计算单元,用于根据接收到的命令流中的数据长度标志,确定命令流中的数据包 长度和其在CCID设备收发缓冲中的位置; 应答组成单元,用于将应答组成符合CCID标准的应答数据包; 第一判断单元,用于根据接收模块接收到的BULK-OUT数据包判断主机下发的
CCID命令的类型; 第二判断单元,用于当第一判断单元的判断结果为CCID命令类型是通道扩展命 令时,判断通道扩展命令是否是通道切换命令; 第一处理单元,用于如果第一判断单元的判断结果为CCID命令的类型不是通道 扩展命令,根据CCID命令类型进行相应的处理。 第二处理单元,用于如果第二判断单元的判断结果为通道扩展命令不是通道切换 命令时,根据通道扩展命令的命令类型进行相应的处理; 发送单元,用于发送主机下发的命令流给智能卡,及发送智能卡返回的应答给主 机; 其中,第二判断单元还具体包括 拆分子单元,用于拆分通道切换命令的包头; 第一获得子单元,用于通过计算通道切换命令包头中的数据长度标志,获知数据 包的长度及其在CCID设备收发缓冲中的位置,得到通道切换命令数据包中的标识符,标识 符用于标识通道切换命令的具体用途; 第二获得子单元,用于如果第一获得单元获得的标识符表示该通道切换命令是用 于卡槽切换的,查看通道切换命令的第13个字节,得到本条通道切换命令所要访问的卡槽序号。 本发明实施例提供了一种实现多卡槽防CCID设备,实现微软windows下的读卡器驱动能够支持多卡槽访问,并且还支持li皿x下的读卡器驱动的多卡槽访问。 以上仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则
之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
一种实现多卡槽访问的方法,其特征在于,所述方法包括多卡槽的CCID设备与主机建立连接,将至少一对用来实现应答管道和命令管道的IN/OUT端点声明为BULK-IN和BULK-OUT端点,将至少一个用来实现事件通知管道的IN端点声明为中断端点,并向所述主机声明其自身是符合CCID接口标准的设备以及自身支持的卡槽数;主机对所述多卡槽的CCID设备进行访问;所述多卡槽的CCID设备接收BULK-OUT数据包,并根据所述BULK-OUT数据包判断所述主机下发的CCID命令的类型;当所述CCID命令类型是通道扩展命令时,则判断所述通道扩展命令是否是通道切换命令;如果所述通道扩展命令是通道切换命令时,则解析所述通道切换命令,并激活所述主机欲访问的相应卡槽;如果所述通道扩展命令不是通道切换命令时,则根据所述通道扩展命令的命令类型进行相应的处理;当所述CCID命令的类型不是通道扩展命令,则根据所述CCID命令类型进行相应的处理。
2. 如权利要求1所述的实现多卡槽访问的方法,其特征在于,向所述主机声明其自身支持的卡槽数,具体包括所述CCID设备向所述主机发送卡槽描述符,所述卡槽描述符中使用一个字节表示 CCID设备自身支持的卡槽数。
3. 如权利要求1所述的实现多卡槽访问的方法,其特征在于,根据所述BULK-OUT数据 包判断所述主机下发的CCID命令的类型,具体包括所述CCID设备解析符合CCID标准的命令流,拆分所述命令流的包头中的第一个字节, 得到该命令流的命令类型;其中,当所述第一个字节为6B时,表示通道扩展命令。
4. 如权利要求1所述的实现多卡槽访问的方法,其特征在于,判断所述通道扩展命令 是否是通道切换命令,具体包括所述CCID设备解析所述通道扩展命令,根据所述通道扩展命令中的标识符字段得到 该命令的的命令类型;其中,所述标识符是自定义标识符。
5. 如权利要求1所述的实现多卡槽访问的方法,其特征在于,解析所述通道切换命令, 并激活所述主机欲访问的相应卡槽,具体包括所述CCID设备中的固件程序拆分所述通道切换命令的包头;通过计算所述通道切换命令包头中的数据长度标志,获知数据包的长度及所述数据包 在所述CCID设备收发缓冲中的位置,得到所述通道切换命令数据包中的标识符,所述标识 符用于标识所述通道切换命令的具体用途;如果所述标识符表示该通道切换命令是用于卡槽切换的,则查看所述通道切换命令的 第13个字节,得到本条通道切换命令所要访问的卡槽序号;通过所述CCID设备的电路控制程序单元将所述卡槽序号所对应的卡槽激活。
6. 如权利要求1所述的实现多卡槽访问的方法,其特征在于,所述方法还包括判断被 激活卡槽中是否有智能卡插拔事件信息;如果有,则向所述主机返回符合CCID标准的智能卡插拔事件信息;如果没有,则继续执行所述多卡槽的CCID设备接收BULK-OUT数据包的步骤。
7. 如权利要求6所述的实现多卡槽访问的方法,其特征在于,所述判断是否有智能卡插拔事件信息,具体包括判断所述CCID设备的收发缓冲中是否有所述智能卡插拔事件信息,所述智能卡插拔 事件信息由所述CCID设备在接收到有智能卡插入或拔出的中断信号时写入到所述收发缓 冲中。
8. —种多卡槽的CCID设备,其特征在于,所述设备包括接口模块、主控模块、判断模 块和卡槽切换电路模块;所述接口模块,分别与主机和所述主控模块相连接,用于实现所述主机与所述主控模 块之间的信息交互;所述主控模块,分别与所述接口模块和所述判断模块相连接,用于控制所述接口模块 接收主机下发的命令流,控制所述判断模块接收智能卡发送的应答,控制所述判断模块发 送命令流中的数据包到所述智能卡,控制所述接口模块发送符合CCID标准的应答数据包 到所述主机;所述判断模块,分别与所述主控模块和所述卡槽切换电路模块相连接,用于判断CCID 设备中是否有智能卡插拔事件信息,并将所述智能卡插拔事件信息通过所述主控模块返回 给所述主机,所述卡槽切换电路模块,分别与所述判断模块和卡槽相连接,用于接收所述主控模块 发送的命令流;如果接收到所述主控模块发送的通道切换命令,则根据卡槽序列号激活相 应的卡槽;如果接收到所述主控模块发送的其他命令,则将所述其他命令发送给所述智能 卡,并将所述智能卡的应答数据包发送给所述判断模块。
9. 如权利要求8所述的多卡槽的CCID设备,其特征在于,所述接口模块具体包括描 述符设置单元和端点设置单元;所述描述符设置单元,用于设置符合CCID标准中规定的设备类型描述符及卡槽描述 符;所述CCID设备通过所述设备类型描述符向主机声明自身是CCID设备,通过所述卡槽描 述符向主机声明自身支持的卡槽数;所述端点设置单元,用于将至少一对用来实现应答管道和命令管道的IN/OUT端点设 置为BULK-IN和BULK-OUT端点,将至少一个用来实现事件通知管道的IN端点声明为中断 端点。
10. 如权利要求8所述的多卡槽的CCID设备,其特征在于,所述主控模块具体包括接收单元,用于接收所述主机通过所述接口模块发送的命令流,及接收智能卡通过所述判断模块返回的应答;解析单元,用于解析所述接收单元接收到的所述命令流;拆分单元,用于拆分所述解析单元解析出来的命令流的包头中的第一个字节,得到该 命令流的命令类型,其中,当第一个字节为6B时,表示通道扩展命令;计算单元,用于根据所述接收单元接收到的命令流中的数据长度标志,确定命令流中 的数据包长度和所述数据包在所述CCID设备收发缓冲中的位置;应答组成单元,用于将应答组成符合CCID标准的应答数据包;第一判断单元,用于根据所述接收模块接收到的BULK-OUT数据包判断主机下发的 CCID命令的类型;第二判断单元,用于当所述第一判断单元的判断结果为通道扩展命令时,判断所述通 道扩展命令是否是通道切换命令;第一处理单元,用于如果所述第一判断单元的判断结果为不是通道扩展命令时,根据 所述CCID命令类型进行相应的处理;第二处理单元,用于如果所述第二判断单元的判断结果为通道扩展命令不是通道切换 命令时,根据所述通道扩展命令的命令类型进行相应的处理;发送单元,用于发送所述主机下发的命令流给所述智能卡,及发送智能卡返回的应答 给所述主机。
11. 如权利要求10所述的多卡槽的CCID设备,其特征在于,所述第二判断单元具体包括拆分子单元,用于拆分通道切换命令的包头;第一获得子单元,用于通过计算通道切换命令包头中的数据长度标志,获知数据包的 长度及所述数据包在CCID设备收发缓冲中的位置,得到通道切换命令数据包中的标识符, 所述标识符用于标识通道切换命令的具体用途;第二获得子单元,用于当所述第一获得单元获得的标识符表示该通道切换命令是用于 卡槽切换时,查看通道切换命令的第13个字节,得到本条通道切换命令所要访问的卡槽序 号。
12. 如权利要求8所述的多卡槽的CCID设备,其特征在于,所述判断模块具体用于 判断CCID设备的收发缓冲中是否有智能卡插拔事件信息,智能卡插拔事件信息由CCID设备在接收到有智能卡插入或拔出的中断信号时写入到收发缓冲中。
全文摘要
本发明公开了一种实现多卡槽访问的方法和装置,属于数据通信领域。方法包括多卡槽的CCID设备与主机建立连接,将至少一对用来实现应答管道和命令管道的IN/OUT端点声明为BULK-IN和BULK-OUT端点,将至少一个用来实现事件通知管道的IN端点声明为中断端点,并向所述主机声明其自身是符合CCID接口标准的设备以及自身支持的卡槽数;主机对所述多卡槽的CCID设备进行访问;所述多卡槽的CCID设备接收BULK-OUT数据包,并根据所述BULK-OUT数据包判断所述主机下发的CCID命令的类型;当所述CCID命令类型是通道扩展命令时,则判断所述通道扩展命令是否是通道切换命令;如果所述通道扩展命令是通道切换命令时,则解析所述通道切换命令,并激活所述主机欲访问的相应卡槽。
文档编号G06K7/00GK101719054SQ20091024388
公开日2010年6月2日 申请日期2009年12月24日 优先权日2009年12月24日
发明者于华章, 陆舟 申请人:北京飞天诚信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1