Hi Peter,
I don’t know if such a super simple device exists for PCIe device unless you want to build one with FPGA.
Alternatively, I would suggest Realtek Gbe PCIe NIC like RTL8111. It’s not super simple as your backplane device but it is simple for a GigE device. It meets all your “needs” and “wants”. Register level document is publicly available along with open source drivers too. They are super inexpensive and widely available.
One doesn’t have to write a NIDS miniport driver for it. In fact, when I learned programming general IRP based KMDs back in the NT3.x days, I was using a NE2000 NIC as a target device.
For samples, you could selectively support functionalities based on how much you want to overwhelm your poor students:
- R/W PCI config
- Reading IDs, MAC address, blinking LEDs.
- Bring up the Link with or without MSI interrupt.
- Send a packet, and use a sniffer on the other side to catch it.
- Receive a packet with MSI.
- Receive packets with RSS (MSIx and intr/DPC steering across CPU cores)
- Power management, Sleep, Hibernation, Wakeup. Wait/Wake etc.
- Combinations of above as bonus topic.
Good luck finding your devices!
Regards,
Calvin
p.s. I have never worked for RealTek.