阅读:2044回复:2
求救,使用FPGA的编写的PCI软核,驱动程序问题
请教各位朋友,我们做了一块PCI接口的网卡,使用的是FPGA编写的PCI软核,而不是PCI芯片。所以我在驱动程序中也没有对PCI配置。使用DS编写了PCI驱动程序,就是用一个IO和一个中断两个资源,在双击调试的时候(使用交叉线),传输数据没问题。但是当把传输卡接到网络上时(使用网线),只要网络上一有广播包,机器就蓝屏。用WingDbg调用Dump信息,发现是在*pBuffer++=m_IoPortRange0.inw(ETH_DATA);这条语句导致的。但是我一直都想不通,蓝屏一般都是内存问题。要是内存有问题,双机通讯就应该出现蓝屏。(注明:我没有编写网卡驱动程序,而是就编写了一个PCI驱动程序,把协议栈都放到应用程序实现。PCI驱动程序只管接收网卡缓冲区的数据,然后在应用程序完成解包功能)。
还有,我还是不太懂PCI协议。所以那个使用FPGA编写的PCI核我也没看懂,他到底和PCI芯片有什么区别(在编写驱动这块我发现了区别,就是我看武安河编写的PCI芯片的驱动程序需要自己在驱动程序中配置,可以使用IO,DMA。而我使用的PCI软核,根本就不需要配置,就直接用DS添加一个IO,就能读写数据,要是要中断,再加一个中断资源)。我都快疯了,没头绪,我不知道我说的是否详细,希望编写过这方面的驱动程序的人能给我点帮助,一点建议也行。谢谢,要是不够详细,可以加我QQ谈,我的QQ:332390405.(学生) |
|
|
沙发#
发布于:2009-02-21 10:34
没用过FPGA的PCI核,只用过PCI芯片,不过道理应该是一样的,就是都要遵守基本的PCI规范
你在用IP核的时候,就可以把他当作PCI芯片去看。它的说明里肯定会有其包括的寄存器说明的,这些肯定是需要配置的,除非它都做成ROM固化在IP核里面了,是用户不可更改的。举个例子来说,你如果不配置你的PCI设备所需的内存大小,主机怎么知道该分你多少啊? 另外,蓝屏最大可能的确是内存问题,比如内存越界访问等,或者是中断的异常。建议分析一下双机互联时和接入网络时数据包的区别,如大小,格式等,并且看一下引发中断的类型,频率等。 |
|
板凳#
发布于:2009-02-22 15:12
谢谢你,“蓝屏”问题已经解决,好像和配置网卡寄存器有点关系。具体我也不清楚,反正改完就好使。我也把驱动程序的接收代码改动了,所以都不知道是什么原因造成的。
另外,谢谢楼上这位,PCI的配置应该是在FPGA的IP核里已经用VHDL描述完了,我直接是烧进FPGA芯片里,所以编写驱动时不需要在配置。 还有个问题,就是我用DriverMoniter检测到网卡寄存器不仅接收广播包和自己MAC地址一样的以太网数据包。而且还接收一个目的以太网地址为“01 80 c2 00 00 00”的数据包,我不知道为什么,有谁做过Dm9000(A )网卡芯片的能否告知。 |
|
|