阅读:8339回复:56
如何得到操作系统分配给PnP设备的资源呀(IRQ,I/O Ports,Mem range DMA channel etc.)
小弟做了一块PCMCIA卡,在做驱动时遇到了问题:不知道操作系统给我的卡具体分配了什么资源,我就没有办法读写它。
众大虾帮帮我把。 |
|
最新喜欢:jmzz00... |
沙发#
发布于:2001-05-24 17:06
PCMCIA 卡的结构是怎样的,你是怎样在硬件上分配这些资源的?
|
|
|
板凳#
发布于:2001-05-24 17:38
我将想申请的资源写到PCMCIA卡的CIS中(可以有好多种资源申请选择)。当操作系统发现有PCMCIA卡插入后,读取CIS,就知道我想申请什么资源了。由于可以有多种资源申请选择(如可以申请起始地址在任意地方的n个连续的I/O口、申请任意一个操作系统可以提供的IRQ等等),我不知道操作系统最终给我什么资源了,在控制面板的系统中可以看到,但我的驱动程序怎么可以知道呀?????
|
|
地板#
发布于:2001-05-24 18:03
开发用的什么工具,driverwork or 从头做起?
|
|
地下室#
发布于:2001-05-24 18:45
你在CIS中配置的数据可以让我看看吗?并稍微说明一下.
我是这么想的:在机器启动的时候,CIS中的数据也就被读到计算机里面了,以后,对于PCMCIA的配置资源信息应该和PCI总线上的端口配置信息读取的方式是一样的,都在资源列表\资源描述符里面,但我不清楚,当CASE CmResourceTypePcCardConfig 时,将出现什么情况! 我的信箱:jeosph@sina.com |
|
5楼#
发布于:2001-05-24 19:38
我以前用vToolsD做VxD驱动,现在接到新任务,要支持Windows2000,不得以又要学WDM,刚学用DriverWorks,
不过遇到的问题和VxD一样。 我的CIS如下,可以用depl.exe直接解析: 01H 03H 00H 00H FFH 20H 04H 89H 00H 00H 01H 15H 16H 04H 01H 4BH 2EH 4EH 5FH 47H 72H 6FH 75H 70H 00H 44H 4DH 41H 5FH 43H 61H 72H 64H 00H FFH 1AH 05H 01H 20H 00H 10H 03H 1BH 09H E0H 01H 89H 01H B5H 1EH 24H 81H 04H 1BH 04H 21H 80H 82H 0CH 14H 00H FFH 小弟才疏学浅,没看懂jeosph同志说的“资源列表\资源描述符”,能给详细讲讲“资源列表\资源描述符”和如果具体得到资源配置吗? 另外,我将自己编的一个东东放到了相关下载的特别提供,是测试版,有好多好多问题,也请众位大虾帮忙给测试测试,xixi。 |
|
6楼#
发布于:2001-06-11 10:45
chant 的那本书说得很清楚的 !自己看吧!!
|
|
7楼#
发布于:2001-06-11 18:05
而且我 仔细看了一下你 配置的信息 ,好像在 TPL_CODE处, 有问题!
|
|
8楼#
发布于:2001-06-14 19:12
你那个读CIS的程序,到底是怎么回事吗?
偶地址字节送了两次, 即总是将我属性内存 中的偶地址字节的数据读两次,我用逻辑分析仪抓了一下PC机送出的地址,也的确如此!读出的数据如下 01 01 03 03 00 00 00 00 FF FF FF 我配置的数据为(01 03 00 00 FF). 实在搞不清楚,问题出在哪里?? |
|
9楼#
发布于:2001-06-15 08:43
谢谢jeosph同志!
你说“好像在 TPL_CODE处, 有问题! ”,能再具体点吗? 我那个读CIS的程序是通过操作系统的card service读出PCMCIA卡的CIS,为什么会将偶数地址读两编,偶也不知到了。你能告诉我你的软/硬件环境吗(HBA控制器型号,笔记本型号和我那个程序发现的Card Service版本号)?我也想烟酒烟酒,xixi |
|
10楼#
发布于:2001-06-15 09:37
tpl_code处,你没有申请中断.在电压后面,没有扩展的一个字节!
没有申请中断,好象无法得到,中断资源吧. 没有扩展字节,后面的资源分析能对吗? 我用的东芝笔记本,刚买的,至于里面用的是什么控制器,我也不知道.等我看清楚了在告诉你吧.OS是ME! 但CONTROLLER应该是符合协议标准的. 他们的上层都是CARD SERVICE,SOCKET SERVICE是不用我们介入的. CARD SIDE芯片是ZILOG 公司的Z86017. CARD SERVICE 是在每次开机时,如果我的卡在插槽内,系统会自己装入! 奇怪的是我在用DTPL.EXE分析CIS时,总是提示我 FAIL TO REGISTER CLIENT!不知道是怎么回事? 对了,你用的CARD SIDE芯片是什么型号的? |
|
11楼#
发布于:2001-06-15 11:16
忘了说了,我贴的那个CIS只是申请DMA资源和要求3.3V供电的。我在“硬件&USB驱动开发”中也问了一个关于PCMCIA卡的DMA问题,这个CIS是用来做DMA实验的,不好意思。
用DTPL分析PCMCIA的CIS时,只能用实模式的SOCKET SERVICE和CARD SERVICE,不能用WINDOWS的保护模式的。没有实模式的SERVICE只能用-f分析文本文件了。 在电压后面我扩展了?!(B5 1E)且用DTPL分析也说是3.3V了,没报错。 jeosph同志如果不怕麻烦可以用UEDIT或DEBUG将我贴的那个CIS重新输入成一个BIN文件(CIS映像文件),如0101030300000000ffff2020......,用我的那个程序一看变知。 我的卡的接口部分是用CPLD按照PC Card Release 7.0(PMCIA 2.1)规范自己设计的。 我现在除了不知道操作系统实际分配的资源外,关于DMA操作也有问题。我申请DMA资源时,WINDOWS一点反映都没有,但申请别的资源可以(i/o,irq)。你用的z86017支持PCMCIA卡DMA操作吗?我现在怀疑WIN95/98/ME不提供PCMCIA卡的DMA工作方式! |
|
12楼#
发布于:2001-06-15 13:02
我用的Z86017不支持DMA方式,我的用途就是个I/O口,将在IP层拦截到的数据从I/O送出去就可以了。
你是做VxD的,我比你更惨,原来是做MCU的,所以更是困难重重! 在2000中,驱动程序的模型为WDM,其中一个重要的特点支持,驱动程序分层。 在新硬件插如计算机后(或者系统上电),总线程序会递归地枚举设备,最后发现你的新设备。在枚举的过程就包括了判断你的资源要求,如果你的要求与系统已经分配给其他设备的资源没有冲突,你的申请就可以成功,如果有冲突,系统就要做资源分配仲裁,将仲裁后的结果给你,(或者你的资源变了,或者其他设备正在使用的资源变了)。分配给你资源放在资源列表,资源描述符里(CM_RESOURCE-LIST,CM_FULL_RESOURCE_DESCRIPTOR,参见DDK文档)至于这些资源的提取是要在你的驱动程序里完成的,PNP管理器会给你的驱动程序发送与设备PNP相关的一系列IRP,及IRP_MN_PNP_XXX,其中就有一个启动设备的次功能代码,在这个地方,你的驱动程序就可以提取这些相关的资源了。以后,你在设备管理器(控制面板中)查看设备资源,系统也是要调用你的驱动程序去提取的。这就是你看不见资源的原因。上面的是我跟踪WDM驱动程序流程得到的结论。你看是否有用。 说的实模式CARD SERVICE那里去寻找,你有吗,有就发一个给我。 mail jeoshp@sina.com |
|
13楼#
发布于:2001-06-15 14:33
看了jeosph同志的帖子,比看1个星期的书还管用呀,非常感谢。我多少有点门了。
实模式的驱动程序是笔记本的厂商提供的,不同牌子和不同型号的笔记本的驱动都不一样,以前的笔记本都有,现在的好象都没了,都直接用WINDOWS的了,你可以找一个老一点的笔记本,如果没有可以从制造商的网站上找找,老THINKPAD和COMPAQ的老笔记本好象网上有它们的实模式驱动。 你做的东东不要求速度吗? |
|
14楼#
发布于:2001-06-15 14:56
现在,先做出来在说,那里管得了速度!
另外,你自己分析一下你贴出的CIS数据吧! 反正,我用UEDIT32试了一下,不对! |
|
15楼#
发布于:2001-06-15 16:38
B5 1E按照协议应该是1。5V吧!
|
|
16楼#
发布于:2001-06-15 17:35
数据格式的问题,我弄错了,C程序写错了,
但操作电压的问题,好象依旧,你仔细看一下 B5=10110101 B.7=extension 0110101=1.5*1v 协议如此! |
|
17楼#
发布于:2001-06-16 10:06
问个问题吧:在CISTPL_CONFIG 中的TPCC_LAST到底是什么意思呢?
看了半天的资料也不甚了了? |
|
18楼#
发布于:2001-06-16 13:10
你的电压配置上对的,我分析错了,可是,CTPL_LAST是什么呢?依旧不知道!
|
|
19楼#
发布于:2001-06-18 08:47
一般讲PC卡的资源配置(CISTPL_CFTABLE_ENTRY)可允许有多组。
TPCC_LAST就是告诉操作系统枚举程序和资源分配程序哪个是你资源配置组的最后一组。 每个CISTPL_CFTABLE_ENTRY的Configration_Entry_Number就是标志,TPCC_LAST应该等于最后一个CISTPL_CFTABLE_ENTRY的Configration_Entry_Number。 当操作系统分配给你你需要的资源后,会吧相应CISTPL_CFTABLE_ENTRY的Configration_Entry_Number写到Configration Register中,这样PCMCIA卡读出Configration Register的值就知道操作系统给自己分配的资源是哪一组了。 另外我觉得可以结合硬件设计灵活选择CISTPL_CFTABLE_ENTRY的Configration_Entry_Number的值,可以根据Configration Register的值来动态配置硬件译码,作到PCMCIA卡这一侧的“即插即用”。 |
|
上一页
下一页