首页> 中国专利> 一种基于标准CCID协议的多卡槽读卡器的工作方法

一种基于标准CCID协议的多卡槽读卡器的工作方法

摘要

本发明公开一种基于标准CCID协议的多卡槽读卡器的工作方法,包括:上电进行初始化,通过USB接口与主机建立连接;当接收到USB配置指令时将USB接口的配置信息返回给主机;等待接收主机下发指令,当检测到置位的标志位时,判断置位的标志位的类型,如为接触卡标志位则根据当前接触卡槽的卡到位引脚电平变化类型记录相应的接触卡槽状态,如为定时标志位则向对应的当前非接触卡槽发送寻卡指令,并记录相应的非接触卡槽状态;如为USB标志位则根据接收到的指令对当前卡槽进行相应操作。本方法中的读卡器采用具有多端点USB芯片,作为标准CCID的复合型设备。读卡器在接受主机访问时,通过不同的端点,访问不同的卡槽,兼容性较好。

著录项

  • 公开/公告号CN103310175A

    专利类型发明专利

  • 公开/公告日2013-09-18

    原文格式PDF

  • 申请/专利权人 飞天诚信科技股份有限公司;

    申请/专利号CN201310251947.5

  • 发明设计人 陆舟;于华章;

    申请日2013-06-24

  • 分类号G06K7/00;G06F13/10;

  • 代理机构

  • 代理人

  • 地址 100085 北京市海淀区学清路9号汇智大厦B楼17层

  • 入库时间 2024-02-19 20:48:02

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-01-20

    授权

    授权

  • 2013-10-23

    实质审查的生效 IPC(主分类):G06K7/00 申请日:20130624

    实质审查的生效

  • 2013-09-18

    公开

    公开

说明书

技术领域

本发明涉及读卡器领域,尤其涉及一种基于标准CCID协议的多卡槽读 卡器的工作方法。

背景技术

读卡器是一种专用设备,有插槽可以插入存储卡,有端口可以联接到 计算机。把适合的存储卡插入插槽,端口与计算机相连并安装所需的 驱动程序之后,计算机就把存储卡当作一个可移动存储器,从而可以 通过读卡器读写存储卡。现有读卡器采用CCID驱动实现多卡槽的设计 上多是使用私有CCID驱动,但由于驱动的兼容性等问题,或多或少会 存在各种问题。

发明内容

本发明的目的是为了克服现有技术的不足,提供一种基于标准CCID协 议的多卡槽读卡器的工作方法。

本发明提供的一种基于标准CCID协议的多卡槽读卡器的工作方法,包 括:

一种基于标准CCID协议的多卡槽读卡器的工作方法,其特征在于,包 括:

步骤S1:读卡器上电进行初始化,通过USB接口与主机建立连接;

步骤S2:等待接收主机下发指令,并检测USB标志位,判断USB标志位 是否置位,是则执行步骤S3,否则返回步骤S2;

步骤S3:根据接收到的USB配置指令将USB接口的配置信息返回给主机 ,USB接口的配置信息包括卡槽的数量和每个卡槽的端点配置,所述每 个卡槽的端点配置包括:输出端点和输入端点;

步骤S4:判断USB接口的配置信息是否全部返回给主机,是则执行步骤 S5, 否则返回步骤S2;

步骤S5:等待接收主机下发指令,当检测到置位的标志位时,判断置 位的标志位的类型,如为接触卡标志位则执行步骤S6,如为定时标志 位则执行步骤S7,如为USB标志位则执行步骤S10;

步骤S6:根据接触卡标志位判断对应的当前接触卡槽的卡到位引脚电 平发生变化的类型,如从低电平变为高电平则将接触卡标志位复位, 记录当前接触卡槽状态为有卡未上电,返回步骤S5;如从高电平变为 低电平则将接触卡标志位复位,记录当前接触卡槽状态为无卡,返回 步骤S5;

步骤S7:根据定时标志位定时向对应的当前非接触卡槽发送寻卡指令 ,并判断在预设时间内是否接收到响应,是则执行步骤S8,否则执行 步骤S9;

步骤S8:判断记录的当前非接触卡槽的状态是否为有卡,是则将定时 标志位复位,返回步骤S5,否则将定时标志位复位,记录当前非接触 卡槽的状态为有卡,返回步骤S5;

步骤S9:判断记录的当前非接触卡槽的状态是否为无卡,是则将定时 标志位复位,返回步骤S5,否则将定时标志位复位,记录当前非接触 卡槽的状态为无卡,返回步骤S5;

步骤S10:根据接收到指令的输出端点检测对应的当前卡槽;

步骤S11:将USB存储器中的指令存储到当前卡槽的第一缓存区中;对 第一缓存区中的指令进行解析,并根据解析结果进行相应处理,将处 理结果存储到当前卡槽的第二缓存区中;

步骤S12:通过当前卡槽的输入端点将第二缓存区中的数据发送给主机 ,返回步骤S5。

进一步地,所述步骤S2与步骤S3之间包括:

判断是否接收到USB配置指令,是则执行步骤S3,否则返回步骤S2。

进一步地,所述步骤S3包括:

步骤S3-1:检测接收到的USB配置指令的类型,如USB配置指令是设备 描述符请求,则执行步骤S3-2;如USB配置指令是配置描述符请求,则 执行步骤S3-3;如USB配置指令是卡槽名称请求,则执行步骤S3-4;如 USB配置指令是卡槽配置请求,则执行步骤S3-5;

步骤S3-2:将设备描述符发送给主机,执行步骤S4;

步骤S3-3:将设备配置头字节和配置数据发送给主机,执行步骤S4; 所述配置数据包括卡槽的数量和每个卡槽对应的标志号;

步骤S3-4:根据指令中的标志号将对应的卡槽名称返回给主机,执行 步骤S4;

步骤S3-5:根据指令中的标志号将对应卡槽的配置信息返回给主机, 执行步骤S4;所述卡槽的配置信息包括:输出端点和输入端点。

进一步地,所述步骤S1中进行初始化包括将枚举标志的值设为预设初 始值;

在所述步骤S3-2中执行步骤S4之前还包括:将枚举标志的值设为第一 预设值;

在所述步骤S3-3中执行步骤S4之前还包括:将枚举标志的值设为第二 预设值;

在所述步骤S3-4中执行步骤S4之前还包括:将枚举标志的值设为第三 预设值;

在所述步骤S3-4中执行步骤S4之前还包括:将枚举标志的值设置为第 四预设值;

所述步骤S4具体为:判断枚举标志的值是否为第四预设值,是则USB接 口的配置信息全部返回给主机,执行步骤S5,否则USB接口的配置信息 未全部返回给主机,返回步骤S2。

进一步地,所述每个卡槽的端点配置还包括中断端点,

