⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb-key for wince.net驱动程序.htm

📁 usb的协议的详细说明
💻 HTM
📖 第 1 页 / 共 3 页
字号:
                                <P class=newtext>—符合USB1.1的规格</P>
                                <P class=newtext>—1.5Mbps 传输速率</P>
                                <P class=newtext>—支持控制传输,传输中断</P>
                                <P class=newtext>—内嵌USB收发器</P>
                                <P class=newtext>工作频率</P>
                                <P class=newtext>—USB模式为6MHZ</P>
                                <P 
                                class=newtext>详细的资料介绍请见华虹的网站http://www.shhic.com/new/pro_view.asp?id=25</P>
                                <P class=newtext></P>
                                <P 
                                class=newtext>要想要一个设备能够在WBT上使用,就需要编写设备的驱动程序,WinCE.NET是微软推出的一个比较成熟的嵌入式操作系统。我们仅以此操作系统为例,当然Linux,vxworks都是不错的选择,但是设备工作的原理弄清楚了,移植到不同的操作系统上都是比较容易的。</P>
                                <P class=newtext></P>
                                <P class=newtext>工欲善其事 
                                必先利其器,同样我们在开始做一个设备驱动程序时,必须做好以下工具的准备,首先我们要现在PC机上安装usb-key的设备驱动程序,大家要记住,每次在做USB驱动程序的时候,要特别注意,首先要取得USB设备的接口信息和管道类型信息。</P>
                                <P class=newtext></P>
                                <P class=newtext>Win2k/XP 
                                DDK上有个很好的工具,叫做usbview.exe,当然也有源代码的,在DDK安装目录里面查找下,有兴趣也可以自己扩展做出点东西来。</P>
                                <P class=newtext></P>
                                <P 
                                class=newtext>运行usbview.exe后,选中usbkey设备。可以看到以下的信息:</P>
                                <P class=newtext>Device Descriptor:</P>
                                <P class=newtext>bcdUSB: 0x0110</P>
                                <P class=newtext>bDeviceClass: 0x00</P>
                                <P class=newtext>bDeviceSubClass: 0x00</P>
                                <P class=newtext>bDeviceProtocol: 0x00</P>
                                <P class=newtext>bMaxPacketSize0: 0x08 (8)</P>
                                <P class=newtext>idVendor: 0x4242</P>
                                <P class=newtext>idProduct: 0x4201</P>
                                <P class=newtext>bcdDevice: 0x0100</P>
                                <P class=newtext>iManufacturer: 0x01</P>
                                <P class=newtext>iProduct: 0x02</P>
                                <P class=newtext>iSerialNumber: 0x00</P>
                                <P class=newtext>bNumConfigurations: 0x01</P>
                                <P class=newtext></P>
                                <P class=newtext>ConnectionStatus: 
                                DeviceConnected</P>
                                <P class=newtext>Current Config Value: 0x01</P>
                                <P class=newtext>Device Bus Speed: Low</P>
                                <P class=newtext>Device Address: 0x01</P>
                                <P class=newtext>Open Pipes: 2</P>
                                <P class=newtext></P>
                                <P class=newtext>Endpoint Descriptor:</P>
                                <P class=newtext>bEndpointAddress: 0x81</P>
                                <P class=newtext>Transfer Type: Interrupt</P>
                                <P class=newtext>wMaxPacketSize: 0x0008 (8)</P>
                                <P class=newtext>bInterval: 0x0A</P>
                                <P class=newtext></P>
                                <P class=newtext>Endpoint Descriptor:</P>
                                <P class=newtext>bEndpointAddress: 0x02</P>
                                <P class=newtext>Transfer Type: Interrupt</P>
                                <P class=newtext>wMaxPacketSize: 0x0008 (8)</P>
                                <P class=newtext>bInterval: 0x0A</P>
                                <P class=newtext></P>
                                <P class=newtext>大家可以看出,此设备使用的时USB 
                                1.1的协议,厂商ID为0x4242,产品ID为0x4201,另外有三个Pipe,Pipe0是每个USB设备都有的,Pipe81是中断传输管道,最大数据报大小为8字节, 
                                Pipe02也是中断传输管道,最大数据报也是8个字节。有了这些信息我们驱动的架子就基本上搞定了,找个类似的USB驱动程序,将我们特定的设备信息填写进去,就OK,呵呵,现在我们的设备可以加载/卸载成功了。</P>
                                <P class=newtext></P>
                                <P 
                                class=newtext>此外需要指出的是,此USB设备虽然也是流式接口,但是其实,他的实质的东西并不是以流式接口直接提供给应用程序。设备驱动程序需要直接和SmartCard管理器打交道的,有些类似U盘驱动程序,需要和FileSystem 
                                Manager打交道。所以需要在设备初始化的时候,需要将SMARTCARD_EXTENSION结构需要的信息填写进去。在此之中,比较重要的是几个回调函数,剩下的按照设备的信息填写进去就可以了:</P>
                                <P 
                                class=newtext>smartcardExtension-&gt;ReaderFunction[RDF_CARD_POWER] 
                                = CBCardPower;</P>
                                <P 
                                class=newtext>smartcardExtension-&gt;ReaderFunction[RDF_TRANSMIT] 
                                = CBTransmit;</P>
                                <P 
                                class=newtext>smartcardExtension-&gt;ReaderFunction[RDF_CARD_TRACKING] 
                                = CBCardTracking;</P>
                                <P 
                                class=newtext>smartcardExtension-&gt;ReaderFunction[RDF_SET_PROTOCOL] 
                                = CBSetProtocol;</P>
                                <P 
                                class=newtext>smartcardExtension-&gt;ReaderFunction[RDF_IOCTL_VENDOR] 
                                = VendorIoctl;</P>
                                <P 
                                class=newtext>RDF_CARD_POWER函数是上电、下电、复位函数,每次设备初始化的时候都会调用;RDF_TRANSMIT要求的是数据传输的函数;RDF_CARD_TRACKING是跟踪函数;RDF_SET_PROTOCOL是设置传输协议,无非T0(字符传输),T1(块传输),或者RAW格式,华虹的仅仅支持T0传输方式;RDF_IOCTL_VENDOR就是厂商特殊命令接口。</P>
                                <P class=newtext></P>
                                <P 
                                class=newtext>其中对于华虹的usb-key来讲,最主要的,是CBCardPower和CBTransmit函数,其他的比较简单些。</P>
                                <P class=newtext></P>
                                <P 
                                class=newtext>CBCardPower中需要注意的是一定要把ATR的Buffer的内容和长度告诉SmartCard管理器。ATR(Answer 
                                to 
                                Reset)是指复位应答,是指复位后卡返回的信息,SmartCard管理器使用此返回信息作为读取其他信息的基础。</P>
                                <P class=newtext></P>
                                <P 
                                class=newtext>CBTransmit实现数据交换,基本是所有的数据读取都是通过此函数实现的,这个函数是个核心函数。它其实不真正关心具体的命令格式,它仅仅负责和具体的物理设备打交道,实现数据交换。</P>
                                <P class=newtext></P>
                                <P 
                                class=newtext>另外需要注意的是华虹usb-key其实是读写器和卡融合在一起的设备,所以不需要探测卡是否存在的线程,只要将卡的状态一直设置为SCARD_PRESENT就可以了。</P>
                                <P class=newtext></P>
                                <P 
                                class=newtext>这几个函数搞定了,基本上USB-KEY就可以使用了。真正弄明白了系统的原理后,感觉编写一个SmartCard的驱动程序真是简单,我花了一晚上,做完了,第二天调试通过后,感觉索然无味,太easy了。等我再回头看看WINXP 
                                DDK中的驱动程序例程,一个道理的,只是多了些IRP的请求处理和一些自旋锁的处理。</P>
                                <P class=newtext></P>
                                <P 
                                class=newtext>另外在做驱动的时候要注意不要尽信手册,要勤于思考,多动手,我看了华虹给我的手册,很多东西都是没有的,类似的也有啊,去看看威盛的南桥的手册,说得非常简单,很多芯片的配置信息都要靠自己摸索,才能搞定的。</P>
                                <P class=newtext></P>
                                <P class=newtext>其次一定要要善于使用工具,以下几个工具是必备的:</P>
                                <P class=newtext>1.USB监控程序—BusHound, 
                                可以抓出所有的USB数据进出的报,这样所有的细节都不会逃过你的眼睛。也可以加强你的判断分析能力,类似工具其实很多,usbsniffer以及Compuware公司的wdmsniff都是一些不错的选择。</P>
                                <P class=newtext>2.IdaPro - 
                                大名鼎鼎的反汇编工具,这个是必备的,如果有了一个PC上的驱动,你对汇编程序很熟悉,反汇编看看,无异于阅读源代码了,肯定受益匪浅了。</P>
                                <P 
                                class=newtext>3.WinDriver也是个不错的选择,可以直接读写Pipe,用来验证我们的命令是否正确,当然BusHound 
                                5.0版本也提供了类似的功能。</P>
                                <P class=newtext></P>
                                <P class=newtext>当我开始做GemPlus Usb SmartCard 
                                Reader的驱动的时候,心中感觉还是国外的设备做的比较完善,考虑的东西也比较全面,也更加稳定些。联想到很久前我为国内一款PDA做了一个数据交换的驱动程序时,感觉国内还是和国外的有很大的差距,特别在稳定性方面尤为欠缺。看看柯达的数码相机,我在做PTP传输协议的驱动程序时,感觉真是非常稳定,调试起来非常顺手,在调试PDA感觉就麻烦多了,稍微数据通讯出错,就要关掉机器,重新启动,非常麻烦。</P>
                                <P class=newtext></P>
                                <P 
                                class=newtext>一直讲我们科技落后,其实很多时候都是一些细节上的差距,还是希望能够将我们知道的东西公布出来,带动一大批有志之士,将我们的产品都做的更精更细,更加稳定,更加完善些,带动我们整体一代或者几代人的科技水平。</P></TD></TR>
                                <TR height=1>
                                <TD align=right></TD></TR></TBODY></TABLE></TD>
                                <TD width=10>&nbsp;</TD></TR>
                                <TR>
                                <TD width=10>&nbsp;</TD>
                                <TD align=right width=520>
                                <TABLE width="100%">
                                <TBODY>
                                <TR>
                                <TD align=right>(网页编辑:<A 
                                href="mailto:applic@ccw.com.cn">编程浪子</A>)</TD></TR></TBODY></TABLE></TD>
                                <TD width=10>&nbsp;</TD></TR>
                                <TR>
                                <TD width=10>&nbsp;</TD>
                                <TD width=520>
                                <TABLE cellSpacing=1 cellPadding=0 width=520 
                                bgColor=#dfdfdf border=0>
                                <TBODY>
                                <TR>
                                <TD width=520 
                                bgColor=#ffffff></TD></TR></TBODY></TABLE></TD>
                                <TD width=10>&nbsp;</TD></TR>
                                <TR>
                                <TD>&nbsp;</TD>
                                <TD>&nbsp;</TD>
                                <TD>&nbsp;</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD>
          <TD vAlign=top width=180 bgColor=#e0f5f3>
            <TABLE cellSpacing=0 cellPadding=0 width=180 bgColor=#cccccc 
            border=0>
              <TBODY>
              <TR bgColor=#069cfd>
                <TD background="USB-KEY for WinCE.NET驱动程序.files/03_back_01.gif" 
                bgColor=#00cccc><IMG height=5 
                  src="F:\download\USB-KEY for WinCE.NET驱动程序.files\empty(2).gif" 
                  width=1></TD></TR>
              <TR align=middle bgColor=#f0f0f0>
                <TD align=left bgColor=#f0fffd><STRONG class="t14 white"><IMG 
                  height=11 hspace=8 
                  src="USB-KEY for WinCE.NET驱动程序.files/arrow_azury_r.png" 
                  width=11 align=absMiddle vspace=8 width+><SPAN 
                  class=azury>检索</SPAN></STRONG></TD></TR>
              <TR align=middle bgColor=#ffffff>
                <TD align=middle bgColor=#e0f5f3>
                  <FORM name=search action=/cio/gsearch_cio.asp method=post>
                  <TABLE cellSpacing=1 cellPadding=0 width=176 border=0>
                    <TBODY>
                    <TR>
                      <TD vAlign=top colSpan=5 height=8><IMG height=1 
                        src="F:\download\USB-KEY for WinCE.NET驱动程序.files\empty(2).gif" 
                        width=1></TD></TR>
                    <TR>
                      <TD width=10 height=24>&nbsp;</TD>
                      <TD width=170 colSpan=4 height=24><SELECT 
                        class=input_combobox 
                        style="BORDER-RIGHT: #b8b8b8 1px solid; BORDER-TOP: #b8b8b8 1px solid; BORDER-LEFT: #b8b8b8 1px solid; WIDTH: 75px; BORDER-BOTTOM: #b8b8b8 1px solid; HEIGHT: 16px" 
                        name=D1> <OPTION value=601 selected>网站内搜索</OPTION> 
                          <OPTION value=602>频道内搜索</OPTION> <OPTION 
                          value=603>研究</OPTION> <OPTION value=604>数据</OPTION> 
                          <OPTION value=605>--CCW数据</OPTION> <OPTION 
                          value=606>--政府数据</OPTION> <OPTION 
                          value=607>--其他数据</OPTION> <OPTION 
                          value=608>--CCW报告</OPTION> <OPTION 
                          value=609>CIO生活</OPTION></SELECT> <SELECT 
                        class=defaultFont name=CgryID> <OPTION value=0 
                          selected>选择行业</OPTION> <OPTION 
                          value={F4C51098-D282-4C7C-BEAC-966984CFFD89}>政府机关</OPTION> 
                          <OPTION 
                          value={583FC19E-A49C-4A13-8B44-9235DC5040A3}>工商税务</OPTION> 
                          <OPTION 
                          value={C03971DC-9B5F-4E55-A382-354A67959AA4}>财会审计</OPTION> 
                          <OPTION 
                          value={61BB2497-9B4B-4837-B06A-249417A29805}>司法公安</OPTION> 
                          <OPTION 
                          value={74A41D48-D58E-4696-B590-112C37D6C459}>海关国防</OPTION> 
                          <OPTION 
                          value={28531BD5-4794-415D-9996-B8FA717BC421}>水土环保</OPTION> 
                          <OPTION 
                          value={02F8FD64-C75A-4571-AA6D-F851E1DDFA25}>农  业</OPTION> 
                          <OPTION 
                          value={BD6B45AF-C10C-40C5-880E-FBAC00F02936}>银  行</OPTION> 
                          <OPTION 
                          value={91534ACE-A3C3-43AB-BAC6-81C59F505B36}>证券期货</OPTION> 
                          <OPTION 
                          value={058B4CE9-40D3-44AB-8ECB-2CE38C8A1D72}>航运交通</OPTION> 
                          <OPTION 
                          value={18616947-7429-4F5C-A929-E3B08EF4AA5F}>仓储物流</OPTION> 
                          <OPTION 
                          value={21412070-5781-4572-9C95-5C3B875A245C}>商业贸易</OPTION> 
                          <OPTION 
                          value={A542AC3E-BE9F-4A96-A9E8-0FE7CADB2C7F}>保  险</OPTION> 
                          <OPTION 
                          value={86A5D8F7-6AAF-44CC-A841-589BEF2C711E}>电

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -