硬件扫描过程就是把数据发送到总线上,以硬件扫描ATL缓冲区为例:当HCD通过HCTRansferCounter寄存器向ATL缓冲区写入HcATLBufferPort寄存器指定的字节数时,主机 控制器 硬件开始扫描ATL缓冲区;当操作完成后,HcBufferStatusPort寄存器中的位ATLBufferFull被置位,ATLBufferFull位从逻辑0到逻辑1的跳变使硬件开始扫描ATL缓冲区内的PTD;当ATLInt中断产生时,表明硬件停止扫描ATL缓冲区,HcBufferStatus寄存器中的位ATLBufferDone被置位,HCD又可以访问ATL缓冲区了。相关的部分伪代码如下:
点击看原图
数据结构链表的处理
在HCD将PTD从系统内存复制到ATL或ITL缓冲区之前,HCD必须通过集合数据结构来建立和追踪PTD。HCD的责任是追踪所有已连接设备的每个端点的属性,如端点最大封包大小、端点地址和该端点从属的设备地址。另外,HCD必须管理每个端点新的PTD的产生和已经完成的PTD的处理。所以使用一个有效的数据结构体系可以加快主机控制器的操作。本设计实现的数据结构类似于OHCI中定义的数据结构,如图4所示。此数据结构由三部分组成:三种类型端点的队列(控制传输端点、批量传输端点和中断传输端点)、每种端点的一个PTD列和一个完成队列。每个列队由一个全局指针指定,这个全局指针保持队列中第一个端点(EP)队列头的地址。每个EP队列头指向一个PTD列。一个PTD列保留着等待被主机控制器处理的PTD。在控制、批量和中断传输中,PTD被复制到ATL缓冲区。一旦PTD被放入ATL缓冲区,主机控制器就在下一帧中处理该PTD。
结束语
在USB主机端功能实现后,我们又开发了USB设备——指纹传感器MBF200的驱动程序,并按照规定要求实现了指纹数据的采集和传输。
参考文献
[1] 田泽. 嵌入式 系统开发与应用教程. 北京航空航天大学出版社,2005.
[2] 肖踞雄,翁铁成,宋中庆. USB技术及应用设计.清华大学出版社,2003.