所述步骤S6中判断当前接触卡槽的卡到位引脚电平从低电平变为高电 平中还包括:通过当前接触卡槽的中断端点向主机返回有卡响应;所 述步骤S6中判断当前接触卡槽的卡到位引脚电平从高电平变为低电平 中还包括:通过当前接触卡槽的中断端点向主机返回无卡响应;

所述步骤S8中判断为否时还包括:通过当前非接触卡槽的中断端点向 主机返回有卡响应;

所述步骤S9中判断为否时还包括:通过当前非接触卡槽的中断端点向 主机返回无卡响应。

进一步地,所述步骤S11中对第一缓存区中的数据进行解析,并根据解 析结果进行相应处理,将处理结果存储到当前卡槽的第二缓存区中, 包括:

步骤S11-1:判断第一缓存区中的指令是否合法,是则执行步骤S11-3 ,否则执行步骤S11-2;

步骤S11-2:设置命令错误信息并将其存储到第二缓存区,执行步骤S 12;

步骤S11-3:检测第一缓存区中指令的类型,并执行相应操作。

进一步地,所述步骤S11-3包括:

如检测第一缓存区中指令的类型是上电指令,则对当前卡槽中的卡片 进行上电操作,判断是否接收到卡片返回的复位应答文件,是则设置 上电成功信息,并将其存储到第二缓存区,执行步骤S12;否则设置上 电失败信息,并将其存储到第二缓存区,执行步骤S12。

进一步地,所述步骤S11-3包括:

如检测第一缓存区中指令的类型是下电指令,则对当前卡槽中的卡片 执行下电操作;设置下电成功信息,并将其存储到第二缓存区,执行 步骤S12。

进一步地,所述步骤S11-3包括:

如检测第一缓存区中指令的类型是设置参数指令,则根据第一缓存区 中的指令参数与当前卡槽中的卡片协商通讯参数;判断协商通讯参数 是否成功,是则保存通讯参数,并将其存储到第二缓存区,CPU接口根 据保存的通讯参数进行相应设置,执行步骤S12;否则将默认通讯参数 存储到第二缓存区,执行步骤S12。

进一步地,所述判断协商通讯参数是否成功具体为:判断卡片返回的 数据和发送给卡片的数据是否相同,是则协商通讯参数成功,否则协 商通讯参数不成功。

进一步地,所述步骤S11-3包括:

如检测第一缓存区中指令的类型是获取参数指令,则根据指令获取相 应的参数,并将其存储到第二缓存区,执行步骤S12。

进一步地,所述步骤S11-3包括:

如检测第一缓存区中指令的类型是复位参数指令,则根据复位参数指 令进行复位操作,将默认参数存储到第二缓存区,执行步骤S12。

进一步地,所述步骤S11-3包括:

如检测第一缓存区中指令的类型是扩展通道指令,则根据扩展通道指 令进行相应操作,并将操作结果存储到第二缓存区,执行步骤S12。

进一步地,所述步骤S11-3还包括为:

如检测第一缓存区中指令的类型是数据交换APDU指令,则根据所述复 位应答文件判断数据传输的协议类型,如是T1,则执行步骤C1,如是 T0,则执行步骤C3;

步骤C1:将第一缓存区中的全部数据包发送给当前卡槽中的卡片,并 等待卡片返回响应;

步骤C2:接收卡片返回的响应,并将其存储到第二缓存区,执行步骤 S12;

步骤C3:解析数据交换APDU指令中的APDU数据,获得发送数据长度和 接收数据长度;

步骤C4:给卡片发送APDU数据中的前五个字节码,并接收卡片返回的 过程字节码;

步骤C5:判断字节码是否为第一预设字符串,是则执行步骤C6,否则 执行步骤C9;

步骤C6:判断第一预设字符串是否为0x60,是则执行步骤C7,否则执 行步骤C8;

步骤C7:设置忙响应并将其存储到第二缓存区,重新设置等待时间, 执行步骤S12;

步骤C8:接收剩余一个字节状态字,设置数据返回响应并将其存储到 第二缓存区,执行步骤S12;

步骤C9:判断第一预设字符串是否为INS反,是则执行步骤C10,否则 执行步骤C13;

步骤C10:判断是否有数据未发送给卡片,是则执行步骤C11,否则执 行步骤C12;

步骤C11:继续发送一个字节的数据给卡片,并接收卡片返回的一个字 节的过程字节码,返回步骤C5;

步骤C12:接收卡片返回的一个字节的数据和一个字节的过程字节码, 返回步骤C5;

步骤C13:判断数据是否发送完成,是则执行步骤C14,否则执行步骤 C15;

步骤C14:接收卡片返回的接收数据长度的数据和一个字节的状态字节 码,返回步骤C5;

步骤C15:按照发送数据长度给卡片发送剩余字节,接收卡片返回的接 收数据长度的数据和一个字节的状态字节码,返回步骤C5。

进一步地,所述第一预设字符串为0x60至0x6F中或0x90至0x9F中的任 意一个。

进一步地,所述步骤S11-3包括:

如检测第一缓存区中指令的类型是查询指令,则将记录的卡槽状态存 储到第二缓存区中,执行步骤S12。

进一步地,所述步骤S11-1包括:对第一缓存区中的数据进行解析得到 指令类型、数据长度值,判断解析得到的数据长度值与第一缓存区中 的整体数据的长度是否相同,是则第一缓存区中的指令合法,执行步 骤S11-3,否则第一缓存区中的指令不合法,执行步骤S11-2。

进一步地,所述步骤S12具体为:

步骤S12-1:判断发送标志是否置位,是则执行步骤S12-2,否则执行 步骤S12-1;

S12-2:通过当前卡槽的输入端点将第二缓存区中的数据发送给主机, 并判 断发送标志是否复位,是则返回步骤S5,否则返回步骤S12-2。

本发明提供另一种基于标准CCID协议的多卡槽读卡器的工作方法,包 括:

步骤P1:读卡器上电进行初始化,通过USB接口与主机建立连接;

步骤P2:打开USB通讯中断;

步骤P3:等待USB通讯中断信号,当接收到USB通讯中断信号时,进入 USB通讯中断进行相应处理,USB通讯中断进行相应处理包括:将USB接 口的配置信息返回给主机,退出USB通讯中断,执行步骤P4;USB接口 的配置信息卡槽的数量和每个卡槽的端点配置,所述每个卡槽的端点 配置包括:输出端点、输入端点;

步骤P4:判断USB接口的配置信息是否全部返回给主机,是则执行步骤 P5,否则返回步骤P3;

步骤P5:打开定时中断和外部中断;

步骤P6:当检测到中断信号时判断中断信号类型,如为USB通讯中断时 ,则进入USB通讯中断处理,包括步骤A1-步骤A4;如为定时中断则进 入定时中断处理,包括步骤B1-B3;如为外部中断则进入外部中断处理 ,包括步骤C1;

