USB CCID "复杂"命令拾零?

本文记录 USB CCID 标准中几个"复杂"的命令,复杂在于在这些命令身上花的时间较之简单的命令多许多或者是理解的时间比较晚,可能就是刚才。
主要有以下几条:
ccid_T0APDU();
ccid_Secure();
ccid_Escape();
ccid_Abort();
ccid_Mechanical();
ccid_SetDataRateAndClockFrequency();

ccid_T0APDU(): 我们知道,当读卡器是APDU level时,并且卡片使用T=0协议进行通信,那么构造TPDU的任务就落在了读卡器身上。根据ISO7816规定,该角色需要将APDU构造成一组命令,其中包括GET_RESPONSE()和ENVELOPE()命令,同时,由于每张卡片的CLA字段可以不同,这时,读卡器就需要一个规则来确定发送这2条命令时,选择的CLA是什么了。主机可以用ccid_T0APDU()来设置该值,以后读卡器就知道该怎么做了。

ccid_Secure(): 该命令用于 PIN_VERIFY 和 PIN_MODIFY 时,也就是校验PIN和修改PIN,该命令复杂在于命令后面的参数,需要根据卡片特性来填充并且构造合适的APDU命令,比较麻烦。

ccid_Escape(): 该命令用于传输厂家定义的特殊命令,可以理解为扩展命令,比如有的卡片PIN_VERIFY和PIN_MODIFY就是通过这个命令来做的,是因为M$ ccid驱动不支持 ccid_Secure()命令吧,我不确定?!

ccid_Abort(): 该命令是最难理解的一个,首先要明确 abort 什么东西?根据CCID,能够被 abort 的命令有以下几个:
      PowerOn()、XfrBlock()、Escape()、Secure()、Mechanical() 和 Abort()本身。 从这些命令似乎很难看出 abort 到底有什么用处(个人原来一直认为没用,现在有所转变了),不过,根据标准和实际场景分析得出,这条诡异的命令主要有以下2个功能:
      1)帮助 CCID 读卡器同步状态:
             如何同步呢?这个太细节了,其实就是因为读卡器因为某些原因已经堵死了或者将要堵死,主机发送一对 abort 命令来救活读卡器;
      2)帮助 HOST 端同步状态:
            根据个人的理解,在主机端,靠状态机驱动时,增加这个 abort 状态和处理,能够达到同步状态,把状态机跑顺的作用。
      我们可以假设一些使用该命令的场景:
      1)读卡器执行一条需要等待对方应答或用户输入才能结束的命令,但应答或输入迟迟不到,这就堵死了?是的,标准没为它加超时机制(不绝对),所以它就只能死等,后续再来的命令当然也就无能为力了,不过我们可以用 abort 拯救它 -- 读卡器。
      2)主机某个应用程序启动,准备操作读卡器读卡片,可能此时卡片状态或读卡器状态比较混沌,也许是上一个使用读卡器的应用没有安全退出,烂摊子留下来了,但我们不能被这种小事给弄死吧,我们可以发送2对 abort 命令来把之前的命令取消掉(如果有的话),至于为什么是2对,分析分析就知道了。不过后来发现,PowerOff 命令好像也可以做到,晕!
      3)还是主机应用,可能需要读取很多数据,读到几片数据时,发现不爽了,不想读了(可能是超时了),自己来个 abort, 标记下,以后到的数据我都不当成是正常的数据,为什么还有数据到呢? 不是给 abort 了吗? 因为我还不知道如何 abort 卡片正在进行的操作,如果卡片有数据传回来,我们没有办法打断,只能都收回来,结果就要看接收者如何利用这些数据,如果被 abort 了的话,可认为是无效数据而简单丢弃。

To be continued ...

时间: 2024-08-29 23:43:22

USB CCID "复杂"命令拾零?的相关文章

uboot下的命令使用示例

1.usb 可以使用此命令读取u盘里的内容,此命令加上相关参数可以有以下功能: 1.1usb start 在使用u盘之前必须启动此命令以初始化好fat文件系统环境,笔者的输出如下: jello # usb start(Re)start USB...USB:   Starting the controllerscanning bus for devices... 5 USB Device(s) found       scanning bus for storage devices... usb_

把USB打印机映射到LPT端口

