本文主要介绍一个简单的单一设备PCIE驱动程序和设备的通信协议,从上到下大致分为三层:应用层、驱动层和设备层。其中,应用层和驱动层通过系统总线(win32 API调用)实现通信,驱动层和设备层通过PCI总线(地址空间映射)进行通信。
一、Driver和Device的数据交互方式
Driver和Device的通信主要是通过地址空间映射来实现。操作系统将Device的物理地址映射为系统虚拟地址,Driver可以直接读写;Driver也可以分配一段内存,映射为PCI地址,供Device读写。后面将这种映射的内存称为buffer,Driver和Device的数据交互就是通过这种读写共享buffer的方式实现的。大致可以分为以下几种类型:
WRITE_CMD方式:Driver写Device的buffer
READ_CMD方式:Driver读Device的buffer
DMA_WRITE方式:Device读Driver的buffer
DMA_READ方式:Device写Driver的buffer