步骤A1:根据接收到指令的输出端点检测发生USB通讯中断所对应的当 前卡槽;

步骤A2:将接收到的指令存储到当前卡槽的第一缓存区中;

步骤A3:对第一缓存区中的指令进行解析,根据解析结果进行相应处 理,将处理结果存储到当前卡槽的第二缓存区;

步骤A4:通过当前卡槽的输入端点将第二缓存区中的数据发送给主机 ,退出USB通讯中断,返回步骤P6;

步骤B1:根据发生的定时中断向对应的当前非接触卡槽发送寻卡指令 ,并判断在预设时间内是否接收到响应,是则执行步骤B2,否则执行 步骤B3;

步骤B2:判断记录的当前非接触卡槽的状态是否为有卡,是则退出定 时中断,返回步骤P6,否则记录当前非接触卡槽的状态为有卡,退出 定时中断,返回步骤P6;

步骤B3:判断记录的当前非接触卡槽的状态是否为无卡,是则退出定 时中断,返回步骤P6,否则记录当前非接触卡槽的状态为无卡,退出 定时中断,返回步骤P6;

步骤C1:根据发生的外部中断判断对应的当前接触卡槽的卡到位引脚 电平发生变化的类型,如从低电平变为高电平则记录接触卡槽状态为 有卡未上电,退出外部中断,返回步骤P6;如从高电平变为低电平则 记录接触卡槽状态为无卡,退出外部中断,返回步骤P6。

进一步地,所述步骤P3中的进入USB通讯中断进行相应处理具体包括:

步骤D1:检测接收到的USB配置指令的类型,如USB配置指令是设备描 述符请求,则执行步骤D2;如USB配置指令是配置描述符请求,则执行 步骤D3;如USB配置指令是卡槽名称请求,则执行步骤D4;如USB配置 指令是卡槽配置请求,则执行步骤D5;

步骤D2:将设备描述符发送给主机,退出USB通讯中断,执行步骤P4;

步骤D3:将设备配置头字节和配置数据发送给主机,退出USB通讯中断 ,执行步骤P4;所述配置数据包括卡槽的数量和每个卡槽对应的标志 号;

步骤D4:根据指令中的标志号将对应的卡槽名称返回给主机,退出US B通讯中断,执行步骤P4;

步骤D5:根据指令中的标志号将对应卡槽的配置信息返回给主机,退 出USB 通讯中断,执行步骤P4;所述卡槽的配置信息包括:输出端点和输入 端点。

进一步地,在所述步骤D2中执行步骤P4之前还包括:将枚举标志的值 设为第一预设值;

在所述步骤D3中执行步骤P4之前还包括:将枚举标志的值设为第二预 设值;

在所述步骤D4中执行步骤P4之前还包括:将枚举标志的值设为第三预 设值;

在所述步骤D5中执行步骤P4之前还包括:将枚举标志的值设置为第四 预设值;

所述步骤P4具体为:判断枚举标志的值是否为第四预设值,是则USB接 口的配置信息全部返回给主机,执行步骤P5,否则USB接口的配置信息 未全部返回给主机,返回步骤P3。

进一步地,所述每个卡槽的端点配置还包括中断端点,

所述步骤B2中判断为否时还包括:通过当前非接触卡槽的中断端点向 主机返回有卡响应;

所述步骤B3中判断为否时还包括:通过当前非接触卡槽的中断端点向 主机返回无卡响应;

所述步骤C1中判断当前接触卡槽的卡到位引脚电平从低电平变为高电 平中还包括:通过当前接触卡槽的中断端点向主机返回有卡响应;所 述步骤C1中判断当前接触卡槽的卡到位引脚电平从高电平变为低电平 中还包括:通过当前接触卡槽的中断端点向主机返回无卡响应。

进一步地,所述步骤A3中对第一存储区中的数据进行解析,并根据解 析结果进行相应处理,将处理结果存储到当前卡槽的第二缓存区中, 包括:

步骤A3-1:判断第一缓存区中的数据是否合法,是则执行步骤A3-3, 否则执行步骤A3-2;

步骤A3-2:设置命令错误信息并将其存储到第二缓存区,执行步骤A4 ;

步骤A3-3:检测第一缓存区中指令的类型,并执行相应操作。

进一步地,所述步骤A3-3包括:

如检测第一缓存区中指令的类型是上电指令,则对当前卡槽中的卡片 进行上电操作,判断是否接收到卡片返回的复位应答文件,是则设置 上电成功信息,并将其存储到第二缓存区,执行步骤A4;否则设置上 电失败信息,并将其存储到第二缓存区,执行步骤A4。

进一步地,所述步骤A3-3包括:

如检测第一缓存区中指令的类型是下电指令,则对当前卡槽中的卡片 执行下电操作;设置下电成功信息,并将其存储到第二缓存区,执行 步骤A4。

进一步地,所述步骤A3-3包括:

如检测第一缓存区中指令的类型是设置参数指令,则根据第一缓存区 中的指令参数与当前卡槽中的卡片协商通讯参数;判断协商通讯参数 是否成功,是则保存通讯参数,并将其存储到第二缓存区,根据保存 的通讯参数对CPU接口进行相应设置,执行步骤A4;否则将默认通讯参 数存储到第二缓存区,执行步骤A4。

进一步地,所述判断协商通讯参数是否成功具体为:判断卡片返回的 数据和发送给卡片的数据是否相同,是则协商通讯参数成功,否则协 商通讯参数不成功。

进一步地,所述步骤A3-3包括:

如检测第一缓存区中指令的类型是获取参数指令,则根据指令获取相 应的参数,并将其存储到第二缓存区,执行步骤A4。

进一步地,所述步骤A3-3包括:

如检测第一缓存区中指令的类型是复位参数指令,则根据复位参数指 令进行复位操作,将默认参数存储到第二缓存区,执行步骤A4。

进一步地,所述步骤A3-3包括:

如检测第一缓存区中指令的类型是扩展通道指令,则根据扩展通道指 令进行相应操作,并将操作结果存储到第二缓存区,执行步骤A4。

进一步地,所述步骤A3-3还包括:

如检测第一缓存区中指令的类型是数据交换APDU指令,则根据所述复 位应答文件判断数据传输的协议类型,如是T1,则执行步骤C1,如是 T0,则执行步骤C3;

步骤C1:将第一缓存区中的全部数据包发送给当前卡槽中的卡片,并 等待卡片返回响应;

步骤C2:接收卡片返回的响应,并将其存储到第二缓存区,执行步骤 A4;

步骤C3:解析数据交换APDU指令中的APDU数据,获得发送数据长度和 接收数据长度;

步骤C4:给卡片发送APDU数据中的前五个字节码,并接收卡片返回的 过程字节码;

步骤C5:判断字节码是否为第一预设字符串,是则执行步骤C6,否则 执行步骤C9;

