自从上世纪七十年代,智能卡在法国诞生后,由于其技术先进性以及人们对其的理解认同,使得各国政府对他非常重视和支持,广大的厂商争相加入对他的追捧和投入。目前它以惊人的速度发展,已经广泛应用于金融、公交、社保、通讯、医疗卫生等诸多领域,并始终保持着不断扩大的趋势。到如今,智能卡已经与我们的衣、食、住、行息息相关,在我们生活中所占的比重也越来越大。这一切,使得智能卡行业形成了一个巨大的市场。

WBT作为一个新兴的事务,到目前已经蓬勃发展起来,随着技术的进步以及人们对这种应用模式的认可,对其他的外设的支持也已经提出了很多的要求,作为国内NC第一大厂――福建升腾资讯有限公司(前身是实达终端设备有限公司)在这方面做了很多的研究和支持,目前升腾资讯有限公司公司的WBT已经可以支持SmartCard的本地应用和登陆到服务器上使用WBT本地的SmartCard。

在我国SmartCard也是蓬勃发展,很多厂商推出了自己拥有自主知识产权的SmartCard。在其之中,上海华虹推出了拥有自主知识产权的USB-KEY,我们就以usb-key为例,做一个简单的介绍。

下面简单介绍一下华虹usb-key的简单介绍:

SHC1401(USB-KEY)

SHC1401芯片的触点尺寸和位置、物理特性、电信号及传输协议符合ISO/IEC7816系列国际标准。 卡上集成了8位微处理器、32K字节的程序存储器(MASK ROM)、256字节内部SRAM、1K+792字节外部SRAM、32K字节的数据存储器 (EEPROM)、64位随机数电路、1024位的RSA协处理器、符合USB1.1的 USB 接口以及其它辅助电路。SHC1401芯片采用0.35um HHNEC CMOS 工艺并提供安全机制的检查功能。

处理器

—采用Turbo51内核

—指令执行速度是标准mcs8051的4到6倍

存储器

—256 字节内部SRAM, 1K +792字节外部SRAM

—32K 字节程序存储器 (32K x 8 bit ROM)

—32K 字节数据存储器 (32K x 8 bit EEPROM)

随机数发生器 (RNG)

—64位随机数发生器

—可作为移位协处理器

外围接口

—2个16位可编程定时器/计数器

—I/O 接口中断

RSA协处理器

—提供1024位的RSA加密协处理器

—加一次密需400-500ms

—采用杨氏算法

USB 接口

—符合USB1.1的规格

—1.5Mbps 传输速率

—支持控制传输,传输中断

—内嵌USB收发器

工作频率

—USB模式为6MHZ

详细的资料介绍请见华虹的网站http://www.shhic.com/new/pro_view.asp?id=25

要想要一个设备能够在WBT上使用,就需要编写设备的驱动程序,WinCE.NET是微软推出的一个比较成熟的嵌入式操作系统。我们仅以此操作系统为例,当然Linux,vxworks都是不错的选择,但是设备工作的原理弄清楚了,移植到不同的操作系统上都是比较容易的。

工欲善其事 必先利其器,同样我们在开始做一个设备驱动程序时,必须做好以下工具的准备,首先我们要现在PC机上安装usb-key的设备驱动程序,大家要记住,每次在做USB驱动程序的时候,要特别注意,首先要取得USB设备的接口信息和管道类型信息。

Win2k/XP DDK上有个很好的工具,叫做usbview.exe,当然也有源代码的,在DDK安装目录里面查找下,有兴趣也可以自己扩展做出点东西来。

运行usbview.exe后,选中usbkey设备。可以看到以下的信息:

Device Descriptor:

bcdUSB: 0x0110

bDeviceClass: 0x00

bDeviceSubClass: 0x00

bDeviceProtocol: 0x00

bMaxPacketSize0: 0x08 (8)

idVendor: 0x4242

idProduct: 0x4201

bcdDevice: 0x0100

iManufacturer: 0x01

iProduct: 0x02

iSerialNumber: 0x00

bNumConfigurations: 0x01

ConnectionStatus: DeviceConnected

Current Config Value: 0x01

Device Bus Speed: Low

Device Address: 0x01

Open Pipes: 2

Endpoint Descriptor:

bEndpointAddress: 0x81

Transfer Type: Interrupt

wMaxPacketSize: 0x0008 (8)

bInterval: 0x0A

Endpoint Descriptor:

bEndpointAddress: 0x02

Transfer Type: Interrupt

wMaxPacketSize: 0x0008 (8)

bInterval: 0x0A

