好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

ccid协议学习资料.docx

8页
  • 卖家[上传人]:第***
  • 文档编号:32455502
  • 上传时间:2018-02-11
  • 文档格式:DOCX
  • 文档大小:50.35KB
  • / 8 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 名词解释 CCID: Integrated Circuit(s) Cards Interface Device ICC: Integrated Circuit(s) Cards这两天在调 CCID 的代码,厂家给的 Demo,卡片的功能还没有完全调通,但是 Demo 可以上电成功,并且在 USB 设备上电枚举之后,自动发送了一个中断,如下所示然后就特别的困惑,这个 50 03 的中断是哪里来的?虽然知道是读卡器告诉主机,有卡片动作,但是我明明没有插卡和拔卡的动作呀?想了好久,今天找资料,在网上看到如下:概述当一个 CCID 插入 USB host 时,它可以有或者没有一个插入的 ICCCCID 模型假设一个 ICC 被或者可以被插入到设备这就是"slot change"中断消息的目的这是我今天看到的最为感动的一句话,对呀,CCID 规范中,还有两个中断信息,怎么就没想到???)CCID 功能特性通信管道控制管道控制管道消息用来控制一个 USB 设备这些消息包括标准请求,例如GET_DESCRIPTOR 和 SET_CONFIGURATION命令经由默认管道发送,报告信息也经由默认管道返回给主机。

      如果产生了一个错误,它会产生一个标准的 USB 错误状态中断管道CCID 模型在中断管道处理异步事件ICC ,ICC 移除或者硬件错误比如电流太大,这些经由这个管道送出中断管道对于一个支持 ICC 插入/移除的 CCID 是强制的对于一个只插入没有移除的 ICC是可选的块进,块出管道CCID 命令经由 BULK-OUT 端点发出每个发送给 CCID 的命令都有一个相应的响应一些命令也有过程响应这些响应从 BULK-IN 端点发送所有发送给指定 CCID 槽位的命令都必须同步发送一个指定的槽位同时只能接受一条命令如果一个槽位准备好接受一个新命令那么就认为它是空闲的协议和参数选择CCID 在与主机的底层交互的 dwFeatures 字段声明 TPDU、APDU(短或扩展)或者字符TPDU 层交互对于 PPS 交互的 TPDU 格式如下:TPDU 命令:FF PPS0 PPS1 PPS2 PPS3 PCK, with PPS1, PPS2, PPS3 optional [ISO/IEC7816-3 §7]TPDU 应答:FF PPS0_R PPS1_R PPS2_R PPS3_R PCK_R, with PPS1_R, PPS2_R, PPS3_R optional [ISO/IEC7816-3 §7.4)APDU 层交互APDU 命令和应答定义在 ISO 7816-4。

      定义了两种 APDU 层,短 APDU 和扩展 APDU,这些定义在 ISO/IEC 7816-4 § 5.3.2字符层交互当 TPDU、短 APDU 或者扩展 APDU 都没选择时,字符层交互被选中对于主机和 CCID 之间的字符层交互,CCID 支持与 ICC 的异步字符交互挂起行为当从一个挂起的 USB 恢复时,主机/驱动假设所有的 ICC 都是不活动的(掉电)当 USB 总线挂起时,CCIDs 不要求掉电插入的 ICCs,但是可以这样做然而,当 USB总线恢复后,CCIDs 必须响应给主机好像所有的已经插入的 ICCs 都掉电并被新插入在恢复后,CCID 会做下面两件事(没有特定是顺序): 发送 RDR_to_PC_NotifySlotChange 消息告知驱动那个槽位有新插入的卡 CCID 会重新恢复 ICCs 为有效如果这个 CCID 有“ 自动启动当插入”特性或者收到来自启动的 PC_to_RDR_IccPowerOn 消息注意:当重新恢复时,所有的槽位参数立即恢复为默认标准 USB 表述设备详见 Universal Serial Bus Specification 中第九章“USB Device Framework”。

      配置详见 Universal Serial Bus Specification 中第九章“USB Device Framework”界面偏移 字段 大小 值 描述0 bLength 1 09h 这个描述的字节大小1 bDescriptorType 1 04h INTERFACE 描述类型2 bInterfaceNumber 1 Number 这个界面的数量3 bAlternateSetting 1 Number 4 bNumEndpoints 1 02h 03h这个界面使用的端点数量(除了端点 0) 对于 CCID 02h 使用 bulk-IN 和 bulk-OUT 03h 使用 bulk-IN、bulk-OUT 和 interrupt-IN5 bInterfaceClass 1 0Bh 智能卡设备类6 bInterfaceSubClass 1 00h 子类码7 bInterfaceProtocol 1 00h 协议码 对于 CCID 00h8 iInterface 1 Index 这个界面的索引智能卡设备类描述智能卡设备类描述表定义了一些设备属性或者功能偏移 字段 大小 值 描述0 bLength 1 36h 这个描述的字节大小1 bDescriptorType 1 21h 功能描述类型2 bcdCCID 2 0110h CCID 以二进制编码的十进制指定版本号码例:2.10 是 0210h4 bMaxSlotIndex 1 设备上最高可用槽位的序号。

      所有槽位起始于 00h 例:0Fh 为设备上有从 00h 到 0Fh共 16 个槽位5 bVoltageSupport 1 表示 CCID 可以支持的槽位电压 这是一个按位或运算 01h – 5.0V 02h – 3.0V 04h – 1.8V6 dwProtocols 4 RRRR PPPPRRRR – 高字 – 预留 = 0000h PPPP – 低字 – 支持的协议类型 0001h = T0 0002h = T110 dwDefaultClock 4 默认 ICC 时钟频率,单位 KHz 例:3.58MHz 为3580(00000DFCh )14 dwMaximumClock 4 ICC 支持的最大时钟频率,单位KHz18 bNumClockSupported 1 CCID 支持的时钟频率个数如果值为 00h,时钟频率和 dwDefaultClock定义的一样和 dwMaximumClock 定义的最大频率19 dwDataRate 4 默认 ICC I/O 波特率 例:9600 编码为9600(00002580h)23 dwMaxDataRate 4 ICC I/O 支持的最大波特率。

      例:115.2Kbps 编码为115200(0001C200h)27 bNumDataRatesSupported 1 CCID 支持的波特率个数28 dwMaxIFSD 4 CCID T1 的最大 IFSD32 dwSynchProtocols 4 RRRR PPPP = 00000000hRRRR- 高字 – 默认为 0000h PPPP – 低字 – 支持的协议类型 0001h – 支持两线协议 0002h – 支持三线协议 0004h – 支持 I2C 协议 注: CCID 不支持这些协议所以PPPP = 0000h36 dwMechanical 4 00000000h 00000008h这个值是下面值的按位与: 00000000h – 没有直到那个的特性 00000001h – 卡接受机制 00000002h – 卡移除机制 00000004h – 卡捕获机制 00000008h – 卡加锁/解锁机制40 dwFeatures 4 xxxxxxxxh 这个值指明 CCID 有什么智能的特性这个值为以下值的按位与: 00000000h – 没有指定的特性 00000002h – 根据 ATR 数据自动配置参数 00000004h – 插入时自动使能 ICC 00000008h – 自动选择 ICC电压 00000010h – 自动根据主机提供的或自测试的有效参数改变 ICC 始终频率 00000020h – 自动根据主机提供的或自测试的有效参数改变波特率 00000040h – 00000080h – 00000100h – 00000200h – 00000400h – 00000800h – 00001000h – 00002000h – 00004000h – 00008000h –44 dwMaxCCIDMessageLength 4 48 bClassGetResponse 1 49 bClassEnvelope 1 50 wLcdLayout 2 XXYYh 52 bPINSupport 1 00h-03h 指明 CCID 支持 PIN 什么特性。

      这个值是下面值的按位与: 01h 支持验证 PIN 02h 支持修改 PIN53 bMaxCCIDBusySlots 1 01h-FFh 最多可以同时忙的槽位的个数CCID 端点除了一个默认(控制)端点 CCID 至少支持 2 个端点,一个是 bulk-out,一个是 bulk-in报告 ICC 插入或移除的 CCID 也必须支持一个 interrupt 端点端点 方向 选项 定义Bulk OUT OUT 必须 CCID 命令管道Bulk IN IN 必须 CCID 应答管道Interrupt IN 可选 CCID 事件通知管道Bulk-OUT 端点Bulk Out 端点用来发送命令和传送从主机到设备的数据偏移 字段 大小 值 描述0 bLength 1 07h 这个描述的字节大小1 bDestriptorType 1 05h 端点描述类型2 bEndpointAddress 1 01-0Fh 这个 USB 设备的端点地址 这个地址为 1 到 15 Bit 0..3 端点号 Bit 4..6 预留,必须为 0 Bit 7 0 = Out3 bmAttributes 1 02h 这是一个 Bulk 端点4 wMaxPacketSize 2 0xyzh 最大传输数据大小可以为 8,16,32,64 或者 512字节6 bInterval 1 Number 对全速: 忽略 对高速: 这个值为 0 到 255Bulk-IN 端点Bulk In 端点用来发送响应和发送从设备到主机应答接受命令管道的回复数据。

      偏移 字段 大小 值 描述0 bLength 1 07h 这个描述的字节大小1 bDestriptorType 1 05h 端点描述类型2 bEndpointAddress 1 81-8Fh 这个 USB 设备的端点地址 这个地址为 1 到 15 Bit 0..3 端点号 Bit 4..6 预留,必须为 0 Bit 7 1 = In3 bmAttributes 1 02h 这是一个 Bulk 端点4 wMaxPacketSize 2 0xyzh 最大传输数据大小可以为 8,16,32,64 或者 512字节6 bInterval 1 Number 对全速: 忽略 对高速: 这个值为 0 到 255Interrupt-IN 端点中断端点对于一个支持 ICC 插入/移除的 CCID 是必须的对于一个经常插入 ICC 而不移除的 CCID 是可选的如果有一个 Interrupt-In 端点,那么需要RDR_to_PC_NotifySlotChange 消息并且偏移 字段 大小 值 描述0 bLength 1 07h 这个描述的字节大小1 bDestriptorType 1 05h 端点描述类型2 bEndpointAddress 1 81-8Fh 这个 USB 设备的端点地址。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.