把USB打印机映射到LPT端口(pos小票机测试成功)2010-12-23 18:11:00| 分类: 編程 | 标签: |字号大中小 订阅 注释:在DOS命令行下运行以下命令(以下为示例,根据实际情况要有所改动):NET USE LPT2 \\192.168.0.2\EPSONLQ635 /PERSISTENT:YES;以上这行的含义为将打印端口LPT2映射为共享主机192.168.0.2的共享打印机EPSONLQ635;这时本机应用程序把打印结果发送到LPT2就会在共享主机192.168.0

[驱动]内核添加USB转串口驱动支持

转自:http://blog.csdn.net/gatieme/article/details/49491325 目录 1. 问题 2. 驱动源码 3. 内核配置 4. 编译内核和模块驱动 5. 加载驱动 问题 这两天为了做gps和arm的通讯,不得不捣鼓这个东东.开发板是创维特jx2410,usb转串口线的芯片是pl2303.还好是这个芯片,让我没费多少力气,就达成了目的.因为linux对它已经支持了,我们只要编译.加载它的驱动就ok了. 驱动源码 一般来说USB转串口的驱动已经集成在内核中,

USB

http://blog.csdn.net/myarrow/article/details/8279156 USB协议架构及驱动架构 1.1 USB主机系统 在USB主机系统中,通过根集线器与外部USB从机设备相连的处理芯片,称为USB主机控制器.USB主机控制器包含硬件.软件和固件一部分. 1.2 USB设备系统 USB设备按功能分为两部分:集线器(Hub)和功能部件.从下图可知,主机通过根集线器连接到各种外围设备(集线器和功能部件). 1.3 主机和设备之间通信模型     主机与设备之间的通

MX5 在Linux系统下无法开启USB调试的解决办法

使用Android Studio在Linux Mint17.1系统下进行Android应用开发,开发样机使用魅族最新的MX5手机,在“设置”——>“开发人员工具”中打开“USB调试”. ------------------------------------------------------------- 命令操作 ------------------------------- [email protected] /etc/udev/rules.d $ lsusbBus 001 Device

USB描述符解析-->枚举.

枚举可以理解为主机按不定的顺序向USB设备讨要设备信息,好给它分配资源,若枚举不成功,就放弃分配资源,免得浪费资源.一般都是使用中断传输方式通信. 常用的描述符有以下几种:01H.设备描述符  02H.配置描述符  03H.字符串描述符  04H.接口描述符  05H.端点描述符 21H:HID描述符 22H:HID报告 一个设备只能有一个设备描述符,而一个设备描述符可以包含多个配置描述符(bNumConfigurations  ),一个配置描述符又可以包含多个接口描述符,一个接口使用了几个端点

linux常用命令2

关闭和重启命令 1)shutdown  -h  now没有特殊情况,使用此命令 -h关机 -r重启 shutdown  -r  now 命令名称:shutdown 命令所在路径:/sbin/shutdown 执行权限:root 2)reboot 命令名称:reboot 命令所在路径:/sbin/reboot 执行权限:root 八挂载命令 linux所有存储设备都必须挂载使用,包括硬盘 命令名称:mount 命令所在路径:/bin/mount 执行权限:所有用户 光盘挂载 /dev/sda1第一

详述USB OTG发展及协议标准

USB On-The-Go 扩大了USB 的应用领域,将USB 从传统的PC 与外设通讯的模式,扩展到移动电子和嵌入式领域中,抛开主机PC,实现通常的外设与外设之间点对点(Point to Point)的数据传输模式. 1 什么是USB On-The-Go 我们先来回顾一下通用串行总线(Universal Serial Bus,简称为USB)发展的历史: i)1994 年11 月,以Intel 为首的7 家公司(Intel.Compaq.Microsoft.IBM.DEC.Northern Te

USB入门基础知识(转)

源:USB入门基础知识 相关名词: 主机(Host) 设备(Device) 接口(Interface) 管道(Pipe) 管道是主机与设备端点数据传输的连接通道,代表了主机的数据缓冲区与设备端点之间交换数据的能力.管道包括数据流管道和消息管道. Such associations between the host software and a USB device endpoint are called pipes. 端点(Endpoint) 端点,实际上是设备硬件上具有一定大小的数据缓冲区.U