阅读:3439回复:5
如何跟硬件打交道
我做了一个WDM的PCI驱动,正在和硬件联调,我的卡上有一个FPGA做的
RAM,在初始化时应该是由系统分配好卡上的RAM的地址,并在Startdevice这个PnP消息中的resource域中会以 PCM_PARTIAL_RESOURCE_LIST list=&AllocatedResourcesTranslated->List[0].PartialResourceList; port = resource->u.Port.Start; 的方式传过来,然后用 dx->BufferMemBase=(PULONG)MmMapIoSpace(port, nports, MmNonCached); 把它存起来,在硬件操作的例程中再用RtlCopyMemory把信息写到RAM中或提取出来,我认为BufferMemBase就应该是对应RAM的,结果却不能从该地址读出东西。请问在WDM里与硬件应怎样打交道。是用的RtlCopyMemory(参数是虚拟地址还是物理地址?)吗? 还是其他的函数(WRITE_PORT_ULONG我也用过了,也不行)。谢谢先。 |
|
最新喜欢:okincn |
沙发#
发布于:2002-07-22 08:25
sorry, i would like to write it down in English,and
any more question, please email to:sandacoss@sina.com . On a pci card, the FPGA can not be only a ram. you should also build in a ram controller. [编辑 - 7/22/02 by coss] |
|
|
板凳#
发布于:2002-08-09 13:26
太难了,能否给小弟介绍两本书
|
|
地板#
发布于:2002-08-09 23:00
我想问题时这样的,你得到是pci 空间的基地址,但用fpga 实现的
RAM 不一定就是在这个空间里。这应该是硬件设计导致的问题。 |
|
地下室#
发布于:2002-08-14 22:49
我想问题时这样的,你得到是pci 空间的基地址,但用fpga 实现的 硬件设计时,应该对你在FPGA中RAM进行地址译码。 驱动设计时,应该配置PCI的BAR空间。 |
|
5楼#
发布于:2003-03-21 23:04
我做了一个WDM的PCI驱动,正在和硬件联调,我的卡上有一个FPGA做的 1、windows虽然是32位寻址,不过你用该用字节进行偏移,所以你的MmMapIoSpace函数前应该用PUCHAR进行强制转换,否则你的地址加1,实际上加了4个byte(1UONG = 4BYTE),故有可能ram中有数据,你却读错了位置。 2、你说用了WRITE_PORT_ULONG,不过看你的ram是映射的,所以试试WRITE_REGISTER_ULONG,不知道你试了这个函数没有 3、也有可能是硬件问题,这可以用softice看。用“dd 基地址+偏移量”命令,如果可以看到数据就是驱动问题,反之就是你的硬件译码问题了 问题虽然提得比较远(呵呵,现在2003年了),不过以上的回答都是自己在开发驱动时遇到过的,希望对后人有所帮助,呵呵 |
|
|