步骤C6:判断第一预设字符串是否为0x60,是则执行步骤C7,否则执 行步 骤C8;

步骤C7:设置忙响应并将其存储到第二缓存区,重新设置等待时间, 执行步骤A4;

步骤C8:接收剩余一个字节状态字,设置数据返回响应并将其存储到 第二缓存区,执行步骤A4;

步骤C9:判断第一预设字符串是否为INS反,是则执行步骤C10,否则 执行步骤C13;

步骤C10:判断是否有数据未发送给卡片,是则执行步骤C11,否则执 行步骤C12;

步骤C11:继续发送一个字节的数据给卡片,并接收卡片返回的一个字 节的过程字节码,返回步骤C5;

步骤C12:接收卡片返回的一个字节的数据和一个字节的过程字节码, 返回步骤C5;

步骤C13:判断数据是否发送完成,是则执行步骤C14,否则执行步骤 C15;

步骤C14:接收卡片返回的接收数据长度的数据和一个字节的状态字节 码,返回步骤C5;

步骤C15:按照发送数据长度给卡片发送剩余字节,接收卡片返回的接 收数据长度的数据和一个字节的状态字节码,返回步骤C5。

进一步地,第一预设字符串为0x60至0x6F中或0x90至0x9F中的任意一 个。

进一步地,所述步骤A3-3包括:

如检测第一缓存区中指令的类型是查询指令,则将记录的卡槽状态存 储到第二缓存区中,执行步骤A4。

进一步地,所述步骤A3-1包括:对第一缓存区中的数据进行解析得到 指令类型、数据长度值,判断解析得到的数据长度值与第一缓存区中 的整体数据的长度是否相同,是则第一缓存区中的数据合法,执行步 骤A3-3,否则第一缓存区中的数据不合法,执行步骤A3-2。

进一步地,所述步骤A4具体为:

步骤A4-1:判断发送标志是否置位,是则执行步骤A4-2,否则执行步 骤A4-1;

A4-2:通过当前卡槽的输入端点将第二缓存区中的数据发送给主机, 并判断所述发送标志是否复位,是则返回步骤P6,否则返回步骤A4-2 。

本发明与现有技术相比,具有以下优点:

本方法中的读卡器采用具有多端点USB芯片,向主机声明出多个标准C CID端点,作为标准CCID的复合型设备,相当于用一个读卡器完成多个 标准CCID的单卡槽读卡器的功能。读卡器在接受主机访问时,通过不 同的端点,访问不同的卡槽,兼容性较好。

附图说明

图1-图2为本发明实施例一提供的基于标准CCID协议的多卡槽读卡器的 工作方法流程图;

图3-图4为本发明实施例二提供的基于标准CCID协议的多卡槽读卡器的 工作方法流程图;

图5为本发明实施例二中步骤204的详细实现过程流程图;

图6为实施例三提供的读卡器根据CCID协议对当前卡槽的第一缓存区中 的数据进行解析,并根据解析结果进行相应处理,将处理结果存储到 当前卡槽的第二缓存区的详细实现过程流程图。

具体实施方式

为更进一步阐述本发明为达成预订目的所采取的技术手段及功效,以 下结合附图及较佳实施例,对依据发明提出的基于标准CCID协议的多 卡槽读卡器的工作方法,其具体实施方式、特征及其功效,说明如后 。

实施例一

本发明实施例一提供了一种基于标准CCID协议的多卡槽读卡器的工作 方法,具体以该读卡器具有三个卡槽(A卡槽、B卡槽、C卡槽)为例进 行说明,本实施例中的读卡器相当于三个独立的设备(A设备、B设备 、C设备),如图1和图2所示,包括:

步骤101:读卡器上电进行初始化;

本实施例中,读卡器对RCC、IO、终端外部硬件、USB时钟和其他USB寄 存器配置进行初始化;还包括将枚举标志的值设为预设初始值;

步骤102:读卡器通过USB接口与主机建立连接;

步骤103:等待接收主机下发指令,并检测USB标志位,判断USB标志位 是否置位,是则执行步骤104,否则返回步骤103;

本实施例中,接收到主机下发的指令时将其存储到USB存储器中,当硬 件检测到USB存储器中有数据时将USB标志位置位;在本实施例中,读 卡器未接收到USB配置指令之前不接收主机下发的任何数据,所以该步 骤中硬件检测到USB存储器中的数据为USB配置指令;

步骤104:根据接收到的USB配置指令将USB接口的配置信息返回给主机 ;

在本实施例中,USB接口的配置信息包括卡槽的数量和每个卡槽的端点 配置,所述每个卡槽的端点配置包括:输出端点和输入端点;

本实施例中,在步骤104中读卡器先将USB存储器中的USB配置指令读出 来后,再将相应的USB接口的配置信息返回给主机;USB存储器中的数 据读出后,硬件检测USB存储器中无数据时,将USB标志位复位;

本实施例中,步骤104具体为:读取USB存储器中的USB配置指令并将U SB接口的配置信息返回给主机,当硬件检测到USB存储区中无数据时将 USB标志位复位;

在步骤103与步骤104之间包括:判断是否接收到USB配置指令,是则执 行步骤104,否则返回步骤103;

本实施例中将USB接口的配置信息返回给主机包括:

步骤104-1:检测接收到的USB配置指令的类型,如USB配置指令是设备 描述符请求,则执行步骤104-2;如USB配置指令是配置描述符请求, 则执行步骤104-3;如USB配置指令是卡槽名称请求,则执行步骤104- 4;如USB配置指令是卡槽配置请求,则执行步骤104-5;

步骤104-2:将设备描述符发送给主机,执行步骤105;

在本实施例中,主机通过发送 Get_Device_Descriptor命令来获取设 备描述符,设备描述符包括数据包长度、描述符类型、USB设备支持的 版本号、设备类型、子设备类型、设备支持的协议、最大数据包长度 、VID、PID、设备标识、设备版本号、厂商、设备信息及其编号、各 编号设备的配置;

优选的,步骤104-2中执行步骤105之前还包括:将枚举标志的值设为 第一预设值;

在步骤104-2之前还可以包括:判断枚举标志的值是否为预设初始值, 是则执行步骤104-2,否则返回步骤103;

步骤104-3:将设备配置头字节和配置数据发送给主机,执行步骤105 ;

本实施例中的配置头字节为09;配置数据包括:读卡器类型(CCID) ,读卡器卡槽数量、每个卡槽对应的标志号、CCID 类描述符(CCID 支持的协议),各个卡槽的USB输入输出端点地址等;具体的,本实施 例中的卡槽数量为三个,分别映射为三个设备A、B、C,对应的标志号 分别第一数值、第二数值、第三数值,优选的,第一数值、第二数值 、第三数值为4、5、6;

优选的,步骤104-3中执行步骤105之前还包括:将枚举标志的值设为 第二预设值;