大家可以看出,此设备使用的时USB 1.1的协议,厂商ID为0x4242,产品ID为0x4201,另外有三个Pipe,Pipe0是每个USB设备都有的,Pipe81是中断传输管道,最大数据报大小为8字节, Pipe02也是中断传输管道,最大数据报也是8个字节。有了这些信息我们驱动的架子就基本上搞定了,找个类似的USB驱动程序,将我们特定的设备信息填写进去,就OK,呵呵,现在我们的设备可以加载/卸载成功了。

此外需要指出的是,此USB设备虽然也是流式接口,但是其实,他的实质的东西并不是以流式接口直接提供给应用程序。设备驱动程序需要直接和SmartCard管理器打交道的,有些类似U盘驱动程序,需要和FileSystem Manager打交道。所以需要在设备初始化的时候,需要将SMARTCARD_EXTENSION结构需要的信息填写进去。在此之中,比较重要的是几个回调函数,剩下的按照设备的信息填写进去就可以了:

smartcardExtension->ReaderFunction[RDF_CARD_POWER] = CBCardPower;

smartcardExtension->ReaderFunction[RDF_TRANSMIT] = CBTransmit;

smartcardExtension->ReaderFunction[RDF_CARD_TRACKING] = CBCardTracking;

smartcardExtension->ReaderFunction[RDF_SET_PROTOCOL] = CBSetProtocol;

smartcardExtension->ReaderFunction[RDF_IOCTL_VENDOR] = VendorIoctl;

RDF_CARD_POWER函数是上电、下电、复位函数,每次设备初始化的时候都会调用;RDF_TRANSMIT要求的是数据传输的函数;RDF_CARD_TRACKING是跟踪函数;RDF_SET_PROTOCOL是设置传输协议,无非T0(字符传输),T1(块传输),或者RAW格式,华虹的仅仅支持T0传输方式;RDF_IOCTL_VENDOR就是厂商特殊命令接口。

其中对于华虹的usb-key来讲,最主要的,是CBCardPower和CBTransmit函数,其他的比较简单些。

CBCardPower中需要注意的是一定要把ATR的Buffer的内容和长度告诉SmartCard管理器。ATR(Answer to Reset)是指复位应答,是指复位后卡返回的信息,SmartCard管理器使用此返回信息作为读取其他信息的基础。

CBTransmit实现数据交换,基本是所有的数据读取都是通过此函数实现的,这个函数是个核心函数。它其实不真正关心具体的命令格式,它仅仅负责和具体的物理设备打交道,实现数据交换。

另外需要注意的是华虹usb-key其实是读写器和卡融合在一起的设备,所以不需要探测卡是否存在的线程,只要将卡的状态一直设置为SCARD_PRESENT就可以了。

这几个函数搞定了,基本上USB-KEY就可以使用了。真正弄明白了系统的原理后,感觉编写一个SmartCard的驱动程序真是简单,我花了一晚上,做完了,第二天调试通过后,感觉索然无味,太easy了。等我再回头看看WINXP DDK中的驱动程序例程,一个道理的,只是多了些IRP的请求处理和一些自旋锁的处理。

另外在做驱动的时候要注意不要尽信手册,要勤于思考,多动手,我看了华虹给我的手册,很多东西都是没有的,类似的也有啊,去看看威盛的南桥的手册,说得非常简单,很多芯片的配置信息都要靠自己摸索,才能搞定的。

其次一定要要善于使用工具,以下几个工具是必备的:

1.USB监控程序—BusHound, 可以抓出所有的USB数据进出的报,这样所有的细节都不会逃过你的眼睛。也可以加强你的判断分析能力,类似工具其实很多,usbsniffer以及Compuware公司的wdmsniff都是一些不错的选择。

2.IdaPro - 大名鼎鼎的反汇编工具,这个是必备的,如果有了一个PC上的驱动,你对汇编程序很熟悉,反汇编看看,无异于阅读源代码了,肯定受益匪浅了。

3.WinDriver也是个不错的选择,可以直接读写Pipe,用来验证我们的命令是否正确,当然BusHound 5.0版本也提供了类似的功能。

当我开始做GemPlus Usb SmartCard Reader的驱动的时候,心中感觉还是国外的设备做的比较完善,考虑的东西也比较全面,也更加稳定些。联想到很久前我为国内一款PDA做了一个数据交换的驱动程序时,感觉国内还是和国外的有很大的差距,特别在稳定性方面尤为欠缺。看看柯达的数码相机,我在做PTP传输协议的驱动程序时,感觉真是非常稳定,调试起来非常顺手,在调试PDA感觉就麻烦多了,稍微数据通讯出错,就要关掉机器,重新启动,非常麻烦。

