USB主机软件设计

系统的软件平台是微软公司的Windows CE。

ISP1161软件模型

USB主机软件系统包括通用串行总线驱动程序(USBD)、主机控制器驱动程序(HCD)和客户端软件。客户端软件是应用代码或USB类驱动程序。USBD和HCD共同用作USB主机堆栈。USBD以I/O请求包的形式指定某一特定通道传输数据,并把请求分解成多个事务。HCD与ISP1161之间以PTD(Philips Transfer Description)的形式进行通信。I/O请求包的数据在底层被打包成PTD的格式后再与ISP1161进行通信。

ISP1161只提供了一部分符合OHCI标准的寄存器,而其硬件是支持OHCI标准的。所以为使它完全符合OHCI标准,我们设计时在系统内存中定义一套完全符合OHCI规范的操作寄存器和HCCA控制器通信区,软件读写其中数据,以软件模拟硬件来实现完整的OHCI规范,并按照OHCI规范的要求,在系统内存中维护了一套完整的数据结构,以完成对主机控制器初始化、状态读取并收集USB主机与设备通信的详细信息。

ISP1161的数据传输模式

ISP1161提供了HC控制和状态寄存器、ATL缓冲区和ITL缓冲区。其中HC控制和状态寄存器包括一套可操作的符合OHCI的寄存器(32位)和一套ISP1161特定的寄存器(16位)。通过对相应寄存器的操作,主机控制器驱动程序就可以完成对主机控制器初始化和配置工作。ATL缓冲区和ITL缓冲区用来实现USB系统支持的四种不同数据传输:控制传输、批量传输、中断传输和实时传输。ITL是实时传输的缓冲的FIFO,而ATL是USB其它三种类型传输的缓冲FIFO。

ISP1161数据传输的具体过程为:硬件初始化完成后,调用HCD的MakePTDdata函数在系统存储器中以PTD数据结构定义一块数据缓冲区。再调用SendPTD函数发送PTD数据,其中的WritePTDtoATL函数将数据复制到ATL或ITL缓冲区。通过ISP1161硬件扫描ATL或ITL缓冲区以实现与USB终端设备进行通信。

硬件扫描过程就是把数据发送到总线上,以硬件扫描ATL缓冲区为例:当HCD通过HcTransferCounter寄存器向ATL缓冲区写入HcATLBufferPort寄存器指定的字节数时,主机控制器硬件开始扫描ATL缓冲区;当操作完成后,HcBufferStatusPort寄存器中的位ATLBufferFull被置位,ATLBufferFull位从逻辑0到逻辑1的跳变使硬件开始扫描ATL缓冲区内的PTD;当ATLInt中断产生时,表明硬件停止扫描ATL缓冲区,HcBufferStatus寄存器中的位ATLBufferDone被置位,HCD又可以访问ATL缓冲区了。相关的部分伪代码如下:

#define hccport base_address | 0x02

#define hcdport base_address

#define CMD_RD 0x00

#define CMD_WR 0x80