在步骤104-3之前还可以包括:判断枚举标志的值是否为第一预设值, 是则执行步骤104-3,否则执行步骤103;

步骤104-4:根据指令中的标志号判断卡槽名称请求的类型,如标志号 为第一数值则将A卡槽名称返回给主机,执行步骤105;如标志号为第 二数值则将B卡槽名称返回给主机,执行步骤105;如标志号为第三数 值则将C卡槽名称返回给主机,执行步骤105;

优选的,步骤104-4中执行步骤105之前还包括:将枚举标志的值设为 第三预设值;

在步骤104-4之前还可以包括:判断枚举标志的值是否为第二预设值, 是则执行步骤104-4,否则返回步骤103;

优选的,本实施例中的第一数值、第二数值、第三数值分别为4、5、 6;

具体的,本实施例中,A卡槽名称为配置非接触USB通讯卡槽,B卡槽名 称为配置大卡USB通讯卡槽,C卡槽名称为配置SIM1卡USB 通讯卡槽;

步骤104-5:根据指令中的标志号判断卡槽配置请求的类型,如标志号 为第一数值则将A卡槽的配置信息返回给主机,执行步骤105;如标志 号为第二数值则将B卡槽的配置信息返回给主机,执行步骤105;如标 志号为第三数值则将 C卡槽的配置信息返回给主机,执行步骤105;

优选的,步骤104-5中执行步骤105之前还包括:将枚举标志的值设为 第四预设值;

在步骤104-5之前还可以包括:判断枚举标志的值是否第三预设值,是 则执行步骤105,否则返回步骤103;

具体的,本实施例中的每个卡槽的配置信息包括:卡槽类型描述符、 CCID 类描述符、输出端点配置描述符、输入端点配置描述符;优选 的,本实施例中的A卡槽的输出端点配置描述符、输入端点配置描述符 分别为第一端点、第二端点;B卡槽的输出端点配置描述符、输入端点 配置描述符分别为第四端点、第五端点;C卡槽的输出端点配置描述符 、输入端点配置描述符分别为第七端点、第八端点;

优选的,每个卡槽的配置信息还包括中断端点描述符,A卡槽、B卡槽 、C卡槽的中断端点描述符分别为第三端点、第六端点、第九端点;

在本实施例中,一个卡槽映射为一个设备,其中,输出端点用于接收 主机下发的数据,输入端点用于将指令处理结果返回给主机,中断端 点用于给主机返回卡槽状态的响应;

步骤105:判断USB接口的配置信息是否全部返回给主机,是则执行步 骤106,否则返回步骤103;

优选的,在本实施例中,判断USB接口的配置信息是否全部返回给主机 为:判断枚举标志的值是否为第四预设值,是则执行步骤106,否则返 回步骤103;

步骤106:等待接收主机下发指令,并判断是否检测到置位的标志位, 是则执行步骤107,否则返回步骤106;

本实施例中,如读卡器硬件检测到I/O卡槽状态发生变化,则将接触卡 标志位置位;如定时器的计时到达预设时间则读卡器硬件将定时标志 位置位,如读 卡器接收到主机下发的指令则将其存储到USB存储器中,硬件检测到U SB存储器中有数据则将USB标志位置位;

步骤107:判断置位的标志位的类型,如为接触卡标志位则执行步骤1 08,如为定时标志位则执行步骤109,如为USB标志位则执行步骤112;

如果本实施例中的接触卡槽和非接触卡槽有多个,则每个接触卡槽对 应设置一个接触卡标志位;每个非接触卡槽对应设置一个定时标志位 ;

步骤108:根据接触卡标志位判断对应的当前接触卡槽的卡到位引脚电 平发生变化的类型,如从低电平变为高电平则将接触卡标志位复位, 记录接触卡槽状态为有卡未上电,返回步骤106;如从高电平变为低电 平则将接触卡标志位复位,记录接触卡槽状态为无卡,返回步骤106;

优选的,如本实施例中在枚举过程中声明了接触卡槽的配置信息中包 括中断端点,则步骤108中判断结果为从低电平变为高电平则还包括: 通过当前接触卡槽的中断端点向主机返回有卡响应;步骤108中判断为 判断结果为从高电平变为低电平则时还包括:通过当前接触卡槽的中 断端点向主机返回无卡响应;

具体的,在本实施例中,如当前接触卡槽为B卡槽,则通过第六端点向 主机返回有卡/无卡响应;如当前接触卡槽为C卡槽,则通过第九端点 向主机返回有卡/无卡响应;

优选的,在本实施例中,设置接触卡槽寄存器,如寄存器的值为0表示 接触卡槽状态为有卡已上电,如为1则表示接触卡槽状态为有卡未上电 ,如为2则表示接触卡槽状态为无卡;

步骤109:根据定时标志位定时向对应的当前非接触卡槽发送寻卡指令 ,并判断在预设时间内是否接收到响应,是则执行步骤110,否则执行 步骤111;

具体的,本实施例中的寻卡指令为wakeup指令;

步骤110:判断记录的当前非接触卡槽的状态是否为有卡,是则将定时 标志位复位,返回步骤106,否则将定时标志位复位,记录当前非接触 卡槽的状态为有卡,返回步骤106;

优选的,如本实施例中在枚举过程中声明了非接触卡槽的配置信息中 包括中断端点,则步骤110中判断为否时还包括:通过当前非接触卡槽 的中断端点向主机返回有卡响应;

本实施例,如当前非接触卡槽是第一次有卡插入,未记录当前非接触 卡槽的状态,则步骤110中直接通过当前非接触卡槽的中断端点向主机 返回有卡响应并记录非接触卡槽的状态为有卡;具体的,在本实施例 中,当前非接触卡槽为A卡槽,则通过第三端点向主机返回有卡响应;

如当前非接触卡槽中有卡后进行防冲突和协议层激活,之后为了在不 影响卡片状态的情况下检测卡片是否在非接触场中,读卡器会定时发 送一个确认响应指令对该卡进行检测,如卡片未移走,卡片会给读卡 器一个响应,如卡片移走,则卡片不给读卡器返回响应,之后读卡器 再定时发送寻卡指令进行寻卡;

步骤111:判断记录的当前非接触卡槽的状态是否为无卡,是则将定时 标志位复位,返回步骤106,否则将定时标志位复位,记录当前非接触 卡槽的状态为无卡,返回步骤106;

优选的,如本实施例中在枚举过程中声明了非接触卡槽的配置信息中 包括中断端点,则步骤111中判断为否时还包括:通过当前非接触卡槽 的中断端点向主机返回无卡响应;

具体的,在本实施例中,当前非接触卡槽为A卡槽,则通过第三端点向 主机返回无卡响应;