一直讲我们科技落后,其实很多时候都是一些细节上的差距,还是希望能够将我们知道的东西公布出来,带动一大批有志之士,将我们的产品都做的更精更细,更加稳定,更加完善些,带动我们整体一代或者几代人的科技水平。

华虹USB-KEY for WinCE.NET驱动程序的编写相关推荐

  1. 华虹U盾(红白那种)win7旗舰版64位驱动解决方案

    方法一: 首先从工行官网下载相应的驱动,然后右击驱动选择兼容性,在"以兼容模式运行这个程序"前打钩,然后选择window svista (service pack2),在" ...

  2. x41t下使用工行华虹u盾

    机器:ibm x41t,系统:深度5.1 xp sp2. 使用工行华虹个人版u盾,但是在用"华虹客户端管理工具"看时,打开很慢,要等很久,除了一个正确的SN外,还右几个" ...

  3. 工行华虹U盾在Vista和IE7下的解决方案

     郁闷了我一天的东东从中午拿回U盾后就开始装这个东东,baidu,google都被我用光了还是没有搞好!去工商银行的论坛上发每人理我,其实我还发现了工商银行的那几个版主没多少水,回答千篇一律,如果碰到 ...

  4. 在WIN7正常使用老版本工商银行华虹U盾驱动解决办法

    华虹U盾是旧版的(410): 公司和家里的电脑安装的都是Windows 7 64位的版本,华虹U盾是旧版的(410),安装驱动后系统没有认到U盾,求助工行和GOOGLE无果后,自己折腾了下,找到了解决 ...

  5. 前往华虹下载POS机应用,回来又上传安装卡应用

    今天都做了什么. 上午我来到公司,接上U转串线运行InitTool工具,不料打开串口失败,之后就给罗总打电话过去.罗总说重新安装了下U转串驱动程序,果然就安装成功了.接下来我在COM4端口上连接POS ...

  6. 解决USB key在citrix虚拟桌面里使用的问题

    1.首先保证VDA和本地客户端PC都装有U盾的驱动, 2.先用USBDeview工具把U盾的VID,PID,class 和subclass记下来,如:,SubClass=00  ,VID=096e,P ...

  7. 在Linux 2.6环境下读写HID设备(USB Key)

    Linux 2.6内核中包含了HID驱动,能够自动把USB Key等HID外设识别成"/dev/hiddev0"之类的设备.但是该驱动没有实现write接口,因此无法象Window ...

  8. Supplier 点participate时候用USB KEY的身份验证

    Sent: Friday, January 29, 2010 6:35 PM Subject: RE: Slides about SRM integration with CFCA 终于把2,3做好了 ...

  9. WinUSB - 微软为所有 USB 设备提供的常规驱动程序

    WinUSB - 微软为所有 USB 设备提供的常规驱动程序  [复制链接]     shangdawei 20 主题 0 好友 717 积分 高级会员 莫元 696 发消息 电梯直达 1楼  发表于 ...

最新文章

  1. Windows Tips--How do I disable the Windows Firewall service?
  2. matlab 填充数组,Matlab自动将数组类型从复数转换为double
  3. 白鹭 修改底层 egret.js 库后再次编译 成 新的库
  4. vue基础知识(一)
  5. 计算机系统 程序和指令
  6. 图片管理程序(Java)
  7. java super用法_Java基础面试题汇总
  8. 电信移动联通广电喜提5G牌照,5G手机明年爆发
  9. 2018年python工作好找吗-2018年 Python面试必看的10个问题及答案
  10. 【NOIP2015】运输计划
  11. gerrit push失败问题解决
  12. (没用,只是学习贴,可能永不会更新)Js 写《智慧树》自动评论脚本
  13. 中华人民共和国国家标准和行业标准代号
  14. 【paper-note7】Several Papers About Video Classification
  15. AOP应用(Transactions 事务)
  16. 移动端手指滑动的距离
  17. 微信公众账号怎么快速增加粉丝
  18. hive笔记(与上一偏 《hadoop集群搭建》结合)
  19. 街景窗户检测数据集(Street Scene Window Detection (SSWD))-VOC和Yolo版本
  20. 计算机网络(第八版)谢希仁编著 笔记

热门文章

  1. vue pdf文件下载 / 在线预览真是有效!
  2. 有没有宝妈去打过HPV疫苗的,是在哪打的
  3. E+H差压变送器FMD78-HBA7F21B51AQ
  4. el属性和template属性的关系
  5. enumerate意义与用法
  6. 手把手教你分析微信群聊记录,识别害群之马
  7. 磁盘被写保护的解决办法
  8. 【求职经验】如何让你的简历显得丰富,提高求职成功率
  9. python中0x3f_类似于0x3F是什么意思?怎么转换?
  10. 金三银四,程序员离职跳槽指南