PCIe扫盲——基于WinDriver快速开发PCIe驱动简明教程
2赞连载目录篇:http://blog.chinaaet.com/justlxy/p/5100061871
本文将简要介绍如何使用Jungo公司的WinDriver工具快速开发PCI Express设备驱动,以及相关注意事项。本文所使用的的测试平台信息如下:
※操作系统:Win7 SP1 64bit
※驱动开发工具:WinDriver12.1
※应用程序开发工具:MSVS2012
※PCIe测试板卡:Lattice ECP5 Versa Board
※FPGA开发工具:Lattice Diamond 3.11
※PCIe参考设计:ThroughPut Gen1 Based on ECP5 Versa Board(见本文附件)
由于电脑上安装了Lattice提供的ThroughPut参考设计的驱动了,因此我们将PCIe的Device ID改为EC32(默认为EC30),改完之后,之前安装的驱动就不认识这个PCIe设备了。开机之后,系统也会提示驱动安装失败,设备管理器则将其放在了其他设备一栏中,如下图所示:
然后,打开WinDriver,点击New Host Driver Project,进入选择器件界面:
选中待开发驱动的设备,点击Generate .INF file
选中自动安装INF文件,并点击Next,随后会弹出:
点击始终安装此驱动程序软件,然后再回到设备管理器界面,可以发现驱动已经安装成功:
此时的WinDriver开发界面如下图所示:
然后点击BAR0,界面如下,我们可以在此添加BAR0范围内的相关寄存器:
点击添加寄存器,界面如下,输入寄存器名称和Offset:
点击OK后,添加成功,随后点击Project->Generate Code,或者点击图中红框框处:
选择MS 2012(我的CPU是AMD的,所以选择的是AMD64),同时选择唤醒安装的IDE:
随后界面如下:
此时,会自动提示你关闭WinDriver,防止在运行MSVS编译后的应用程序时,与WinDriver产生资源冲突:
直接编译MSVS中的Project:
随后找到,生成的EXE文件,按照步骤,写SEG_LED寄存器的值为0000000C,成功后Versa板上的数码管显示数字1。
驱动的发布稍微复杂一点,具体可参考WinDriver UG的第十四章节。当然你还需要正式的License,尽量支持一下正版。
附件(本文使用的FPGA Project):PCIe_Throuput_Gen1x1.7z