优选的,在本实施例中,设置非接触卡槽寄存器,如寄存器的值为0表 示非接触卡槽状态为有卡已激活,如为1则表示非接触卡槽状态为有卡 未激活; 如为2则表示非接触卡槽状态为无卡;

具体的,在本实施例中的有卡响应为0x50 0x03;无卡响应为0x50  0x02;

步骤112:根据接收到指令的输出端点检测当前卡槽的类型,如接收到 指令的输出端点为第一端点则当前卡槽为A卡槽,执行步骤113,如接 收到指令的输出端点为第四端点则当前卡槽为B卡槽,执行步骤113, 如接收到指令的输出端点为第七端点则当前卡槽为C卡槽,执行步骤1 13;

步骤113:将USB存储器中的指令存储到当前卡槽的第一缓存区中;对 第一缓存区中的指令进行解析,并根据解析结果进行相应处理,将处 理结果存储到当前卡槽的第二缓存区中;

具体的,将USB存储器中的数据存储到当前卡槽的第一缓存区,则USB 存储器中无数据,读卡器硬件检测到USB存储器中无数据时,将USB标 志位复位;

在本实施例中,当读卡器硬件检测到第二缓存区中有数据时,将当前 卡槽的发送标志置位;

具体的,步骤113中的解析处理过程符合CCID协议,具体实现过程在实 施例三中进行详述;

具体的,本实施例中步骤113还包括:当接收到主机通过当前卡槽的输 出端点下发的数据时将数据标识设置为1,表示当前正在接收数据;当 接收完成后将数据标识设置为2,表示当前正在对接收到的数据进行解 析并根据解析对卡片进行处理;当处理完成后将数据标识设置为3,表 示处理完成等待将处理结果返回给主机;具体的,本实施例中的数据 标识为3;

步骤114:通过当前卡槽的输入端点将第二缓存区中的数据发送给主机 ,返回步骤106;

在本实施例中,步骤114包括:

步骤114-1:检测发送标志,并判断发送标志是否置位,是则执行步骤 114-2,否则返回步骤114-1;

步骤114-2:通过当前卡槽的输入端点将第二缓存区中的数据发送给主 机,并判断发送标志是否复位,是则返回步骤106,否则返回步骤114 -2;

在本实施例中,当读卡器硬件检测到第二缓存区中的数据发送完后, 读卡器将当前卡槽的发送标志复位;

在本实施例中,如当前卡槽为A卡槽,则通过第二端点将第二缓存区中 的数据发送给主机;如当前卡槽为B卡槽,则通过第五端点将第二缓存 区中的数据发送给主机;如当前卡槽为C卡槽,则通过第八端点将第二 缓存区中的数据发送给主机;

在步骤114-2中判断为是时还可以包括:将数据标识设置为0,表示发 送成功。

实施例二

本发明实施例二提供一种基于标准CCID协议的多卡槽读卡器的工作方 法,如图3-图 4所示,该方法包括:

步骤201:读卡器上电进行初始化;

本实施例中,读卡器对RCC、IO卡槽、串口、USB卡槽、外部硬件、US B时钟、USB通讯中断和其他USB寄存器配置进行初始化;还包括将枚举 标志的值设为预设初始值;

步骤202:通过USB接口与主机建立连接;

步骤203:打开USB通讯中断;

步骤204:等待USB通讯中断信号,当接收到USB通讯中断信号时,进入 USB通讯中断进行相应处理;

在本实施例中,进入USB通讯中断进行相应处理包括:将USB接口的配 置信息返回给主机,退出USB通讯中断,执行步骤205;USB接口的配置 信息包括卡槽的数量和每个卡槽的端点配置,所述每个卡槽的端点配 置包括:输出端点和输入端点;步骤204的具体实现过程如图5所示, 包括:

步骤204-1:检测接收到的USB配置指令的类型,如USB配置指令是设备 描述符请求,则执行步骤204-2;如USB配置指令是配置描述符请求, 则执行步骤204-3;如USB配置指令是卡槽名称请求,则执行步骤204- 4;如USB配置指令是卡槽配置请求,则执行步骤204-5;

步骤204-2:将设备描述符发送给主机,退出USB通讯中断,执行步骤 205;

在本实施例中,主机通过发送 Get_Device_Descriptor命令来获取设 备描述符,设备描述符包括数据包长度、描述符类型、USB设备支持的 版本号、设备类型、子设备类型、设备支持的协议、最大数据包长度 、VID、PID、设备标识、设备版本号、厂商、设备信息及其编号、各 编号设备的配置;

优选的,步骤204-2中执行步骤205之前还包括:将枚举标志的值设为 第一预设值;

在步骤204-2之前还可以包括:判断枚举标志的值是否为预设初始值, 是则执行步骤204-2,否则退出USB通讯中断,返回步骤203;

步骤204-3:将设备配置头字节和配置数据发送给主机,退出USB通讯 中断,执行步骤205;

本实施例中的配置头字节为09;配置数据包括:读卡器类型(CCID) ,读卡器卡槽数量(bNum中断erfaces)、每个卡槽对应的标志号、C CID 类描述符 (CCID支持的协议),各个卡槽的USB输入输出端点地址等;具体的, 本实施例中的卡槽数量为三个,包括A卡槽、B卡槽和C卡槽,分别映射 为三个设备A、B、C,对应的标志号分别第一数值、第二数值、第三数 值,优选的,第一数值、第二数值、第三数值为4、5、6;

优选的,步骤204-3中执行步骤205之前还包括:将枚举标志的值设为 第二预设值;

在步骤204-3之前还可以包括:判断枚举标志的值是否为第一预设值, 是则执行步骤204-3,否则退出USB通讯中断,返回步骤203;

步骤204-4:根据指令中的标志号判断卡槽名称请求的类型,如标志号 为第一数值则将A卡槽名称返回给主机,退出USB通讯中断,执行步骤 205;如标志号为第二数值则将B卡槽名称返回给主机,退出USB通讯中 断,执行步骤205;如标志号为第三数值则将C卡槽名称返回给主机, 退出USB通讯中断,执行步骤205;

优选的,步骤204-4中执行步骤205之前还包括:将枚举标志的值设为 第三预设值;

在步骤204-4之前还可以包括:判断枚举标志的值是否为第二预设值, 是则执行步骤204-4,否则退出USB通讯中断,返回步骤203;

优选的,本实施例中的第一数值、第二数值、第三数值分别为4、5、 6;

具体的,本实施例中,A卡槽名称为配置非接触USB通讯卡槽,B卡槽名 称为配置大卡USB通讯卡槽,C卡槽名称为配置SIM1卡USB 通讯卡槽;

步骤204-5:根据指令中的标志号判断卡槽配置请求的类型,如标志号 为第一数值则将A卡槽的配置信息返回给主机,退出USB通讯中断,执 行步骤205;如标志号为第二数值则将B卡槽的配置信息返回给主机, 退出USB通讯中断, 执行步骤205;如标志号为第三数值则将C卡槽的配置信息返回给主机 ,退出USB通讯中断,执行步骤205;

