20楼#
发布于:2001-06-19 08:58
下面是我配置的CIS数据
01,03,00,00,ff, 20,04,00,89,00,01, 15,1c,04,01, 50,43,4d,43,49,41,00, 47,70,72,73,20,43,61,72,64,00 4d,69,63,72,4f,6e,65,00,ff 1a,04,00,01,c8,01 1b,15,c1,01,19,3f,45,bd,4b,d5,19,36,36,6e, ab,60,00,06,10,d0,00,08,ff 14,00,ff, 用你提供的软件读卡上的CIS数据,结果如下; 提示;有6个TUPLE读出,同时显示 01 01 03 03 00 00 00 00 00 00 ff ff ff (3组00,而且多出一个FF) 后来我将CIS的数据第一行改为 01 03 05 07 ff,目的想看看读出的零是怎么对应的,结果如下 提示:有6个TUPLE,同时显示 01 01 03 03 05 05 07 ff ff 20 20....读出的CIS数据居然全部是对的. 现在我的迷惑在于,为什么会这样呢?是我配置的数据有问题,还是你的软件在读数据上有什么讲究? |
|
21楼#
发布于:2001-06-19 08:59
忘了一句,第一种方式读出的数据就再也没有了!!
|
|
22楼#
发布于:2001-06-19 09:27
你的配置数据当然没问题。
当出现“01 01 03 03 00 00 00 00 00 00 ff ff ff (3组00,而且多出一个FF) ”的情况时,你看我那程序解析你的CIS对吗(特别是CISTPL_CFTABLE_ENTRY)?如果对了,那就是我那程序存盘部分(Attribute Memory烧结文件)有bug;如果解析的不对,那很有可能是操作系统CARD SERVICES读的不对,或者不稳定。 多两个00和一个ff的情况还能重现吗? 我用那个程序分析了一下,兄弟的正常工作电压为什么是4V呀?(45) |
|
23楼#
发布于:2001-06-19 09:40
开始的时候我的数据读出不对,所以就想设定个4V看能不能成功(事实证明这种想法是幼稚的.)
数据拿你的哪个软件分析过了,好象没什么问题!我每写一次EEPROM时,同时产生一个二进制文件,以便用来分析. 我把数据改为01 03 05 00 FF读出也行 但一改为01 03 00 00 FF就不对. 另外,我还忘了说了,在读出的数据都对的屁股后面多出了31个FF,我也不知道是为什么?(我EEPOM后面没用的空间我都写上了FF) |
|
24楼#
发布于:2001-06-19 10:52
我将数据
01 03 XX 00 FF 中的XX挨个从0~7 试了一次.结果如下: XX=00,01 02 03 04 都是少读数据, XX=06,数据有重复读取的现象 XX=05,数据都对,但会多出一大堆FF. xx=07,数据的顺序都对,但在数据中间出现了几个数据的错误! 要说是程序不稳定,我看不象,因为错的非常有规律. 在协议中有关于XX地一段说明:AN Address Space Indicator value of zero (0) is illegal since it would indicates that the devices are in cardbus pc card configuration space. 但这只是针对CARDBUS PC CARD 而言的! 而且,当数据01 03 00 00 FF时,读取报告是6个TUPLE,这是和事实想吻合的,但不知道为什么显示出来的却有问题 |
|
25楼#
发布于:2001-06-19 12:49
如果可以,能否告诉我你们的卡,io的访问速度有没有测过。多长时间访问一次。
|
|
|
26楼#
发布于:2001-06-19 13:04
硬件还没整出来,那里有速度一说啊?
|
|
27楼#
发布于:2001-06-19 13:20
在不同的软件环境中测试结果不一样,测试都是连续写入PCMCIA卡8K数据,再连续回读,用示波器测量结果如下(大概):
纯dos: 读写脉冲宽度300ns,脉冲间隔1700ns 换算下来大概0.5MB/s(4Mb/s) 利用vc的_inp和_outp: 读写脉冲宽度300ns,脉冲间隔3000ns 换算下来大概0.3MB/s(2.42Mb/s) 利用VxD: 读写脉冲宽度300ns,脉冲间隔1000ns 换算下来大概0.77MB/s(6.15Mb/s) |
|
28楼#
发布于:2001-06-19 16:00
IO操作时读写脉冲300ns是没办法缩短的了,是不是可以做一个映射到memory空间的IO口?由于对memory操作很快,应该可以及大的提高速度。
不知道jeosph同志试过没有? 我当时试着申请一段memory空间,但分配的总在HBA申请的空间内(系统->设备管理器中看到的),不知道怎么回事? 再有好象涉及到MTDs(内存技术驱动器)了,彻底晕菜了! 有高手能给咱讲讲MTDs吗?:confused: |
|
29楼#
发布于:2001-06-19 16:08
我到现在硬件还没有调通!
在ME中,系统总是在启动的时候,给我自动装安装CARD SERVICE 从不提示我安装新硬件的驱动程序! 而在2000中,总提示我安装新设备的驱动程序,但总是设备名称对不上。设备当然也就用不起来了! 对了,你说在VC中用_outp(),此端口就是在设备管理器里给你的吗? 另外,我的设备数据交互有200KB就够玩得转了,所以,对速度问题要求,没有你的高! 现在首要的任务是把硬件调通,否则,软件驱动根本没法往下做的。 |
|
30楼#
发布于:2001-06-19 16:47
操作系统在启动的时候如果发现有PCMCIA槽,会自动根据HBA型号安装SOCKET SERVICE和CARD SERVICE的。
你是等系统起来后插入你的PC卡,还是先插然后启动? 系统发现新硬件后(你的卡)应该要求你指定或插入驱动盘吧(INF文件)。你写的INF文件中的设备标识字符串和用DTPL -I产生的一样吗?如果不一样是不认的。 我用_outp时的端口号就是申请的,比如你申请的600H段空间,当然是先在设备管理器里确认的。 关于速度你挺走运的,我的BOSE要求是没有止境的,给我的任务是向速度理论值无限逼近!TNND:( 你知道在WIN95和VXD中怎么知道系统给分配的资源吗?也可以用你说的办法吗? |
|
31楼#
发布于:2001-06-19 17:01
在95中,用说的那种方法分配资源,好象行不通。我说的方法是建立在WDM模型上的,2000中驱动可以在98中用,这种方式NT下也可以,只不过,提取资源的地方不一样了,当方法是一样的。
我是将卡先放在SOCKET中然后启动系统的!系统启动的时候,根本不经过我的同意就自做主张地将CARD SERVICE 给安装进去了。 DTPL我始终没用起来,在TOSHIBA 的网站上没有,实模式的CARD SERVICE,而且笔记本现在只能用2000和ME,98是用不起来的! 另外,请教一个问题DTPL 中的参数F是如何用的? 我的方法是先建立一个 文本文件 aa.txt 然后 键入 DTPL -F AA。TXT 屏幕提示:tuple data from file . 我在那里可以看见DTPL分析后的数据呢? |
|
32楼#
发布于:2001-06-19 17:23
操作系统安装不安装card services不是咱们能做主的,它发现有PCMCIA槽和它支持的HBA就自动安装了!
你键入DTPL就会有DTPL的帮助了,键入DTPL -F AA.TXT -T|MORE就会显示你所有TUPLE的信息了,键入DTPL -F AA.TXT -I就会给出INF文件中需要的“设备标识字符串”了。 如果你想用DTPL读入CIS只能找一个老笔记本了。我就是由于找不到合适的老笔记本才被迫编的那个程序的! |
|
33楼#
发布于:2001-06-19 17:47
我刚才已经琢磨出用法了,不过还是要谢谢你的无私的帮助!
发现一个问题,在你的软件上可以通过的分析,DTPL就是TMD不认!愁人! 等硬件调试通过了,就有时间漫漫琢磨软件了。 再次,谢谢你。改天请你和啤酒!没问题吧?!!不过,我的酒量不太好,半瓶正好,一瓶嫌高,两瓶肯定倒!!哈! |
|
34楼#
发布于:2001-06-19 18:46
你的数据很有意思,我测出的io读写速度数据如下:
片选信号脉宽:571ns wr/rd脉宽:380ns 我想知道对io的读写速度是由cis决定,还是由驱动程序的某些设置决定。(到现在我知道桥接器的exca部分可以控制读写时序但没办法设那些寄存器)希望pony多多帮忙。 |
|
|
35楼#
发布于:2001-06-19 21:03
Pony同志你好:
经你指点,我用DTPL分析我配置的数据,分析结果说是有矛盾的地方。说明我配置的数据有问题。 因为我不敢肯定我的硬件,就用了你贴出的数据。 用我的数据系统总是在PCMCIA插槽多一个CARD SERVICE,屏幕右下脚有一个,未知设备的小图标。用了你的数据以后,这些都没有了,说明系统认识了这个设备,可是,我在设备管理器里找不到它,因为我根本就不知道它是谁? 另外,还有几个问题。望不吝赐教 1)TPCE-FS中有一个MISC不知道有什么用处; 2)TPCE_PD 都有一个字节的EXTENSION,我没看懂是什么意思; 3)我看了一下你的IO地址线,好象就9根,是否? 我都给这些CIS数据搞得快疯了!! |
|
36楼#
发布于:2001-06-20 08:14
pony:
你好,后面的三个问题,我终于弄清楚了,我的CIS经DTPL分析也认可了,只是一大早来,还没来得及灌入EEPROM。但前面所说的,你那个数据形成的设备在什么地方,我还是不知道。 另外,你说在VC中用 _outp(*,*)连续发送8K的数据好象无法知道,数据是否正确发送,因为,这个函数好象并不去查询,外设是否空闲,它只管发送,发送的速度就是程序执行的速度啊!而且即使是 延时发送,处理起来也比较罗嗦!WINDOWS里TICK的精度好象也只能达到微秒级啊? |
|
37楼#
发布于:2001-06-20 09:35
关于速度问题,我个人的理解如下:
对于PC Card型卡,由于是对ISA总线的一种延伸,所以IO读写速度是由PC机硬件自己决定的,300ns读写脉冲宽度也是ISA的规范,和CIS及驱动都没有关系;至于Card BUS型卡,小弟还没开始做,就不知道了。 从理论上可以推算出ISA(8bit宽)总线的吞吐量,也可以引用到PC Card卡上(8bit宽),具体可以看关于ISA的资料。 yiduz同志测读写脉冲或选通脉冲间隔了吗(读写频率)? 由于300ns是限制死了,所以要想提高速度好象只能不用IO方式,用MEMORY影射方式了,因为系统对MEMORY读写脉冲宽度会比对IO操作的窄很多,但在CIS中申请MEMORY窗口时,分配的和我申请的不是一个地址(分配的在是HBA自己申请的MEMORY窗口中),但操作系统通知PC卡资源分配成功了。我向操作系统分配的MEMORY地址生写数据(用WINDRIVER)时,系统并没有向卡发送MEM读写脉冲,不知道真正对谁操作了? jeosph同志: 你用我的数据时好象系统应该提示你指定驱动程序的位置吧?因为我的那个CIS不是WINDOWS内部支持的类型的卡,如果没向你要驱动程序,那八成系统没认那个卡。你可以在系统起来后再插入卡,如果听到清脆的一声“嘀”,说明系统认了,同时满足卡的资源请求了,如果听到沉闷的或没听到“嘀”说明系统没认卡。 另外你可以双击右下脚SYSTRAY中的那个象卡一样的小图标,如果系统没认,那会发现一个槽显示空,另一个没显示空,但也没显示CISTPL_MANFID和CISTPL_VERS_1中的信息,那肯定是系统没认卡。正常应该显示CISTPL_MANFID和CISTPL_VERS_1中的信息,比如你的“pcmcia-gprs card”信息。我的那个是申请DMA的,系统不支持,所以系统认为这个卡什么资源也不需要,不就等于什么也没插吗(相当于没有这块卡)!所以还不能用我的那个数据。 你的数据也应该是 可以的(把4V改过来吧)。如果你需要确实能用的一个CIS,告诉我。 我早上给我公司发了一个PCMCIA协议,但有问题,jeosph同志能不能给我发一个META FORMAT(CIS)部分的PCMCIA协议?我们公司的机器没有软驱和光驱(惨!!!!!!!) 我的mail:litian@viatech.com.cn or bjtianli@21cn.com 先谢了;) [pony 编辑于 2001-06-20 09:46] |
|
38楼#
发布于:2001-06-20 09:43
_outp()是不检测外设是否空闲,但外设是我做的,我能保证即使操作再快,外设也能跟上,因为我设计外设时保证外设的吞吐量至少不低于20Mb/s,但现在即使在RING0对它操作,也才6Mb/s左右。应该没问题!
jeosph同志说的对:发送的速度就是程序执行的速度!但就是程序执行的速度太慢了!确切的说是对IO操作太慢了! 我愁苦的还是IO端口的本来速度就不高,所以想用MEMORY影射方式或DMA(yiduz同志已经告诉我了,WIN9X不支持DMA!) |
|
39楼#
发布于:2001-06-20 10:44
你的Memory映射,最好在CIS的Tuplecode为1b的configuration中Memory描述项中只声明Memory的大小,而不强制映射地址,一般这样比较好;你的问题还有可能是你在CIS的Memory描述中本来就是映射到HBA的地址中间了,你自己设置的物理地址根本就没有发生作用阿!
(以上是我的一个同事写的,我不懂硬件)由于我的系统对速度要求很高,所以对读写脉宽很感兴趣。我想知道你的脉宽是指片选还是iowr iord信号,如果是后者那么片选还没结束总线控制权没有让出自然间隔长了。在我的hba上片选的setup time是60ns,hold time 是120ns。另外我的程序是在pc上调的所以专门买了一个pcmcia-to-pci的hba,这对速度有没有影响(我指的是如果我用一个插在isa的bridge会不会快一些)。我的io速度只有571ns一次。 我的两次io访问间隔为546ns。如果每次读写都从连续的两个io上读32bit出来(时序上将其分为两个间隔为50ns的16bit读写),两次32bit的读写间隔为546ns,这速度为18.3M。(但有可能还是不够,真不知道你的300ns是怎么做的) |
|
|