In our current WDF seminar, we use a super simple PCI device as an example of a backplane bus type device, and we’ve written a SUPER simple driver for this device as an instructional illustration.
The device we currently use is a PCI device, which is a clone of the venerable Intel 8255. This is a super simple, incredibly common, digital I/O device, with a ridiculously simple register map:
This device, and its accompanying example, has served us well for many years.
It is now more than a little obsolete. The primary problem with these devices is that the registers are in Port I/O space (to maintain compat with the old 8255). It also uses a Line Base Interrupt.
I’m looking for a replacement device to use as a sample in our learning environment. The device and its register map have to be simple enough that any engineer can understand how to use the device quickly. After all, the goal isn’t to teach people how to program this device, it’s to teach them how to write WDF drivers for a PCI device. The device details need to “get out of the way” so we can discuss, for example, how you claim resources, connect to interrupts, service I/O Requests, and process interrupts and DPCs.
Obviously, a data sheet for the device that includes the register map and control info for the device needs to be available. The device needs to be a PCIe device (not trad PCI… though I’d accept a M.2 or MiniPCI device that can be plugged into a PCIe carrier, if necessary)… because showing how to write a driver for a backplane bus connected device is the entire point of this exercise. I would love the device to support MSI, and multiple MSIs would be great addition.
It needs to be a PIO device… We do not have the time to properly discuss DMA in this seminar. One must crawl before one can walk.
I don’t care what KIND of device it is, though it would be nice if the device could do something, or be connected to something, where it could be SEEN working. And, as I previously mentioned, it needs to be easy to understand (even for those who are not necessarily device experts).
Any suggestions?
IF somebody in the community suggests a device that we wind up using, I’ll commit to:
- Write a WDF driver for the device that illustrates best practices
- Write an accompanying tutorial, describing how to write a WDF driver, using this device as an example
- Make the driver source code available on GitHub
- Use the example in our seminar
Anybody have any good device suggestions to share???
Peter