优选的,步骤204-5中执行步骤205之前还包括:将枚举标志的值设为 第四预设值;

在步骤204-5之前还可以包括:判断枚举标志的值是否第三预设值,是 则执行步骤204-5,否则退出USB通讯中断,返回步骤203;

具体的,本实施例中的每个卡槽的配置信息包括:卡槽类型描述符、 CCID 类描述符、输出端点配置描述符、输入端点配置描述符;优选 的,本实施例中的A卡槽的输出端点配置描述符、输入端点配置描述符 分别为第一端点、第二端点;B卡槽的输出端点配置描述符、输入端点 配置描述符分别为第四端点、第五端点;C卡槽的输出端点配置描述符 、输入端点配置描述符分别为第七端点、第八端点;

优选的,每个卡槽的配置信息还包括中断端点描述符,A卡槽、B卡槽 、C卡槽的中断端点描述符分别为第三端点、第六端点、第九端点;

在本实施例中,一个卡槽映射为一个设备,其中,输出端点用于用于 接收主机下发的数据,输入端点用于将指令处理结果返回给主机,中 断端点用于小数据的输入,当有卡片插入和拔出时读卡器会通过中断 端点通知主机;

步骤205:判断USB接口的配置信息是否全部返回给主机,是则执行步 骤206,否则返回步骤204;

优选的,在本实施例中,判断USB接口的配置信息是否全部返回给主机 具体为:判断枚举标志的值是否为第四预设值,是则执行步骤206,否 则返回步骤204;

步骤206:打开定时中断和外部中断;

步骤207:当检测到中断信号时判断中断信号类型,如为USB通讯中断 时, 则进入USB通讯中断处理,包括步骤A1-步骤A4;如为定时中断则进入 定时中断处理,包括步骤B1-B3;如为外部中断则进入外部中断处理, 包括步骤C1;

如果本实施例中的非接触卡槽有多个,则每个非接触卡槽对应设置一 个定时器;

步骤A1:根据接收到指令的输出端点检测发生USB通讯中断所对应的当 前卡槽,如接收到数据的端点为第一端点则当前卡槽为A卡槽,执行步 骤A2,如接收到数据的端点为第四端点则当前卡槽为B卡槽,执行步骤 A2,如接收到数据的端点为第七端点则当前卡槽为C卡槽,执行步骤A 2;

步骤A2:将接收到的指令存储到当前卡槽的第一缓存区中;

步骤A3:对第一缓存区中的指令进行解析,根据解析结果进行相应处 理,将处理结果存储到当前卡槽的第二缓存区;

具体的,本实施例的步骤A3在实施例三中进行详述;

优选的,在本实施例中,当读卡器硬件检测到第二缓存区中有数据时 ,将当前卡槽的发送标志置位;

步骤A4:通过当前卡槽的输入端点将第二缓存区中的数据发送给主机 ,退出USB通讯中断,返回步骤207;

在本实施例中,步骤A4具体包括:

步骤A4-1:检测发送标志,并判断发送标志是否置位,是则执行步骤 A4-2,否则返回步骤A4-1;

步骤A4-2:通过当前卡槽的输入端点将第二缓存区中的数据发送给主 机,并判断发送标志是否复位,是则退出USB通讯中断,返回步骤207 ,否则返回步骤A4-2;

具体的,在本实施例中,读卡器硬件检测到第二缓存区中的数据发送 完成时将发送标志复位;

在本实施例中,如当前卡槽为A卡槽,则通过第二端点将第二缓存区中 的数据发送给主机;如当前卡槽为B卡槽,则通过第五端点将第二缓存 区中的数据发送给主机;如当前卡槽为C卡槽,则通过第八端点将第二 缓存区中的数据发送给主机;

步骤B1:读卡器根据定时中断向对应的当前非接触卡槽发送寻卡指令 ,并判断在预设时间内是否接收到响应,是则执行步骤B2,否则执行 步骤B3;

具体的,本实施例中的寻卡指令为wakeup指令;

若读卡器中有两个非接触卡槽,则相应的设置两个定时器,当第一个 定时器计时到达预设时间时触发读卡器对第一个非接触卡槽进行操作 ;当第二个定时器计时到达预设时间时触发读卡器对第二个非接触卡 槽进行操作;

步骤B2:判断记录的当前非接触卡槽的状态是否为有卡,是则退出定 时中断,返回步骤207,否则记录当前非接触卡槽的状态为有卡,退出 定时中断,返回步骤207;

优选的,如本实施例中在枚举过程中声明了非接触卡槽的配置信息中 包括中断端点,则步骤B2中判断为否时还包括:通过当前非接触卡槽 的中断端点向主机返回有卡响应;

本实施例,如当前非接触卡槽是第一次有卡插入,未记录当前非接触 卡槽的状态,则步骤B2中直接给主机返回有卡响应并记录当前非接触 卡槽的状态为有卡;具体的,在本实施例中,当前非接触卡槽为A卡槽 ,则通过第三端点向主机返回有卡响应;

步骤B3:判断记录的当前非接触卡槽的状态是否为无卡,是则退出定 时中 断,返回步骤207,否则记录当前非接触卡槽的状态为无卡,退出定时 中断,返回步骤207;

优选的,如本实施例中在枚举过程中声明了非接触卡槽的配置信息中 包括中断端点,则步骤B3中判断为否时还包括:通过当前非接触卡槽 的中断端点向主机返回无卡响应;

具体的,在本实施例中,当前非接触卡槽为A卡槽,则通过第三端点向 主机返回无卡响应;

优选的,在本实施例中,设置非接触卡槽寄存器,如寄存器的值为0表 示非接触卡槽状态为有卡已激活,如为1则表示非接触卡槽状态为有卡 未激活;如为2则表示非接触卡槽状态为无卡;

步骤C1:判断当前接触卡槽的卡到位引脚电平发生变化的类型,如从 低电平变为高电平则记录接触卡槽状态为有卡未上电,退出外部中断 ,返回步骤207;如从高电平变为低电平则记录接触卡槽状态为无卡, 退出外部中断,返回步骤207;

优选的,如本实施例中在枚举过程中声明了接触卡槽的配置信息中包 括中断端点,则步骤C1中判断结果为从低电平变为高电平时还包括: 通过当前接触卡槽的中断端点向主机返回有卡响应;步骤C1中判断结 果为从高电平变为低电平还包括:通过当前接触卡槽的中断端点向主 机返回无卡响应;具体的,在本实施例中,如当前接触卡槽为B卡槽, 则通过第六端点向主机返回有卡/无卡响应;如当前接触卡槽为C卡槽 ,则通过第九端点向主机返回有卡/无卡响应;

优选的,在本实施例中,设置接触卡槽寄存器,如寄存器的值为0表示 接触卡槽状态为有卡已上电,如为1则表示接触卡槽状态为有卡未上电 ,如为2则表示接触卡槽状态为无卡;

具体的,在本实施例中的有卡响应为0x50 0x03;无卡响应为0x50  0x02。

实施例三

本发明实施例三提供了读卡器对当前卡槽的第一缓存区中的数据进行 解析,并根据解析结果进行相应处理,将处理结果存储到当前卡槽的 第二缓存区的详细实现过程,如图6所示,包括:

步骤301:判断第一缓存区中的指令是否合法,是则执行步骤303,否 则执行步骤302;

本实施例中步骤301的具体实现过程为:对第一缓存区中的数据进行解 析得到指令类型、数据长度值,判断解析得到的数据长度值与第一缓 存区中的整体数据的长度是否相同,是则第一缓存区中的指令合法, 否则第一缓存区中的指令不合法;如指令类型为数据交换APDU指令则 解析结果还包括APDU数据;

具体的,在本实施例中,解析结果中包括数据指令类型的数据、数据 长度值、卡槽标识等;

步骤302:设置命令错误信息并将其存储到第二缓存区,继续;

步骤303:检测第一缓存区中指令的类型,如是上电指令,则执行步骤 304,如是下电指令,则执行步骤308;如是设置参数指令,则执行步 骤310;如是获取参数指令,则执行步骤314;如是复位参数指令,则 执行步骤315;如是扩展通道指令,则执行步骤316;如是数据交换AP DU指令,则执行步骤317;如是其他指令,则设置不支持信息,并将其 存储到第二缓存区;

步骤304:对当前卡槽中的卡片进行上电操作;

本实施例中,读卡器将与解析结果中的卡槽标识对应的卡槽作为当前 卡槽;

步骤305:判断是否接收到卡片返回的ATR(复位应答文件),是则执 行步骤306,否则执行步骤307;

本实施例中的ATR中包含卡片复位参数,如等待时间、通讯速率、T0/ T1 协议等;

步骤306:设置上电成功信息,并将其存储到第二缓存区,继续;

步骤307:设置上电失败信息,并将其存储到第二缓存区,继续;

步骤308:对当前卡槽中的卡片执行下电操作;

步骤309:设置下电成功信息,并将其存储到第二缓存区,继续;

步骤310:根据第一缓存区中的指令参数与当前卡槽中的卡片协商通讯 参数;

本实施例中的通讯参数包括波特率、T0/T1传输方式等;

步骤311:判断协商通讯参数是否成功,是则执行步骤312,否则执行 步骤313;

本实施例中步骤311具体包括:判断卡片返回的数据和发送给卡片的数 据是否相同,是则协商通讯参数成功,否则协商通讯参数不成功;

步骤312:保存通讯参数,并将其存储到第二缓存区,根据保存的通讯 参数对CPU接口进行相应设置,继续;

步骤313:将默认通讯参数存储到第二缓存区,继续;

步骤314:根据获取参数指令获取相应的参数,并将其存储到第二缓存 区,继续;

步骤315:根据复位参数指令进行复位操作,将默认参数存储到第二缓 存区,继续;

步骤316:根据扩展通道指令进行相应操作,并将操作结果存储到第二 缓存区,继续;

本实施例中的相应操作包括:固件升级等;

步骤317:根据ATR判断数据传输的协议类型,如是T1,则执行步骤31 8,如是T0,则执行步骤320;

具体的,本实施例中,根据设置参数指令判断数据传输的协议类型;

步骤318:将第一缓存区中的全部数据包发送给当前卡槽中的卡片,并 等待卡片返回响应;

步骤319:接收卡片返回的响应,并将其存储到第二缓存区,继续;

步骤320:解析数据交换APDU指令中的APDU数据,获得发送数据长度和 接收数据长度;

步骤321:给卡片发送APDU数据中的前五个字节码,并接收卡片返回的 过程字节码;

本实施例中,将指令中CLA、输入S、P1、P2、Lc/Le上数据发送给卡片 ;

本实施例中卡片返回的字节码(SW1或SW2)的类型包括:6X或9X、输 入S反、输入S;

步骤322:判断字节码是否为第一预设字符串,是则执行步骤323,否 则执行步骤326;

具体的,本实施例中的第一预设字符串为0x60至0x6F或0x90至0x9F的 任意一个;

步骤323:判断第一预设字符串是否为0x60,是则执行步骤324,否则 执行步骤325;

步骤324:设置忙响应并将其存储到第二缓存区,重新设置等待时间, 继续;

步骤325:接收剩余一个字节状态字,设置数据返回响应并将其存储到 第二缓存区,继续;

步骤326:判断第一预设字符串是否为INS反,是则执行步骤327,否则 执行步骤330;

步骤327:判断是否有数据未发送给卡片,是则执行步骤328,否则执 行步骤329;

步骤328:继续发送一个字节的数据给卡片,并接收卡片返回的一个字 节的过程字节码,返回步骤322;

本实施例中,当读卡器中还有未发送的数据时,读卡器继续给卡片下 发一个字节数据并接收卡片返回的过程字节码,再进行判断字节码的 类型;

步骤329:接收卡片返回的一个字节的数据和一个字节的过程字节码, 返回步骤322;

本实施例中,当读卡器将全部数据发送给卡片时,接收卡片返回的过 程字节码并判断字节码的类型;

步骤330:判断数据是否发送完成,是则执行步骤331,否则执行步骤 332;

步骤331:接收卡片返回的接收数据长度的数据和一个字节的状态字节 码,返回步骤322;

步骤332:按照发送数据长度给卡片发送剩余字节,接收卡片返回的接 收数据长度的数据和一个字节的状态字节码,返回步骤322。

本实施例中,如在接收到USB配置指令时返回的每个卡槽的配置信息中 包括中断端点,如在步骤303检测第一缓存区中指令的类型如为查询指 令则执行步骤333;

步骤333:将记录的卡槽状态存储到第二缓存区中;

具体的,卡槽状态包括无卡、有卡未上电、有卡已上电;

在本实施例中,设置接触卡槽寄存器,如寄存器的值为0表示接触卡槽 的卡槽状态为有卡已上电,如为1则表示接触卡槽的卡槽状态为有卡未 上电,如为2则表示接触卡槽的卡槽状态为无卡;设置非接触卡槽寄存 器,如寄存器的值为0表示非接触卡槽的卡槽状态为有卡已激活,如为 1则表示非接触卡槽的卡槽状态为有卡未激活;如为2则表示非接触卡 槽的卡槽状态为无卡。

具体的,本实施例中的继续为执行步骤114或步骤A4。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并 不局限于此,任何熟悉本技术领域的技术人员在本发明公开的技术范 围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内 。因此,本发明的保护范围应该以权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号